Neo4j:在两个节点之间找到简单的路径需要花费大量的时间

时间:2014-04-24 10:42:07

标签: neo4j cypher

Neo4j:即使在使用上限(* 1..4)之后,在两个节点之间找到简单路径也需要花费很多时间。我不想使用allShortestPath或shortestPath,因为它不会返回所有路径。

Match p=((n {Name:"Node1"}) -[*1..4]-> (m {Name:"Node2"})) return p;

有什么建议让它更快?

1 个答案:

答案 0 :(得分:2)

如果您有很多节点,请尝试创建索引,以便neo4j数据库引擎不必搜索每个节点以查找具有正确Name属性值的节点。

我认为,在您的示例中,nm节点实际上是相同的"类型"节点。如果是这样,那么:

  1. 为每个节点(与nm相同类型)添加标签(我将其称为' X')。您可以使用以下内容添加' X'标签到由变量n表示的节点。您希望在其前面加上适当的MATCH子句:

    SET n:X

  2. 使用Name标签在节点的X属性上创建索引,如下所示:

    CREATE INDEX ON:X(名称);

  3. 将您的查询修改为:

    MATCH p =((n:X {Name:" Node1"}) - [* 1..4] - >(m:X {名称:" Node2" })) 返回p;

  4. 如果您执行上述操作,那么您的查询应该更快。