Lucene игнорировать ключевые слова в поисковой фразе - PullRequest
1 голос
/ 28 июня 2011

Похоже, все должно быть просто, но я не могу понять, как заставить Lucene игнорировать ключевые слова AND, OR и NOT - анализатор запросов выдает ошибку разбора, когда получает ее. У меня есть класс построителя запросов, который разбивает поисковый термин так, чтобы он выполнял поиск по самим словам, а также по n-граммах в слове. Я использую Lucene в Java.

Таким образом, при поиске, скажем, «ANDERSON COOPER» строка запроса выглядит следующим образом:

name: (ANDERSON COOPER "ANDERSON COOPER")^5 gram4: ( ANDE NDER DERS ERSO RSON 
SONC ONCO NCOO COOP OOPE OPER)

анализатор запросов выдает ошибку, когда получает эти AND. В идеале, я бы хотел, чтобы парсер просто игнорировал AND, OR, NOT, и я буду использовать &&, || и! эквиваленты, если они мне нужны - нужно ли изменять код в самом классе QueryParser, чтобы получить это? Или есть более простой способ? Я мог бы также просто вставить escape-символ для этих случаев, если это лучший способ сделать это, но добавление \ перед словом AND, похоже, ничего не делает.

1 Ответ

2 голосов
/ 28 июня 2011

Вы можете заключить AND в кавычки следующим образом: "AND".Это легко?Регулярное выражение, вероятно, может сделать это легко, если вы точно знаете, как выглядят ваши запросы.

У парсера не должно быть проблем с этим, и PhraseQuery будет переписан как запрос запроса, так что это будет небольшая разница в производительности с постоянным временем.1007 * Регулярное выражение может выглядеть примерно так:

\b(AND|OR|NOT)\b

Что будет заменено на

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