Gremlin Double 无法转换为 class org.apache.tinkerpop.gremlin.structure.Element

Gremlin Double cannot be cast to class org.apache.tinkerpop.gremlin.structure.Element

我尝试在 Java 上实现 gremlin 遍历。

在这里,我尝试根据我的管道insert/update“VISIBLE_ON”关系的分数与计算分数。

    GraphTraversal t = graph.V().hasLabel("App").as("a")
            .inE("RANKS").as("r")
            .outV().as("k")
            .choose(__.select("k").by("countryCode").is(__.in(...)),
                    __.math("1.0 / r").by("rank1"),
                    __.math("1.0 / r").by("rank2"))
            .as("score")
            .has("Country", "countryCode", __.select("k")
                    .by("countryCode")).as("c")
            .inE("VISIBLE_ON").as("v")
            .property("score", __.select("score"))
            .select("c");

但我尝试 运行 我的 gremlin 代码,出现如下异常:org.apache.tinkerpop.gremlin.driver.exception.ResponseException: class java.lang.Double cannot be cast to class org.apache.tinkerpop.gremlin.structure.Element

有什么建议吗?

解决如下:

GraphTraversal t = graph.V().hasLabel("App").as("a")
        .inE("RANKS").as("r")
        .outV().as("k")
        .choose(__.select("k").by("countryCode").is(__.in(...)),
                __.math("1.0 / r").by("rank1"),
                __.math("1.0 / r").by("rank2"))
        .as("score")
        .select("a")
        .outE("VISIBLE_ON").as("v")
        .property("score", __.select("score"))
        .inV().as("c")
        .hasLabel("Country")
        .has("countryCode", __.select("k").by("countryCode")).as("c")
        .select("c");

我认为你的问题出在这里:

.choose(__.select("k").by("countryCode").is(__.in(...)),
        __.math("1.0 / r").by("rank1"),
        __.math("1.0 / r").by("rank2"))
.as("score")
.has("Country", "countryCode", __.select("k")

choose() 从任一 math() 分支生成双精度,然后您尝试在双精度上调用 has(),而 has() 仅适用于 Element.