Optimize Neo4J subgraph query performance
This commit is contained in:
@@ -701,34 +701,20 @@ class Neo4JStorage(BaseGraphStorage):
|
|||||||
relationshipFilter: '',
|
relationshipFilter: '',
|
||||||
minLevel: 0,
|
minLevel: 0,
|
||||||
maxLevel: $max_depth,
|
maxLevel: $max_depth,
|
||||||
|
limit: $max_nodes,
|
||||||
bfs: true
|
bfs: true
|
||||||
})
|
})
|
||||||
YIELD nodes, relationships
|
YIELD nodes, relationships
|
||||||
WITH start, nodes, relationships
|
|
||||||
UNWIND nodes AS node
|
UNWIND nodes AS node
|
||||||
OPTIONAL MATCH (node)-[r]-()
|
WITH collect({node: node}) AS node_info, relationships
|
||||||
WITH node, COALESCE(count(r), 0) AS degree, start, nodes, relationships
|
RETURN node_info, relationships
|
||||||
ORDER BY
|
|
||||||
CASE
|
|
||||||
WHEN node = start THEN 0
|
|
||||||
ELSE length(shortestPath((start)--(node)))
|
|
||||||
END ASC,
|
|
||||||
degree DESC
|
|
||||||
LIMIT $max_nodes
|
|
||||||
WITH collect({node: node}) AS filtered_nodes
|
|
||||||
UNWIND filtered_nodes AS node_info
|
|
||||||
WITH collect(node_info.node) AS kept_nodes, filtered_nodes
|
|
||||||
OPTIONAL MATCH (a)-[r]-(b)
|
|
||||||
WHERE a IN kept_nodes AND b IN kept_nodes
|
|
||||||
RETURN filtered_nodes AS node_info,
|
|
||||||
collect(DISTINCT r) AS relationships
|
|
||||||
"""
|
"""
|
||||||
result_set = await session.run(
|
result_set = await session.run(
|
||||||
main_query,
|
main_query,
|
||||||
{
|
{
|
||||||
"max_nodes": max_nodes,
|
|
||||||
"entity_id": node_label,
|
"entity_id": node_label,
|
||||||
"max_depth": max_depth,
|
"max_depth": max_depth,
|
||||||
|
"max_nodes": max_nodes,
|
||||||
},
|
},
|
||||||
)
|
)
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user