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

Почему Neo4J говорит мне, что нет ложки?

Я использую Neo4J для представления текстов; в простейшем случае текст представляет собой последовательность слов, соединенных отношением LEMMA_TEXT.

Я пытаюсь найти N-е слово после известного слова с запросом, который выглядит примерно так.

MATCH (anchor)-[:LEMMA_TEXT*32]->(word) 
WHERE id(anchor) = 3275 
RETURN word

В одном конкретном случае, если я увеличиваю длину пути до 33, я получаю эту ошибку:

Neo.DatabaseError.Statement.ExecutionFailure: There is no spoon.

И все же следующий запрос возвращает правильный результат.

MATCH (anchor)-[:LEMMA_TEXT*32]->(word)-[:LEMMA_TEXT]->(next) 
WHERE id(anchor) = 3275 
RETURN next

который показывает, что node я хочу существовать и доступен.

Где раздел руководства, который подсказывает мне, как согнуть ложку моим умом? Что еще более важно, что это значит?!

4b9b3361

Ответ 1

Если что-то ломается под номером 33, это означает, что существует ограничение до 32, почему 32? 2 ^ 5.

Это не тривиально, что большинство ограничений имеют коэффициент 2, размер документа MongoDB не может быть больше 16 МБ, в коллекции может быть максимальный индекс, не более 64. и т.д.

почему он работает как 32, а затем следующий, потому что до 32 он может достичь за одну операцию, и для последнего он может видеть следующий как другую операцию. Но за одну операцию он не может работать 33.

Большинство из этих ограничений - это, в основном, проверка работоспособности, хотя и не имеющая технической границы.

Что касается того, почему он почти всегда является фактором 2, я хочу, чтобы кто-то другой ответил или, другими словами, я не знаю.

Ответ 2

Вы пытались разбить посадку и поисковые заявления в 2?

Плюс вы должны добавить метку для текстового слова (предел)

Пример:

MATCH (anchor)
WHERE id(anchor) = 3275 
WITH anchor
MATCH (anchor)-[:LEMMA_TEXT*32]->(word) 
RETURN word

Вы получаете ту же ошибку?