Graph 到达中心时停止图遍历的密码查询
我有一个包含高度连接节点(集线器)的图形数据库。这些节点可以有超过40000个关系 当我想从一个节点开始遍历图形时,我想在这些中心停止遍历,以避免检索太多的节点 我认为我应该根据每个节点的关系计数使用聚合函数和条件停止,但我没有编写好的密码查询 我试过:Graph 到达中心时停止图遍历的密码查询,graph,neo4j,cypher,Graph,Neo4j,Cypher,我有一个包含高度连接节点(集线器)的图形数据库。这些节点可以有超过40000个关系 当我想从一个节点开始遍历图形时,我想在这些中心停止遍历,以避免检索太多的节点 我认为我应该根据每个节点的关系计数使用聚合函数和条件停止,但我没有编写好的密码查询 我试过: MATCH p=(n)-[r*..10]-(m) WHERE n.name='MyNodeName' AND ALL (x IN nodes(p) WHERE count(x) < 10) RETURN p; 匹配p=(n)-[r*.1
MATCH p=(n)-[r*..10]-(m)
WHERE n.name='MyNodeName' AND ALL (x IN nodes(p) WHERE count(x) < 10)
RETURN p;
匹配p=(n)-[r*.10]-(m)
其中n.name='MyNodeName'和ALL(节点(p)中的x,其中计数(x)<10)
返回p;
而且:
MATCH (n)-[r*..10]-(m) WHERE n.name='MyNodeName' AND COUNT(r) < 10 RETURN p;
匹配(n)-[r*.10]-(m),其中n.name='MyNodeName'和COUNT(r)<10返回p;
如果匹配长度为10的路径,我认为您无法在某个节点停止查询。您可以计算路径中所有节点的关系数,但只能在路径匹配后计算
您可以通过向中心节点添加附加标签并在查询中筛选来解决此问题:
MATCH (a:YourLabel)
OPTIONAL MATCH (a)-[r]-()
WITH a, count(r) as count_rels
CASE
WHEN count_rels > 20000
THEN SET a :Hub
END
MATCH p=(n)-[r*..10]-(m)
WHERE n.name='MyNodeName' AND NONE (x IN nodes(p) WHERE x:Hub)
RETURN p
您的查询:
MATCH (a:YourLabel)
OPTIONAL MATCH (a)-[r]-()
WITH a, count(r) as count_rels
CASE
WHEN count_rels > 20000
THEN SET a :Hub
END
MATCH p=(n)-[r*..10]-(m)
WHERE n.name='MyNodeName' AND NONE (x IN nodes(p) WHERE x:Hub)
RETURN p
我在类似的情况下使用了这种方法。因为Neo4j 2.2有一个很酷的技巧,可以使用内部的
getDegree()
函数来确定节点是否是密集节点
您还忘记了n
对于您的情况,这意味着:
MATCH p=(n:Label)-[r*..10]-(m)
WHERE n.name='MyNodeName' AND size((m)--()) < 10
RETURN p;
匹配p=(n:标签)-[r*.10]-(m)
其中n.name='MyNodeName'和size((m)--())<10
返回p;
谢谢你,马丁,我试试这个。