我正在尝试使用JanusGraph在Gremlin shell中将子图输出为GraphSON。

TinkerPop文档以供参考:
http://tinkerpop.apache.org/docs/current/reference/#graphson-reader-writer

当我编写完整图时,这很正常,但是,当我想编写使用以下命令查询的子图时:

gremlin> subGraph = g.V(45240).repeat(__.bothE().subgraph('subGraph').bothV()).times(4).cap('subGraph').next()

我使用相同的写入命令:
gremlin> subGraph.io(IoCore.graphson()).writeGraph("45240_sub4.json")

我收到此错误:

(是java.lang.IllegalStateException)(通过参考链:org.janusgraph.graphdb.relations.RelationIdentifier [“inVertexId”])

到处搜索,我发现另一个线程说我需要导入一个软件包才能正确执行此操作(对于TitanGraph,但我认为它也适用于JanusGraph):Import package in gremlin

但是,每当我尝试导入时:
gremlin>  import com.thinkaurelius.titan.graphdb.tinkerpop.io.graphson.TitanGraphSONModule

我收到此错误:

无效的导入定义:'com.thinkaurelius.titan.graphdb.tinkerpop.io.graphson.TitanGraphSONModule';原因:启动失败:
script1494618250861805544050.groovy:1:无法解析com.thinkaurelius.titan.graphdb.tinkerpop.io.graphson.TitanGraphSONModule类
@第1行,第1列。
导入com.thinkaurelius.titan.graphdb.tinkerpop.io.graphson.TitanGraphSONModule
^

1个错误

如何使用JanusGraph在Gremlin Shell中将子图输出为GraphSON?

最佳答案

当您使用subgraph()步骤时,结果是TinkerGraph,但是其顶点和边缘ID是从JanusGraph实例继承的。特别是,边缘ID的类型为RelationIdentifier,这要求JanusGraph的自定义序列化程序JanusGraphSONModule能够干净地导出。

这是一个基于Titan的previous example的示例,可以在Gremlin Console中运行:

graph = JanusGraphFactory.open('inmemory')
graph.io(graphson()).readGraph('data/tinkerpop-modern.json')
g = graph.traversal()
subGraph = g.E().hasLabel('knows').subgraph('sg').cap('sg').next()
graphsonIO = IoCore.graphson().graph(subGraph).registry(JanusGraphIoRegistry.getInstance()).create()
graphsonIO.writeGraph('/tmp/subgraph.json')

09-11 23:49