首页 > 解决方案 > 我们可以为场景提供一个复杂的 gremlin 查询吗

问题描述

我在这里有一个场景,其中(无法附加图像)作为“url”的顶点标签附加到各种其他标签。实时英语动词被制成边缘名称,并在检索期间提供。

URL -> has -> otherentities

URL -> verb1 -> states
URL -> verb2 -> states  etc..

Likewise for other labels
URL -> verb1 -> pages
URL -> verb2 -> pages etc..

URL -> verb1 -> lines
URL -> verb2 -> lines etc..

URL -> verb1 -> schedule
URL -> verb2 -> schedule etc..

URL -> verb1 -> section
URL -> verb2 -> section etc..

URL -> verb1 -> box
URL -> verb2 -> box etc..

URL -> verb1 -> input_method
URL -> verb2 -> input_method etc..

作为起点,我有一些顶点名称的标签和值属性,即状态、时间表、部分、框、行、页面和动词(这是作为输入的组合)。

现在,上述标签的值在 CSV 的每个单元格中由 & 分隔,我在 java 中解析 CSV 并检查标签和每个标签的名称并形成动态 gremlin 查询。

所以这里的问题陈述是我们想要获取所有 URL:所有动词都出现在边缘标签(和条件)中,以及所有 input_method 名称-值顶点都存在的顶点(带有和条件)以及名称的其余部分 -存在或条件的值顶点(其他标签)(一个标签多个名称值)。

我已经分离并进行了三个查询来解决我首先获取 startvertex (从任何顶点开始)并获取所有 url 的问题。

Like:
For otherentities-
g.V().hasLabel('" + startLabel + "').inE('has').has('forward','" + startLabel+ "').outV().hasLabel('url') 
For rest all labels:
g.V().hasLabel('" + startLabel + "').inE('" + verb + "').has('forward','" + startLabel+ "').outV().hasLabel('url')

Then I am looping each url and forming queries depending on label like:
g.V().hasLabel('url').has('id','fbd385c2-232f-4cdf-842d-ccea20941d4d').as('a').where(and(outE('generate').has('forward','states').where(or(inV().hasLabel('states').has('name', 'Massachusetts'))))).select('a')

而对于 input_method 和其他实体形成另一种查询和单独查询。

那么有没有一种方法可以将所有 4 个查询组合成一个查询并触发以获得我的答案以避免延迟。请帮忙。

标签: azure-cosmosdbgremlintinkerpop3

解决方案


推荐阅读