Neo.DatabaseError.Statement.ExecutionFailed: не найден план доступа для отношения шаблона в связанном компоненте.Этого не должно случиться - PullRequest
0 голосов
/ 28 февраля 2019

Я настроил базу данных Neo4j с помощью Docker.Я использую версию 3.4.1 Enterprise со всеми настройками по умолчанию.

Я добавил уникальное ограничение на узел.

CONSTRAINT ON (product:Product) ASSERT product.pcode IS UNIQUE

Затем я пытаюсь выполнить запрос MERGE

MERGE (u:Profile{pid:'123'})<-[:SHOPS_AT]-(:Store)-[:SELLS]->(:Product{pcode:'pcode-1234'})

Однако я получаю следующую ошибку: Neo.DatabaseError.Statement.ExecutionFailed: Found no access plan for a pattern relationship in a connected component. This must not happen.

Как вы можете сказать, сообщение об исключении вообще не помогает.Я заметил, что если я уберу ограничение, оно будет работать.

Я попытался использовать другой экземпляр Neo4j, который развернут на виртуальной машине той же версии Enterprise Edition с тем же ограничением, и он проходит !!!

У кого-нибудь был подобный опыт?Я не нашел много по Google.Причина, почему я получаю эту ошибку?

1 Ответ

0 голосов
/ 01 марта 2019

Вы должны создать проблему neo4j для этого ошибочного поведения.

Однако, даже если ошибка не существовала, вы, вероятно, не хотите писать запрос таким образом.Чтобы процитировать документацию для MERGE (взято из версии 3.5):

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

То есть этот запрос:

MERGE (u:Profile{pid:'123'})<-[:SHOPS_AT]-(:Store)-[:SELLS]->(:Product{pcode:'pcode-1234'})

может создать новый Profile и Product узлов - даже если любой из узлов соответствует существующему узлу - если весь шаблон еще не существует.

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

MERGE (u:Profile{pid:'123'})
MERGE (p:Product{pcode:'pcode-1234'})
MERGE (u)<-[:SHOPS_AT]-(:Store)-[:SELLS]->(p)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...