Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/neo4j/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Graph 到达中心时停止图遍历的密码查询_Graph_Neo4j_Cypher - Fatal编程技术网

Graph 到达中心时停止图遍历的密码查询

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

我有一个包含高度连接节点(集线器)的图形数据库。这些节点可以有超过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*.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;

谢谢你,马丁,我试试这个。