繁体   English   中英

复杂的Gremlin查询以输出节点/边

[英]Complex Gremlin queries to output nodes/edges

我正在尝试实现一个查询和图形可视化框架,该框架允许用户输入Gremlin查询,并返回结果的D3图形。 D3图是使用JSON构建的-使用单独的顶点和Gremlin查询的输出来创建。 对于简单的查询,例如:

g.V.filter{it.attr_a == "foo"}

这很好。 但是,当我尝试执行以下更复杂的查询时:

g.E.filter{it.attr_a == 'foo'}.groupBy{it.attr_b}{it.outV.value}.cap.next().findAll{k,e->e.size()<=3}

- Find all instances of *value*
- Grouped by unique *attr_b*
- Where *attr_a* = foo
- And *attr_b* is paired with no more than 2 other instances of *value*

而是,输出具有以下形式:

attr_b1: {value1, value2, value3}
attr_b2: {value4}
attr_b3: {value6, value7}

我想知道Gremlin是否可以将结果输出为节点和边的列表,以便可以将结果显示为图形。 我知道我可以编辑D3代码以接收此新输出,但是当前对查询的类型/复杂度没有任何限制,因此键/值对不一定每次都相同。

谢谢。

您遇到了我认为可视化Gremlin结果的关键问题之一。 他们可以是任何东西。 Gremlin结果可能不仅是顶点和边的列表。 我无法想到要真正控制这一点。 最终,您实际上只能可视化与D3期望的模式匹配的结果。 我将从尝试检测该模式并仅在那些情况下可视化开始(可能将无法识别的模式显示为JSON)。

考虑一下您的特定示例,结果如下:

attr_b1: {value1, value2, value3}
attr_b2: {value4}
attr_b3: {value6, value7}

您想让D3在这里看到什么? 遍历以获得结果的顶点/边? 如果是这样,您可能会被卡住。 格雷姆林(Gremlin)无法让您对管道进行内部检查以查看正在通过的内容。 换句话说,除非用户在管道内显式收集顶点和边缘,否则您将无法访问它们。 能够以这种方式“侦听”管道会很不错,但目前还没有做到这一点。 TinkerPop内部进行了讨论,以创建一种新型的管道实现方式来帮助实现这一目标,但目前尚不存在。

因此,如果没有“间谍”功能,我认为您唯一的解决方法是:

  1. 在您的客户端上检测顶点/边缘列表,仅使用d3渲染它们。 如果需要可视化,这将迫使用户始终编写返回这种格式的数据的gremlin。 放在用户手中。
  2. 也许为顶点/边列表提供服务器端绑定,如果结果不符合可视化引擎预期的结果,则用户可以将顶点/边显式地副作用。 再次,如果需要可视化,这将迫使用户根据需要编写适当的gremlin。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM