首页 > 解决方案 > 如何识别 Gremlin 查询返回的内容?像顶点或边或标签等

问题描述

我有一个 Java 应用程序,它允许用户从 UI 推送 Gremlin 查询,这些查询在后端 gremlin 服务器上执行。

我想知道 ResultSet 中返回了什么。它可以是顶点列表或边列表,也可以是字符串列表(可能是标签)。这样我就可以显示与返回的对象类型相关的正确 UI。

仅查看查询的初始部分就无法确定返回的内容。例如:

g.V() // returns list of Vertices
g.V().outE() // returns list of Edges
g.E().outV() // returns list of Vertices
g.E().outV().label() // returns list of Strings

String query = "g.E().outV().label()";
ResultSet resultSet = client.submit(query);
resultSet.forEach(result -> result.getString()); // getString or getVertex or getEdge ???

分析整个查询以识别返回的对象并不是一种智能且万无一失的方法。

识别返回类型的最佳方法是什么?除了用 try...catch 尝试所有,然后选择它成功的地方。

标签: javagremlingremlin-server

解决方案


您真的别无选择,只能测试结果以查看其类型。Gremlin 结果也不总是同质的。例如,有人可以发送这个:

g.V(1).outE().path().
  unfold().
  inject(1, [1L, "xyz", [x:"don't care that this traversal is crazy"]], Double.NaN)

忘记没有人可能会这样做,只是认为他们可以。您会得到顶点、边、带有长双精度图和嵌入式地图的列表。在获得结果之前您不知道结果,即使如此,您也可能需要检测容器集合内的类型。如果您在 UI 中为每种类型提供不同类型的渲染,您别无选择,只能递归地进行类型检测。您可能还需要某种默认渲染来处理您不知道如何渲染的事情。

如果您从 Gryo 序列化(我假设您将其用作您client的 . 您可以在IO 文档中查看这些内容。


推荐阅读