Neo4j Path在cypher-shell中以错误的交替关系方向返回

时间:2017-07-27 11:05:37

标签: neo4j cypher

难以理解返回路径中的关系方向。

我有这样的图表

(:START)-[:NEXT]->(:NODE)-[:NEXT]->(:NODE)...

现在,我正在匹配从起始节点开始的所有路径,方向为:NEXT,最长为10。查询看起来像

MATCH t=((:START)-[:NEXT*..10]->(:NODE))
RETURN t;

我的输出路径看似混合了:NEXT方向,如

(:START)-[:NEXT]->(:NODE)<-[:NEXT]-(:NODE)-[:NEXT]->(:NODE)<-...

我无法理解交替方向的来源。

修改 图表只是一条直线(有一个方向)。没有周期,没有分支。请使用以下内容复制shell中的方案:

CREATE (s:START);
MATCH (s:START) MERGE (s)-[:NEXT]->(a:NODE)-[:NEXT]->(b:NODE)-[:NEXT]->(c:NODE)-[:NEXT]->(d:NODE);
MATCH t=((:START)-[:NEXT*..10]->()) return t;

+------------------------------------------------------------------------------+
| t                                                                            |
+------------------------------------------------------------------------------+
| (:START)-[:NEXT]->(:NODE)                                                    |
| (:START)-[:NEXT]->(:NODE)<-[:NEXT]-(:NODE)                                   |
| (:START)-[:NEXT]->(:NODE)<-[:NEXT]-(:NODE)-[:NEXT]->(:NODE)                  |
| (:START)-[:NEXT]->(:NODE)<-[:NEXT]-(:NODE)-[:NEXT]->(:NODE)<-[:NEXT]-(:NODE) |
+------------------------------------------------------------------------------+

在返回的路径中看到箭头如何在方向上交替?这让我感到困惑。

1 个答案:

答案 0 :(得分:2)

来自原始问题的修改:

  

编辑:图表只是一条直线(有一个方向)。没有   循环,没有分支。请复制shell中的场景   以下内容:

执行cypher-shell中的语句确实会发生问题。在我看来是一个错误。我在cypher-shell的Github中搜索了这个问题并没有发现任何东西。所以我打开了issue

编辑2:

The issue我在Github上打开了这个commit。这个修补程序可能会在下一个版本中发布。

编辑3

问题已在this commit中关闭并修复。

原始答案如下:

我在这里模拟你的场景。看:

样本数据集:

CREATE (node1:Node {id:1})
CREATE (node2:Node {id:2})
CREATE (node3:Node {id:3})
CREATE (node4:Node {id:4})
CREATE (node1)-[:NEXT]->(node2)
CREATE (node2)-[:NEXT]->(node3)
CREATE (node3)-[:NEXT]->(node4)
CREATE (node4)-[:NEXT]->(node2)

查询:

MATCH t=((:Node {id:1})-[:NEXT*..10]->(:Node {id:4}))
RETURN t;

结果:

Result 1

如您所见(并且如问题中所述),返回(:Node {id:4})-[:NEXT]->(:Node {id:2})。然而,这是因为选项&#34;连接结果节点&#34;在Neo4j浏览器中启用。您可以在Neo4j浏览器设置中禁用它。看:

Settings

禁用&#34;连接结果节点&#34;并再次运行查询:

Result 2

注意选项&#34;连接结果节点&#34;仅适用于结果的图形可视化。也就是说:(:Node {id:4})(:Node {id:2})之间的关系确实存在于结果中,如果您将可视化更改为&#34;表&#34;,&#34;文本&#34;或&#34;代码&#34;。