Performance Neo4j Cypher查询查找常见子项的速度较慢。最好的方法是什么?
我是Neo4j-2.1.6的新手。在我的图中,任何给定节点都可以有多个父节点和多个子节点,它们也是其他节点的父节点和子节点。我需要做的是找到那些父节点和子节点,这些父节点和子节点都有共同点。搜索的节点可以是距离其公共父节点或子节点一到数百个关系。所有节点都具有相同的标签 我正在使用下面的cypher查询,但是当添加多个节点时,查询速度非常慢。。。。我希望一次搜索20个或更多节点以查找它们的公共连接。我在这里搜索4个节点上的子节点:Performance Neo4j Cypher查询查找常见子项的速度较慢。最好的方法是什么?,performance,neo4j,cypher,Performance,Neo4j,Cypher,我是Neo4j-2.1.6的新手。在我的图中,任何给定节点都可以有多个父节点和多个子节点,它们也是其他节点的父节点和子节点。我需要做的是找到那些父节点和子节点,这些父节点和子节点都有共同点。搜索的节点可以是距离其公共父节点或子节点一到数百个关系。所有节点都具有相同的标签 我正在使用下面的cypher查询,但是当添加多个节点时,查询速度非常慢。。。。我希望一次搜索20个或更多节点以查找它们的公共连接。我在这里搜索4个节点上的子节点: MATCH (n1)-[*]->(x), (n2)-[*]
MATCH (n1)-[*]->(x), (n2)-[*]->(x), (n3)-[*]->(x), (n4)-[*]->(x)
WHERE n1.name = "node1" AND n2.name ="node2" AND n3.name ="node3" AND n4.name ="node4"
RETURN DISTINCT x.name
我还有别的办法吗?
谢谢 添加标签,并确保在:Label(name)上有索引 e、 g.如果标签是
:节点
create index on :Node(name);
MATCH (n1:Node)-[*]->(x),(n2:Node)-[*]->(x),(n3:Node)-[*]->(x),(n4:Node)-[*]->(x)
USING INDEX n1:Node(name)
USING INDEX n2:Node(name)
USING INDEX n3:Node(name)
USING INDEX n4:Node(name)
WHERE n1.name = "node1" AND n2.name ="node2" AND n3.name ="node3" AND n4.name ="node4"
RETURN DISTINCT x.name
对于很长的路径,Cypher可能会有一些问题
如果这是图形中必须在毫秒内完成的频繁操作,我建议为用Java编写的Neo4j服务器创建一个服务器扩展。非常感谢!现在只需要一小部分时间。长路径只是Cypher的一个弱点,还是Neo4j在总体上存在问题?只是2.1中基于规则的规划器的一个弱点。这将在2.2中发生变化(您也可以尝试使用cypher 2.1.1作为查询的前缀,然后看看会发生什么)