json Hashmap作为Janusgraph中的属性值

enxuqcxy  于 2023-07-01  发布在  其他
关注(0)|答案(1)|浏览(146)

我使用的是janusgraph docker容器。我通过我的Java应用程序中的tinkerpop远程连接与它连接。
我想在一个特定的节点上设置一个hashmap作为属性值。这应该是可能的,因为Janusgraph有一个HashMaps的原生属性序列化器。(参见:https://github.com/JanusGraph/janusgraph/blob/master/janusgraph-core/src/main/java/org/janusgraph/graphdb/database/serialize/StandardSerializer.java
但是:

HashMap<Object,Object> myMap = new HashMap();
myMap.put("aKey","aValue");
g.V(someId).property("propKey",myMap).iterate();

导致gremlin将我的HashMap转换为LinkedHashMap,导致以下消息:
java.lang.IllegalArgumentException:数据库不支持数据类型,因为没有注册序列化程序:类java.util.LinkedHashMap
我已经尝试通过添加ByteCode步骤来添加属性:
traversal.asAdmin().getBytecode().addStep(GraphTraversal.Symbols.property,myMap)
使用json:

Bindings bindings = Bindings.instance();
g.V(someId).property("propKey",objectMapper.writeValueAsString(myMap)).iterate();
//for some reason this results in an IndexOutOfBound Exception on janusgraph site

我还将datatype= java.util.HashMap属性添加到模式中,但没有任何效果。有什么建议吗

kupeojn6

kupeojn61#

快速查看TinkerPop代码,kryo序列化器(https://github.com/apache/tinkerpop/blob/gremlin-go/v3.6.4/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/UtilSerializers.java)似乎发生了向LinkedHashMap的转换
conf/remote-graph-binary.yaml配置文件用于gremlin-client时是否也会出现此问题?

相关问题