Janusgraph 在 .net core 3.0 中使用 Gremlin 查询

Janusgraph using Gremlin query in .net core 3.0

我们目前在 net core 3.0 应用程序中使用 gremlin.net 库来连接到 Janusgraph 数据库。

我们需要在janusgraph中执行以下查询 g.V('12345').outE('myedge').has('datetime',lt(1581922847)).order().by('datetime', incr).limit(100).valueMap().as('time').inV().as('user').select('time','user')

只要我们没有 inV() 部分,查询就可以正常运行。如果我们有 inV(),我们将面临以下错误, ScriptEvaluationError: java.util.LinkedHashMap cannot be cast to org.apache.tinkerpop.gremlin.structure.Edge

  1. 有没有办法 run/rewrite 这个查询而不把它一分为二?我是 janusgraph 的新手,这在 Cosmos db 中运行良好。
  2. 根据 ,我了解到 janusgraph 中涉及自定义反序列化。我试过了,但仍然没有帮助我。有人可以 post 在 .net core 3.0 中添加自定义反序列化的工作代码吗?

举一个更简单的例子,查询 g.V(1).as('v').outE().limit(1).as('e').select('v','e') 直接在 gremlin 控制台中工作,但不适用于 janusgraph 的 gremlin.net 库(groovy-字符串)。我们已经在服务器中尝试了 GRYO 和 GraphSON Serializer 设置。我们可以使用 groovy-string,因为这是一个现有的应用程序。

The query runs fine as long as we dont have inV() part. If we have inV(), we are facing below error, ScriptEvaluationError

你不能有 inV(),因为它在 valueMap() 之后。 inV() 意味着从 Edge 对象遍历到其传入的 Vertex,但是 valueMap()Edge 转换为 Map,因此您得到错误:"java.util.LinkedHashMap cannot be cast to org.apache.tinkerpop.gremlin.structure.Edge"

我想你只是想要:

g.V('12345').
  outE('myedge').has('datetime',lt(1581922847)).
  order().by('datetime', incr).
  limit(100).
  project('time','user').
    by(valueMap()).
    by(inV())

我会用JanusGraph.Net nuget package!因为有 JanusGraph-specific 类型 Gremlin.Net 无法序列化。