0

我想执行如下所示的最短路径查询:

START source=node:myIndex(name="<src>"), destination=node:myIndex(name = "<dst>")                                                                               
MATCH p = shortestPath(source-[:REL1*..5]-destination),
          source-[sourceRel:REL1]-m, 
          destination-[destRel:REL1]-k
WHERE sourceRel.a=<someValue> and destRel.a=<someOtherValue>                                                                                                      
RETURN NODES(p);

我想获得最短路径之间的最短路径,<src><dst>在约束条件下,该属性在从 src 和 dst 分别到下一个节点的第一个a关系上具有特定值。

然而,neo4j 只是返回它找到的任何最短路径,而不考虑我的约束。我究竟做错了什么?为最短路径查询指定最短路径的第一个“跳”约束的正确方法是什么?

编辑:我使用的是 Neo4j 1.8.2。

4

2 回答 2

2

从 2.0.0-M03 开始​​,没有向shortestPath. 他们正在研究一种能够做到这一点的新语法,但它仍处于设计阶段。为了做到这一点,您需要采取不使用的效率较低的路线shortestPath,按长度排序并获得与您的所有约束匹配的最短路线。

于 2013-07-15T16:03:27.890 回答
0

现在知道我想要做什么在当前的 Neo4j 版本中是不可能的(感谢 Wes),我使用了一种解决方法来实现这一点。首先,我为 src 和目标节点获取与约束匹配的下一个节点:

START n=node:myIndex(name="<nodename>")                             
MATCH n<-[rel:REL1]-m
WHERE rel.a=<somevalue>
RETURN m

像这样,我有 src 和 dst 的“下一个”节点的两个节点 ID。我现在使用计算这两个节点 ID 之间的最短路径并预先添加原始源并附加原始目标节点以获得完整路径。它需要 3 个查询而不是 1 个,但可能不像 Wes 建议的方法那么昂贵。

于 2013-07-18T08:50:22.887 回答