Java Lucene как организовать поиск по точному соответствию?

например у меня есть такой текст:

"String content = "book data weaponry is IS iS Is Nato war force ENTREPRENEUR ENTREPRENEUR";"

И внутри него я хочу найти шаблон "IS", т.е чтобы при поиске у меня был результат только "IS".

Но загвоздка в том, что при создании поля для этого контента я использую new StandardAnalyzer() Как я понял он выполняет разные функции, но она из них это перевести слова в нижний регистр. И шаблон он тоже переводит в нижний регистр.


Получается если я хочу найти "IS", то на деле я ищу "is" в таком индексе:

book data weaponry is is is is nato war force entreprenuer entreprenuer

И в результате я найду 4 слова, это "is is is is".


Какой результат ожидается: есть шаблон "IS", я ищу его в индексе и нахожу не 4 результатных слов, а лишь одно слово, которое наиболее подходит к этому.


Подскажите как можно добиться такого результата? Пока что я могу искать слова без учета регистра. Может быть надо что-то другое использовать, напишите пожалуйста.


Ответы (1 шт):

Автор решения: Roman Konoval

Analyzer используется для двух вещей:

  1. при индексации. Он нормализует и преобразовывает данные, в частности, может для текста IS вставить в индекс и IS и is.
  2. при поиске. В этом случае он нормализует и преобразовывает строку поиска перед тем как, собственно, будет делаться поиск.

Если вы используете StandardAnalyzer при индексации и при поиске, то у вас происходит преобразование данных и поискового слова в нижний регистр, и поиск получается регистронезависимым. Если нужен поиск текста в том регистре, в котором он был изначально, то нельзя использовать StandardAnalyzer.

Нужно создать свои анализаторы. Для индексации, такой, который будет сохранять оригинал и текст в нижнем регистре. Для поиска, такой, который не преобразовывает поисковую строку (можно унаследовать от StandardAnalyzer и убрать из него LowerCaseFilter). Тогда при индексации в индекс попадет два варианта. При поиске можно будет выбрать анализатор в зависимости от того, нужен ли регистронезависимый поиск.

→ Ссылка