我有一种情况需要检查图中是否已经存在具有三个令人满意的属性的顶点property1 ='a',property2 ='b',property3 ='c',如果不存在,则需要创建它。基本上,这三个属性的组合应在图形中具有唯一的顶点。我已经尝试了这个gremlin代码片段,以根据一个属性“ id”进行检查
getOrCreate = { id ->
def p = g.V('userId', id)
if (p.hasNext()) ? p.next() : g.addVertex([userId:id])
由于我是初学者,因此对于修改此参数以实现我所需的gremlin的最佳方法尚不十分清楚。我所能想到的就是在最后一条语句中嵌套更多的if和else。任何帮助表示赞赏,谢谢。
有几种方法。一种方法是将遍历范围扩大一点:
getOrCreate = { one, two, three ->
def p = g.V('prop1', one).has('prop2',two).has('prop3',three)
p.hasNext() ? p.next() : g.addVertex([prop1:one,prop2:two,prop3:three])
在上面的代码中,prop1
代表一个索引属性,然后仅对其余属性进行过滤。那prop
应该是最有选择性的属性,因为它应该过滤掉最多的结果。
如果由于某种原因prop
不够选择性,那么该解决方案可能不够快。换句话说,如果您有10亿个顶点并g.V('prop1', one)
返回100000顶点,那么您将在内存中过滤这些顶点,这有点慢。如果是您的情况,我将考虑通过在索引上添加第四个属性(将所有三个属性合并为一个)来创建“穷人”综合索引。然后就可以进行查询了。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句