2

我是 janusgraph 和 tinkerpop 的新手。我正在使用 Gremlin.Net 3.2.7 连接到 janusgraph,所有返回顶点的请求对我来说都很好,但是当我运行任何返回边缘的操作时,例如"gV(61464).outE('father').toList() "库中的一个例外:

System.InvalidOperationException:'未找到“janusgraph:RelationIdentifier”的反序列化器'

服务器没有抛出任何异常,序列化配置是默认的:

序列化器:

 - { 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.JanusGraphIoRegistryV1d0] }}
 - { 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.JanusGraphIoRegistryV1d0] }}

但它在 gremlin-client 控制台中工作正常。你有什么建议吗?

4

1 回答 1

3

看起来 JanusGraph 以自己的格式序列化边缘,RelationIdentifiers而不是 TinkerPop 的一部分。所以 Gremlin.Net 没有这种类型的反序列化器。这意味着您要么必须为此类型实现自己的 GraphSON 反序列化器,要么将 Gremlin 查询更改为不直接返回边。

TinkerPop 文档包含一个关于如何为 Gremlin.Net 编写反序列化器的示例。(请注意,您只需要实现一个IGraphSONDeserializer,而不是IGraphSONSerializer仅用于编写。)

或者,如果您想更改 Gremlin 遍历,例如,您可以只返回边缘属性:

g.V(61464).OutE("father").ValueMap<object>().ToList();

顺便说一句:看起来您正在将 Gremlin 遍历以 Gremlin-Groovy 字符串的形式发送到 JanusGraph 服务器。您也可以使用 Gremlin.Net 直接在 C# 中编写Gremlin 遍历。这不仅使编写遍历更容易,而且在服务器端执行也更高效。

于 2018-01-13T14:55:23.063 回答