Я пишу запрос Гремлина с обходом 'match ()'. Кажется, что некоторые соответствия шаблонов ведут себя не так, как другие языки шаблонов.
- Как входные значения traverser связаны переменными шаблона.
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
добавлено неявно.
- Когда переменные шаблона связаны со значениями, не перечисленными во входном traverser.
Иногда переменная шаблона связана со значениями, не перечисленными во входных данных:
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)
Это имеет меньше ограничений, чем предыдущий.
Что означает эта ошибка.