在Gremlin中,远程遍历是否可以使用策略?

3

我正在使用远程模式的Gremlin-Java与JanusGraph互动。现在,我正在定义一条新的边属性,以便在使用特定策略时过滤它们。 以下是我正在尝试在应用程序中运行的代码,但似乎策略被完全忽略了。在本地TP实例上执行相同的代码是有效的。

graph.traversal()
    .withRemote(DriverRemoteConnection.using(cluster, "g"))
    .withStrategies(SubgraphStrategy.build().edges(__.has("field", "condition")).create())

有人知道这个功能是否仍未受支持吗?我正在使用 Janus 0.1.0。

1个回答

3
这似乎是Apache TinkerPop中的一个bug。我提出了一个问题来跟踪此问题。
一种解决方法是将远程驱动程序配置更改为使用GraphSON序列化器而不是Gryo。这不需要对服务器配置进行任何更改。例如,在conf/remote-objects.yaml中:
hosts: [localhost]
port: 8182
serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0,
          config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] } }

另一种解决方法是在Gremlin Server脚本中定义另一个遍历源。例如,如果您正在使用默认的conf/gremlin-server/gremlin-server.yaml,请更新scripts/empty-sample.groovy中的全局绑定:

// define the default TraversalSource to bind queries to - named "g".
// define a subgraph traversal source - named "sg"
globals << [g : graph.traversal(),
    sg: graph.traversal().withStrategies(SubgraphStrategy.build().edges(
        __.has("field", "condition")).create())]

然后,您可以从远程驱动程序中利用该遍历源:

cluster = Cluster.open('conf/remote-objects.yaml')
graph = EmptyGraph.instance()
sg = graph.traversal().withRemote(DriverRemoteConnection.using(cluster, "sg"))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接