【发布时间】:2016-06-25 13:19:16
【问题描述】:
我几天来一直在努力寻找一种方法来找到两个节点之间的所有路径(最大长度),同时通过对将要探索的关系(通过它们的一个属性)进行排序来控制 Neo4j 的路径探索.
为了清楚起见,假设我想找到两个节点之间的 K 条最佳路径,直到最大长度为 M。查询将类似于:
match (source{name:"source"}), (target{name:"target"}),
p = (source)-[*..M]->(target)
return p order by length(p) limit K;
到目前为止一切顺利。但是可以说路径的关系有一个称为“优先级”的属性。我想要的是编写一个查询,告诉 Neo4j 在路径探索的每个步骤中应该首先探索哪些关系。
我知道,当我使用 java 库和嵌入式数据库时,这是可能的(通过实现 PathExpander 接口并将其作为 Java 中 GraphAlgoFactory.allSimplePaths() 函数的输入)。 但现在我正在尝试找到一种方法,使用 Bolt 或 REST api 在服务器模式数据库访问中执行此操作。
有没有办法在服务器模式下做到这一点?或者在服务器模式下访问图形时使用 Java 库函数?
【问题讨论】:
-
APOC怎么样? github.com/neo4j-contrib/… -
我已经检查过了,它并没有达到我想要的效果,但还是谢谢!
标签: neo4j cypher shortest-path neo4j-java-api neo4j-bolt