java - Tinkerpop 遍历中不匹配

标签 java cypher tinkerpop tinkerpop3

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

我尝试了以下...

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。

最佳答案

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

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")
        )
    )

关于java - Tinkerpop 遍历中不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45795384/

相关文章:

java - 在 Java 中使用 substring()

neo4j - 为什么自 Neo4j 2.3.3 以来,带有可选匹配的 COLLECT() 中的 DISTINCT 会导致 ExecutionFailure?

不使用 Union 的具有可变边缘深度的 Gremlin 查询

amazon-web-services - 有没有办法在 Amazon Neptune Graph 的边缘存储更多信息?

Java Print Stream 打印空格

java - 获取Java中FileWriter正在写入的文件

java - 在IDEA中,如何自动删除.attach_pidxxx文件

javascript - popoto.js - 预定义密码查询

java - Neo4J 找到独特的结果

node.js - Gremlin Server 作为 REST API,具有动态创建的数据