java - 如何识别 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 尝试所有,然后选择它成功的地方。
解决方案
您真的别无选择,只能测试结果以查看其类型。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 文档中查看这些内容。
推荐阅读
- c# - C# 同一个 DLL 的多个版本
- reactjs - “网络错误:尝试获取资源时出现 NetworkError。”
- objective-c - 如何以编程方式禁用安全输入?
- django - 未找到带有关键字参数“{'order_id': 'JUQEDJA6QQ'}”的“order_detail”的反向操作。尝试了 1 种模式:
- kubernetes - Kubernetes pod 因 CrashLoopBackOff 而崩溃
- c# - 从数据库加载图像,显示它们的问题
- c# - WPF: Detect Datagrid changes
- java - Wrong Keyboard Layout For Java Application
- angular - ngbPopover autoClose 不是 div 的已知属性
- mongodb - Sum nested array in node.js mongodb