Вызов функции Cypher изменяет возвращаемое значение в зависимости от количества результатов - PullRequest
0 голосов
/ 21 января 2020

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

CALL db.index.fulltext.queryNodes('descs', 'abc') YIELD node
with collect(node) as matches1
CALL db.index.fulltext.queryNodes('descs', 'def') YIELD node
with matches1, collect(node) as matches2
RETURN apoc.coll.intersection(matches1,matches2) AS res

Запрос иногда работает нормально, но, кажется, ведет себя странно, когда в любом из вызовов возвращается слишком много результатов (до сих пор нет ' не знаю фактического предела). Точнее, если какой-либо из запросов возвращает большой список, то запрос возвращает просто «[]». Кажется, он работает идеально, если запрос возвращает список с несколькими узлами (или без узлов, что не дает результатов из-за пересечения с пустым списком). Есть ли настраиваемое (или не настраиваемое) ограничение для функции apo c .coll.intersection или любых других вызовов? Ситуация усугубляется при использовании операнда '~', поскольку он обычно возвращает больше результатов. Это означает, что похожие запросы будут работать или не будут работать должным образом, в зависимости от того, сколько совпадений обеспечивает вызов queryNodes.

Кроме того, поскольку для поиска может использоваться любое количество слов, существует ли способ обобщить этот вид запрос? Кажется, что queryNodes плохо работают с пробелами внутри текста для поиска. Regex может быть вариантом, но он не очень хорошо работает при работе с акцентами и / или поиске нескольких слов в любом заданном порядке.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...