我们可以针对该场景使用单个复杂的gremlin查询吗

时间:2018-09-19 05:44:40

标签: azure-cosmosdb gremlin tinkerpop3

我在这里有一个场景,其中(无法附加图像)将顶点标签作为'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名称-值顶点都存在的顶点(with和condition) 其余的带有名称或条件的名称-值顶点(其他标签)(一个标签包含多个名称-值)。

我已经隔离并进行了三个查询,以解决首先获取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个查询组合成一个查询并触发以获取答案以避免延迟。请帮忙。

0 个答案:

没有答案