Есть ли документ о том, как работает gremlin 'match ()'? - PullRequest
3 голосов
/ 10 апреля 2019

Я пишу запрос Гремлина с обходом 'match ()'. Кажется, что некоторые соответствия шаблонов ведут себя не так, как другие языки шаблонов.

  1. Как входные значения 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 добавлено неявно.

  1. Когда переменные шаблона связаны со значениями, не перечисленными во входном 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]]

В этом запросе у нас больше ограничений, чем в предыдущем запросе. Таким образом, ожидается меньше результатов, но результаты увеличиваются за счет захвата вершин, а не входных траверс.

Есть ли четкая документация, когда переменные шаблона могут захватывать такие вершины.

  1. «Указанный шаблон сопоставления неразрешим»

Аналогичный запрос:

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)

Это имеет меньше ограничений, чем предыдущий. Что означает эта ошибка.

...