我正在用遍历“ match()”的方式来编写gremlin查询。似乎某些模式匹配的行为与其他模式语言不同。
g.V('A', 'B').match(__.as('x'), __.as('y')).project('x', 'y')
==>[x:v[A],y:v[A]]
==>[x:v[B],y:v[B]]
我认为模式变量x
和y
没有约束,结果将是
==>[x:v[A],y:v[A]]
==>[x:v[A],y:v[B]]
==>[x:v[B],y:v[A]]
==>[x:v[B],y:v[B]]
似乎已隐式添加了约束x = y
。
有时,模式变量绑定到输入中未列出的值:
g.V('A', 'B').match(__.as('x').out().as('y'), __.as('y'))
==>[x:v[A],y:v[B]]
==>[x:v[B],y:v[C]]
==>[x:v[B],y:v[D]]
在此查询中,我们比以前的查询具有更多的约束。 因此,期望的结果较少,但是通过捕获输入遍历器中不包含的顶点可以提高结果。
当模式变量可以捕获此类顶点时,是否有清晰的文档。
类似查询:
g.V('A', 'B').match(__.as('x').out().as('y'), __.as('z'))
The provided match pattern is unsolvable: [[MatchStartStep(z), MatchEndStep], [MatchStartStep(x), VertexStep(OUT,vertex), MatchEndStep(y)]]
Type ':help' or ':h' for help.
Display stack trace? [yN]y
java.lang.IllegalStateException: The provided match pattern is unsolvable: [[MatchStartStep(z), MatchEndStep], [MatchStartStep(x), VertexStep(OUT,vertex), MatchEndStep(y)]]
at org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchStep$MatchAlgorithm.lambda$static$0(MatchStep.java:690)
at org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchStep$CountMatchAlgorithm.apply(MatchStep.java:757)
at org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchStep$CountMatchAlgorithm.apply(MatchStep.java:723)
at org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchStep.standardAlgorithm(MatchStep.java:398)
此约束比前一个约束少。 该错误是什么意思。