Для поиска по фразе мы хотим выводить результаты только при наличии точного совпадения (без игнорирования стоп-слов). Если это нефразовый поиск, мы нормально отображаем результаты, даже если корневая форма слова совпадает и т. д.
В настоящее время мы передаем наши данные через standardTokenizer, StopFilter, PorterStemFilter и LowerCaseFilter. Из-за этого, когда пользователь хочет найти «управление паролями», поиск выдает результаты, содержащие «менеджер паролей».
Если я удалю StemFilter, то не смогу сопоставить корневую форму слова для нефразовых запросов. Я думал, должен ли я индексировать одни и те же данные как часть двух полей в документе.
Я задал тот же вопрос в разделе Разные стратегии индексации и поиска в одном и том же поле без удвоения размера индекса?. Однако людям в офисе не нравится индексировать одни и те же данные как часть двух полей. (в настоящее время у нас есть около 20 текстовых полей в документе lucene). Есть ли способ поддержать оба случая, которые я перечислил выше, используя TokenFilters?
Скажем, для StopFilter внесите изменения, чтобы он выдавал как входной токен, так и ? (для игнорируемого слова) с одинаковыми приращениями позиции. Точно так же для StemFilter он выдает как входной токен, так и базовый токен с одинаковыми приращениями позиции. В основном входные и выходные токены (даже игнорируемые) имеют одинаковые позиции.
Безопасно ли продолжать использовать этот подход? Кто-нибудь еще сталкивался с перечисленными здесь требованиями? Есть ли доступные фильтры, которые делают что-то похожее на то, что я упомянул в своем подходе?
Спасибо