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
Neo4j查询-需要性能帮助_Neo4j - Fatal编程技术网

Neo4j查询-需要性能帮助

Neo4j查询-需要性能帮助,neo4j,Neo4j,还有一个Neo4j新手的问题 我正在玩一个非常天真和简单的图形。 下面的查询应该返回集群,集群中的每个朋友都知道集群中的所有其他朋友。在本例中,我将集群大小限制为4,并添加了最后几个and以使结果唯一(因此我不会得到A、B、C和A、C、B): 匹配(me{name:'MyName'}),(f1),(f2),(f3),(f4) 其中(我)-[:知道]->(f1)-[:知道]->(我) 和(f2)-[:知道]->(f1)-[:知道]->(f2) 和(f2)-[:知道]->(我)-[:知道]->(f2

还有一个Neo4j新手的问题

我正在玩一个非常天真和简单的图形。 下面的查询应该返回集群,集群中的每个朋友都知道集群中的所有其他朋友。在本例中,我将集群大小限制为4,并添加了最后几个and以使结果唯一(因此我不会得到A、B、C和A、C、B):

匹配(me{name:'MyName'}),(f1),(f2),(f3),(f4)
其中(我)-[:知道]->(f1)-[:知道]->(我)
和(f2)-[:知道]->(f1)-[:知道]->(f2)
和(f2)-[:知道]->(我)-[:知道]->(f2)
和(f3)-[:知道]->(我)-[:知道]->(f3)
和(f3)-[:知道]->(f1)-[:知道]->(f3)
和(f3)-[:知道]->(f2)-[:知道]->(f3)
和(f4)-[:知道]->(我)-[:知道]->(f4)
和(f4)-[:知道]->(f1)-[:知道]->(f4)
和(f4)-[:知道]->(f2)-[:知道]->(f4)
和(f4)-[:知道]->(f3)-[:知道]->(f4)
和f1.name
现在查询在数据正确性方面工作得很好,但我注意到它需要很长时间才能完成。 这些是Neo4j的正常响应时间吗?有没有更有效的方法来执行相同的查询?
现在,我在笔记本电脑上运行Neo4j服务器,但另一方面,我在DB中只有15个节点。。。。我只能想象当数据库增长时会发生什么…

您可以尝试将路径定义移动到
匹配项中。我很确定,在
中使用路径定义的唯一时间是在执行
而不是(路径)

MATCH(me{name:'MyName'})-[:KNOWS]->(f1)-[:KNOWS]->(me),
(f2)-[:知道]->(f1)-[:知道]->(f2),
(f2)-[:知道]->(我)-[:知道]->(f2),
(f3)-[:知道]->(我)-[:知道]->(f3),
(f3)-[:知道]->(f1)-[:知道]->(f3),
(f3)-[:知道]->(f2)-[:知道]->(f3),
(f4)-[:知道]->(我)-[:知道]->(f4),
(f4)-[:知道]->(f1)-[:知道]->(f4),
(f4)-[:知道]->(f2)-[:知道]->(f4),
(f4)-[:知道]->(f3)-[:知道]->(f4)
其中f1.name

它还使查询更清晰,我认为

我认为另一种查找群集的方法比这种方法要好得多,例如,从一个起点开始,使用可变长度路径跟踪所有节点,直到群集的末尾,按id对群集节点进行排序,并确保每个节点列表都是唯一的。

谢谢,这似乎确实起到了更快的作用。不过,奇怪的是,我有时会遇到这种奇怪的行为,在我第一次为给定的开始节点运行查询时,查询需要很长时间才能完成。后续查询运行得非常快(可能是因为您没有使用索引。如果您使用标签(Neo4j 2.0+版)您可以在标签的
name
属性上创建一个索引,您应该可以更快地查询该开始节点。谢谢,您有任何示例可以让我开始吗?它不一定是功能完整的示例,只是一些可以让我开始的示例。。。
MATCH (me { name: 'MyName' }), (f1), (f2), (f3), (f4)
WHERE (me)-[:KNOWS]->(f1)-[:KNOWS]->(me)
AND (f2)-[:KNOWS]->(f1)-[:KNOWS]->(f2)
AND (f2)-[:KNOWS]->(me)-[:KNOWS]->(f2)
AND (f3)-[:KNOWS]->(me)-[:KNOWS]->(f3)
AND (f3)-[:KNOWS]->(f1)-[:KNOWS]->(f3)
AND (f3)-[:KNOWS]->(f2)-[:KNOWS]->(f3)
AND (f4)-[:KNOWS]->(me)-[:KNOWS]->(f4)
AND (f4)-[:KNOWS]->(f1)-[:KNOWS]->(f4)
AND (f4)-[:KNOWS]->(f2)-[:KNOWS]->(f4)
AND (f4)-[:KNOWS]->(f3)-[:KNOWS]->(f4)
AND f1.name < f2.name
AND f2.name < f3.name
AND f3.name < f4.name
RETURN DISTINCT f1.name, f2.name, f3.name, f4.name
MATCH (me { name: 'MyName' })-[:KNOWS]->(f1)-[:KNOWS]->(me),
(f2)-[:KNOWS]->(f1)-[:KNOWS]->(f2),
(f2)-[:KNOWS]->(me)-[:KNOWS]->(f2),
(f3)-[:KNOWS]->(me)-[:KNOWS]->(f3),
(f3)-[:KNOWS]->(f1)-[:KNOWS]->(f3),
(f3)-[:KNOWS]->(f2)-[:KNOWS]->(f3),
(f4)-[:KNOWS]->(me)-[:KNOWS]->(f4),
(f4)-[:KNOWS]->(f1)-[:KNOWS]->(f4),
(f4)-[:KNOWS]->(f2)-[:KNOWS]->(f4),
(f4)-[:KNOWS]->(f3)-[:KNOWS]->(f4)
WHERE f1.name < f2.name AND f2.name < f3.name AND f3.name < f4.name
RETURN DISTINCT f1.name, f2.name, f3.name, f4.name