Подтвердить что ты не робот

В чем разница между несколькими предложениями MATCH и запятой в запросе Cypher?

В языке запросов Cypher для Neo4j, какова разница между одним предложением MATCH сразу после другого следующим образом:

MATCH (d:Document{document_ID:2})
MATCH (d)--(s:Sentence)
RETURN d,s

В отличие от разделенных запятыми паттернов в одном и том же предложении MATCH? Например:.

MATCH (d:Document{document_ID:2}),(d)--(s:Sentence)
RETURN d,s

В этом простом примере результат тот же. Но есть ли какие-либо "gotchas"?

4b9b3361

Ответ 1

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

Отдельные MATCHes - это отдельные операции, пути которых не образуют единичные шаблоны и которые не имеют этих гарантий.

Ответ 2

Между этими нет различий при условии, что предложения не связаны друг с другом.

Если вы сделали это:

MATCH (a:Thing), (b:Thing) RETURN a, b;

То же самое, что:

MATCH (a:Thing) MATCH (b:Thing) RETURN a, b;

Потому что (и только потому, что) a и b независимы. Если a и b связаны соотношением, то смысл запроса может измениться.

Ответ 3

Если часть запроса содержит несколько несвязанных шаблонов, это приведет к созданию декартова продукта между всеми этими частями. Это может привести к большому количеству данных и замедлить обработку запросов. Иногда изредка может возникнуть возможность переформулировать запрос, который позволяет избежать использования этого перекрестного продукта, возможно, путем добавления взаимосвязи между различными частями или с помощью ДОПОЛНИТЕЛЬНОГО МАТЧИ (идентификатор: (a)). Короче говоря, это НЕ ОТМЕНА В этом обоих запросах, но очень осторожно использовал его.