gremlin中not()和and()或者or()一起使用不起效果?

问题

gremlin中not()和and()或者or()一起使用不起效果?

公司做知识图谱,利用gremlin
首先放上查询语句:

g.V()
.and(has('rdf','组织'))
.outE()
.and(has('rdf','增发股票'))
.or(has('Fa1Xing2Fei4Yong4Zong3E2Yuan2','51900'))
.count()

查询出来的结果是七条,这时候我们加上not语句

.not(has('Fa1Xing2Fei4Yong4Zong3E2Yuan2','1050000')).count()

我需要的效果是只排除一个结果,但是实际结果都排除了,所以结果会是0条。

关于 and() / or() / not() 的功能描述如下-

  • and():可以接受任意数量的遍历器(traversal),原遍历器中的元素,只有在每个新遍历器中都能生成至少一个输出的情况下才会保留,相当于过滤器组合的与条件;
  • or():可以接受任意数量的遍历器(traversal),原遍历器中的元素,只要在全部新遍历器中能生成至少一个输出的情况下就会保留,相当于过滤器组合的或条件;
  • not():仅能接受一个遍历器(traversal),原遍历器中的元素,在新遍历器中能生成输出时会被移除,不能生成输出时则会保留,相当于过滤器的非条件。

试过了蛮多种的方案,但是都无法达到只排除一个选项的效果,最终退而求其次,更换逻辑:

  • 原先逻辑 and() 结果 + not() 排除其中 特定选项
  • 现逻辑 and() 结果 + 把not() 结果拆分成and() 和 or() 实现原先的not() 结果。

not() 拆分要考虑两种结果 一种是not过滤单个或者一批的数据,那么可以用 and( has (’ ‘,neq( )) ) 另外一种结果是范围的,可以利用 or( has(’ ‘, lt () ) , has(’ ‘, gt(’ ') ) ) 进行反向判断。

注意事项:or() 中不可用 gte / lte 只能用 gt / lt 否则会有语法错误。

猜你喜欢

转载自blog.csdn.net/qq_29064815/article/details/104801078
今日推荐