【问题标题】:Match NOT in Tinkerpop traversal在 Tinkerpop 遍历中不匹配
【发布时间】:2017-08-21 10:58:16
【问题描述】:

我想匹配所有b1,其中不存在节点b2,如下图所示。 这是某种 2 跳不对称。请注意,不存在 b2 必须链接到与 b1 相同的 c:C,因此只要 b3c:C 没有优势,就可以忽略其他 (a2) --> (b3) --> (a1) .

我尝试了以下...

graph.traversal().V()
    .match(
        as("c").hasLabel("C"),

        as("a").hasLabel("A")
        .out().hasLabel("B").as("b1")
        .where(out().as("c"))
        .out().hasLabel("A").as("a2"),

        not(
        as("a2")
        .out().hasLabel("B").as("b2")
        .where(out().as("c")
        .out().as("a1")
    )
)

...但是第二个 MATCH 步骤抛出异常:

java.lang.IllegalStateException: The provided match pattern is unsolvable: [[MatchStartStep(a1), HasStep([~label.eq(A)]), VertexStep(OUT,vertex), HasStep([~label.eq(B)]), WhereTraversalStep([WhereStartStep, VertexStep(OUT,vertex), WhereEndStep(c)])@[b1], VertexStep(OUT,vertex), HasStep([~label.eq(A)]), MatchEndStep(a2)], [MatchStartStep(a2), HasStep([~label.eq(B)]), WhereTraversalStep([NotStep([WhereStartStep, VertexStep(OUT,edge)])]), WhereTraversalStep([WhereStartStep, VertexStep(OUT,vertex)@[c], VertexStep(OUT,vertex), WhereEndStep(a1)])@[b2], MatchEndStep, MatchEndStep]]

不幸的是,我什至无法匹配这是 Cypher。

【问题讨论】:

    标签: java cypher tinkerpop tinkerpop3


    【解决方案1】:

    突然间,我找到了一个避免范围问题的解决方案:

    graph.traversal().V()
        as("a").hasLabel("A")
        .out().hasLabel("B").as("b1")
        .where(out().hasLabel("C"))
        .out().hasLabel("A").as("a2")
        .where(
            not(
                out().hasLabel("B")
                    .where(out().hasLabel("C"))
                    .out().as("a")
            )
        )
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-06
      相关资源
      最近更新 更多