Lucene Query БЕЗ операторов - PullRequest
       7

Lucene Query БЕЗ операторов

1 голос
/ 22 декабря 2009

Я пытаюсь использовать Lucene для поиска имен в базе данных. Однако некоторые имена содержат такие слова, как «НЕ», «ИЛИ» и даже «-» минус символы. Я по-прежнему хочу, чтобы различные токены внутри имен были разбиты с помощью анализатора и искались как логическая комбинация терминов, но я не хочу, чтобы Lucene интерпретировал какие-либо термины «НЕ» / «ИЛИ» как операторы (вместо этого я хотите, чтобы их обыскивали как обычные термины).

Одним из способов выполнения того, о чем я говорю, было бы вручную запустить Analyzer для поискового запроса, а затем вручную создать логический запрос на основе всех полученных токенов. Это лучший способ? У меня складывается впечатление, что анализаторы были разработаны для использования в сочетании с анализатором запросов, и я чувствую, что должен быть встроенный способ выполнить то, что я пытаюсь сделать. Кто-нибудь знает лучший способ сделать это?

1 Ответ

1 голос
/ 23 декабря 2009

Ваш собственный предложенный подход к созданию BooleanQuery из TokenStream имеет полный смысл. API QueryParser на самом деле просто предназначен для анализа структурированных запросов с использованием определенного синтаксиса - если вы не используете синтаксис синтаксического анализатора запросов, я не вижу причин использовать QueryParser вместо созданного вручную BooleanQuery.

Однако, если вы используете StandardAnalyzer (или другой анализатор с StopFilter) для индексации ваших полей, слова типа «И», «НЕ» и «ИЛИ» не будут проиндексированы и не могут быть найдены. Таким образом, в этом случае вы можете так же легко убрать эти слова и операторы, такие как «-» и «+» из ваших запросов, используя регулярное выражение. Однако я бы порекомендовал подход BooleanQuery.

...