如何确定Gremlin查询返回的内容?像顶点,边缘或标签等

时间:2019-06-21 13:22:32

标签: java gremlin gremlin-server

我有一个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进行尝试,然后选择成功的地方。

1 个答案:

答案 0 :(得分:0)

您真的没有太多选择,只能测试结果以查看其类型。 Gremlin的结果也不总是均匀的。例如,有人可以发送此邮件:

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

忘记了没有人会这样做,只是认为他们可以做到。您将混合使用顶点,边线,带有较长double和嵌入式地图的列表。在拥有结果之前,您不知道结果,即使如此,您可能仍需要检测容器集合内的类型。如果您在每种类型的UI中有不同种类的呈现,则别无选择,只能递归进行类型检测。您可能还需要某种默认渲染,以处理您不知道如何渲染的事情。

如果您从Gryo序列化(我假设您将其用作client的默认设置)到GraphSON的关闭,则可以得到的类型会减少很多。您可以在IO documentation中看到它们。