【问题标题】:How can I identify what is being returned from a Gremlin query? Like vertices or edges or labels, etc如何识别 Gremlin 查询返回的内容?像顶点或边或标签等
【发布时间】:2019-06-21 13:22:32
【问题描述】:

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

【问题讨论】:

    标签: java gremlin gremlin-server


    【解决方案1】:

    您真的别无选择,只能测试结果以查看其类型。 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 的默认值)关闭到 GraphSON,您确实会得到一组更少的类型。你可以在IO documentation看到那些。

    【讨论】:

    • 谢谢斯蒂芬,我明白你的意思了。我将不得不递归地检查类型。让我也玩一下其他序列化,如果它对我有用,我会更新。在过去的几天里,你帮了很大的忙。感谢您的快速回复:)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-24
    • 1970-01-01
    • 2021-12-27
    • 2022-01-21
    • 2018-03-22
    • 1970-01-01
    • 2015-04-19
    相关资源
    最近更新 更多