如何知道子路径是否包含在Cypher的另一条较长路径中?

时间:2016-04-08 21:10:06

标签: neo4j cypher

鉴于属于Neo4j数据库的一组路径,我想知道其中哪条路径是另一条较长路径的子路径。

例如:

路径集

  1. 的(a) - [R] - > (b)中
  2. 的(a) - [R] - > (二) - > [R] - > (c)中
  3. 的(a) - [R] - > (二) - > [R] - > (C) - > [R] - > (d)
  4. 的(a) - [R] - > (d)
  5. 预期的响应是:

    1. 的(a) - [R] - >(B)
    2. 的(a) - [R] - > (二) - > [R] - > (c)中
    3. 两条路径都包含在更长的路径中: (一) - [R] - > (二) - > [R] - > (C) - > [R] - > (d)

      Cypher有没有这样做的语法?

      提前致谢。

1 个答案:

答案 0 :(得分:0)

我怀疑您实际上是在尝试使用variable-length path查询来获取“完整路径”(即以叶节点结尾的路径),而不使用任何部分路径。

如果我的怀疑是正确的,那么可能有一种简单的方法(考虑到你的样本路径)。

例如,如果您当前的查询是:

MATCH p=(a:Foo)-[:REL*]->(b:Bar)
RETURN p;

您可以使用以下查询来获取“完整”路径:

MATCH p=(a:Foo)-[:REL*]->(b:Bar)
WHERE NOT (b)-[:REL]->()
RETURN p;