JanusGraph 集群总是 returns 个没有属性的顶点 (ReferenceVertex)

JanusGraph cluster always returns vertex without properties (ReferenceVertex)

我在使用 janusgraph gremlin-server 和 Cluster 客户端时遇到了问题。 使用 Cluster (gremlin-driver 3.2.3/3.2.5) 检索的顶点仅包含 id 属性、标签和属性始终为空。

这是我的客户端配置。

val cluster = Cluster.open("/opt/janusgraph-0.1.1-hadoop2/conf/remote-objects.yaml")

远程-objects.yaml

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

gremlin 服务器配置:

host: localhost
port: 8182
scriptEvaluationTimeout: 30000
channelizer: org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer
graphs: {
  graph: conf/gremlin-server/graph.properties}
plugins:
  - janusgraph.imports
scriptEngines: {
  gremlin-groovy: {
    imports: [java.lang.Math],
    staticImports: [java.lang.Math.PI],
    scripts: [scripts/empty-sample.groovy]}}
serializers:
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: {ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
processors:
  - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}
  - { className: org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor, config: { cacheExpirationTime: 600000, cacheMaxSize: 1000 }}
metrics: {
  consoleReporter: {enabled: true, interval: 180000},
  csvReporter: {enabled: true, interval: 180000, fileName: /tmp/gremlin-server-metrics.csv},
  jmxReporter: {enabled: true},
  slf4jReporter: {enabled: true, interval: 180000},
  gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST},
  graphiteReporter: {enabled: false, interval: 180000}}
maxInitialLineLength: 4096
maxHeaderSize: 8192
maxChunkSize: 8192
maxContentLength: 65536
maxAccumulationBufferComponents: 1024
resultIterationBatchSize: 64
writeBufferLowWaterMark: 32768
writeBufferHighWaterMark: 65536
ssl: {enabled: false}

使用 gremlin-console 的远程查询工作正常(remote.yaml 和 remote-objects.yaml)

使用集群和远程遍历的查询不起作用:

val g = EmptyGraph.instance().traversal().withRemote(DriverRemoteConnection.using(cluster, "g"))

g.V().toList.foreach(v => println(v, "id", v.id(), "label", v.label(), v.properties("name").toList, v.getClass))

输出:

(v[8336],id,8336,label,,List(),class org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex)
(v[12288],id,12288,label,,List(),class org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex)
(v[12304],id,12304,label,,List(),class org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex)
(v[12328],id,12328,label,,List(),class org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex)
(v[12360],id,12360,label,,List(),class org.apache.tinkerpop.gremlin.structure.util.reference.ReferenceVertex)

我做错了什么?

当像您尝试的那样使用远程图时,您将返回 ReferenceElements,其中包含的信息很少。不幸的是,目前没有很多文档(我有 opened a ticket to address this), but you can refer to this mailing list thread.

远程遍历工作正常,但您应该更明确地说明您的要求。例如,如果您想要 idlabel 和所有 properties,您可以使用:

g.V().valueMap(true).toList()