Escape Lucene специальные символы в полнотекстовом запросе - PullRequest
2 голосов
/ 02 мая 2019

Я использую новую функцию из neo4j 3.5.4: полнотекстовые поисковые индексы. И мне нужно получить узел с полем «имя», где значение содержит специальные символы, такие как *? - и т. Д.

Я уже использовал функцию re.escape по умолчанию для экранирования строки термина.

Результат запроса выглядит так:

CALL db.index.fulltext.queryNodes(
"property_search_index", 
"name:\?\?\?\.\.\.\/\/\/\*\*\*~"
) YIELD node AS property, score

где входной термин перед экранированием выглядит так: ???...///***

Запрос возвращает следующее сообщение об ошибке:

neo4j.exceptions.CypherSyntaxError: 
Invalid input '?': expected '\', ''', '"', 'b', 'f', 'n', 'r', 't', 
UTF16 or UTF32 (line 1, column 68 (offset: 67))

Итак, вопрос в том, как правильно избежать этой строки? или это ошибка neo4j?

1 Ответ

0 голосов
/ 03 мая 2019

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

CALL db.index.fulltext.queryNodes(
"property_search_index", 
"name:\\?\\?\\?\\.\\.\\.\\/\\/\\/\\*\\*\\*~"
) YIELD node AS property, score

Если вы поместите этот запрос в функцию apoc, вам придется дублировать обратную косую черту.

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