使用 Gremlin.net 字节码从图中提取子图给出错误反序列化器 for \"tinker:graph\" not found
Extract subgraph from a graph using Gremlin.net byte code gives error deserializer for \"tinker:graph\" not found
我正在尝试使用 Gremlin.net 字节码语法从图中获取子图,但在从子图中获取 extracting/Cap 时出现错误。如果我直接使用查询字符串查询而不是使用流畅的 API 字节代码语法,我能够得到结果。
直接在 cosmos DB 上使用时 returns 结果的查询字符串:
g.V().has('name','Samplevertex').outE().HasLabel("child").subgraph('sg').cap('sg')
C# gremlin.net 无效的语法是:
var result = g
.V()
.Has("name", "Samplevertex")
.OutE()
.HasLabel("child")
.Subgraph("sg")
.Cap<GraphSON3Reader>("sg")
.Next();
当我使用上面的代码时,它给出了一个错误,提示未找到“tinker:graph”的反序列化器。
尝试使用 Cap<> 中的不同类型,如字符串、自定义模型。但是仍然出现相同的错误。
想知道我是否遗漏了 Gremlin 服务器配置端的任何内容,或者是否存在默认情况下带上限的子图不适用于 gremlin.net 的已知问题?
我的 gremlin 服务器 yaml 中有以下设置:
我能够通过创建自己的自定义反序列化器来解决这个问题,因为我了解到我们目前没有其他选项用于返回 Graph 的查询。
已按照 http://tinkerpop.apache.org/docs/3.2.6/reference/#_custom_serialization_2
中的步骤操作
在字节码中使用的 Cap<> 命令中使用了新的 class 名称并得到了结果。
**Following is the snippet:**
internal class MySubgraph
{
public static string GraphsonPrefix = "tinker";
public static string GraphsonBaseType = "graph";
public static string GraphsonType = GraphSONUtil.FormatTypeName(GraphsonPrefix,
GraphsonBaseType);
public MySubgraph(ICollection<IVertex> vertices, ICollection<IEdge> edges)
{
Vertices = vertices;
Edges = edges;
}
public ICollection<IVertex> Vertices { get; }
public ICollection<IEdge> Edges { get; }
}
internal class MySubgraphReader : IGraphSONDeserializer
{
public dynamic Objectify(JToken graphsonObject, GraphSONReader reader)
{
JToken jVertices = graphsonObject["vertices"];
dynamic vertices = reader.ToObject(graphsonObject["vertices"]);
// Custom deserialization logic here
}
}
字节码需要这样使用:
var result = g
.V()
.Has("name", "Samplevertex")
.OutE()
.HasLabel("child")
.Subgraph("sg")
.Cap<MySubgraph>("sg")
.Next();
我正在尝试使用 Gremlin.net 字节码语法从图中获取子图,但在从子图中获取 extracting/Cap 时出现错误。如果我直接使用查询字符串查询而不是使用流畅的 API 字节代码语法,我能够得到结果。
直接在 cosmos DB 上使用时 returns 结果的查询字符串:
g.V().has('name','Samplevertex').outE().HasLabel("child").subgraph('sg').cap('sg')
C# gremlin.net 无效的语法是:
var result = g
.V()
.Has("name", "Samplevertex")
.OutE()
.HasLabel("child")
.Subgraph("sg")
.Cap<GraphSON3Reader>("sg")
.Next();
当我使用上面的代码时,它给出了一个错误,提示未找到“tinker:graph”的反序列化器。 尝试使用 Cap<> 中的不同类型,如字符串、自定义模型。但是仍然出现相同的错误。
想知道我是否遗漏了 Gremlin 服务器配置端的任何内容,或者是否存在默认情况下带上限的子图不适用于 gremlin.net 的已知问题?
我的 gremlin 服务器 yaml 中有以下设置:
我能够通过创建自己的自定义反序列化器来解决这个问题,因为我了解到我们目前没有其他选项用于返回 Graph 的查询。
已按照 http://tinkerpop.apache.org/docs/3.2.6/reference/#_custom_serialization_2
中的步骤操作在字节码中使用的 Cap<> 命令中使用了新的 class 名称并得到了结果。
**Following is the snippet:**
internal class MySubgraph
{
public static string GraphsonPrefix = "tinker";
public static string GraphsonBaseType = "graph";
public static string GraphsonType = GraphSONUtil.FormatTypeName(GraphsonPrefix,
GraphsonBaseType);
public MySubgraph(ICollection<IVertex> vertices, ICollection<IEdge> edges)
{
Vertices = vertices;
Edges = edges;
}
public ICollection<IVertex> Vertices { get; }
public ICollection<IEdge> Edges { get; }
}
internal class MySubgraphReader : IGraphSONDeserializer
{
public dynamic Objectify(JToken graphsonObject, GraphSONReader reader)
{
JToken jVertices = graphsonObject["vertices"];
dynamic vertices = reader.ToObject(graphsonObject["vertices"]);
// Custom deserialization logic here
}
}
字节码需要这样使用:
var result = g
.V()
.Has("name", "Samplevertex")
.OutE()
.HasLabel("child")
.Subgraph("sg")
.Cap<MySubgraph>("sg")
.Next();