从Cypher(Neo4j)中的ID列表中返回大子图]]

问题描述 投票:0回答:1

我对将Neo4j客户端用于Java提出了疑问。我有一个约有120.000.000节点和1.000.000.000边的图。我想从该图中提取子图(平均大小约为500个节点)。为此,我在节点的ID字段上创建了一个索引。查询看起来像这样

MATCH (a:XXX:YYYY) 
WHERE a.uid IN [9999, 5555, 7777, 99999, ...] 
RETURN a AS blablubb

此刻,我正在通过第二个看起来像这样的查询来寻找边缘

MATCH (a::XXX:YYYY)-[r:ZZZZ]-(b::XXX:YYYY)
WHERE a.uid IN [9999, 5555, 7777, 99999, ...]
AND b.uid IN [9999, 5555, 7777, 99999, ...]

这非常非常慢,尤其是当子图变大时。我现在的问题是如何连接两个查询以同时获取子图的边和节点。我知道有一个更快的解决方案,因为Neo4j浏览器为我提供了[]的可视化

MATCH (a:XXX:YYYY) 
WHERE a.uid IN [9999, 5555, 7777, 99999, ...] 
RETURN a AS blablubb

包含所有边缘。

非常感谢您的帮助

我对将Neo4j客户端用于Java提出了疑问。我有一个约有120.000.000节点和1.000.000.000边的图。我想从这张图中提取子图(平均大小约为...

graph neo4j cypher graph-databases neo4jclient
1个回答
0
投票

浏览器使用返回的节点的节点ID进行后续查询,并获取它们之间的所有关系。该查询在neo4j查询日志中看起来像这样。

MATCH (a)-[r]->(b) 
WHERE id(a) IN $existingNodeIds 
AND id(b) IN $newNodeIds 
RETURN r;
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.