我在Neo4j中创建了一个具有1000万个节点和3000万个关系的图形。
每个节点分别标记为A(400万个节点),B(600万个节点)或C(20个节点)。
A中的节点通向B中的节点。B中的节点通向B中的其他节点,以及C中的节点。
对于A中的每个节点,我需要找到C中最接近的节点(或节点,如果它们具有相同的距离),并在A节点中添加C节点的ID作为属性的值。
任何帮助将不胜感激。
答案 0 :(得分:0)
因此,我们正在研究这样的模型(由于未指定关系类型,所以使用:LEAD):
(:A)-[:LEAD]->(:B)
(:B)-[:LEAD]->(:B)
(:B)-[:LEAD]->(:C)
APOC Procedures为此提供了最佳解决方案,但这是两部分的,因为我们首先使用path expander procedures找到最接近的:C节点,然后使用该距离进行重新匹配以获得的完整集合。 :C节点在该距离可到达。
您还希望使用apoc.periodic.iterate(),以便可以对此进行批处理,尽管您可能想使用batchSize。
我在此查询中作了一些假设,因为您没有提供太多在图表中使用的属性。
CALL apoc.periodic.iterate("MATCH (a:A) RETURN a",
"CALL apoc.path.spanningTree(a, {relationshipFilter:'LEAD>', labelFilter:'/C', limit:1}) YIELD path
WITH a, length(path) as length
CALL apoc.path.subgraphNodes(a, {relationshipFilter:'LEAD>', labelFilter:'/C', maxLevel:length}) YIELD node
WITH a, collect(node.id) as ids
SET a.cIDs = ids",
{batchSize:1000}) YIELD batches, total, errorMessages
RETURN batches, total, errorMessages