我正在用“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
and 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)
与前一种相比,这种限制较少。
这个错误意味着什么。