2017-07-04 5 views
3

私はJanusGraphとGremlin-Javaをリモートモードで使って対話しています。私は今、特定の戦略が使用されたときにそれらをフィルタリングするために、私のエッジに新しいプロパティを定義しています。 以下は私のアプリケーションで実行しようとしているコードですが、その戦略は完全に無視されているようです。ローカルのTPインスタンスで実行された同じコードが動作しています。Gremlinでリモートトラバーサルで戦略を使用できますか?

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

この機能はまだサポートされていませんか?私はJanus 0.1.0を使用しています。

答えて

3

これはApache TinkerPopのバグです。これを追跡するにはopened an issueです。

回避策の1つは、GryoではなくGraphSONシリアライザを使用するようにリモートドライバの構成を構成することです。これは、サーバーの設定を変更する必要はありません。例えば、conf/remote-objects.yamlで:

hosts: [localhost] 
port: 8182 
serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, 
      config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] } } 

異なる回避策がグレムリンサーバスクリプト内の別のトラバーサル・ソースを定義することです。デフォルトconf/gremlin-server/gremlin-server.yamlを使用している場合たとえば、scripts/empty-sample.groovyにグローバルバインディングを更新:

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

// 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())] 

次に、あなたのリモートドライバからそのトラバーサル源を利用することができます

関連する問題