Разные стратегии индексации и поиска в одном поле без удвоения размера индекса? - PullRequest
0 голосов
/ 28 ноября 2011

Для поиска по фразе мы хотим выводить результаты, только если есть точное совпадение (без игнорирования стоп-слов). Если это поиск не по фразе, то мы можем отобразить результаты, даже если корневая форма слова соответствует и т. Д.

В настоящее время мы передаем наши данные через стандартные токенайзеры, StopFilter, PorterStemFilter и LowerCaseFilter. В связи с этим, когда пользователь хочет найти «управление паролем», поиск выводит результаты, содержащие «менеджер паролей».

Если я удалю StemFilter, я не смогу найти соответствие для корневой формы слова для несфразовых запросов. Я думал, если я должен индексировать те же данные, как часть двух полей в документе.

Для первого поля (которое будет использоваться для поиска фраз) будут использоваться следующие токенизаторы / фильтры: Стандартный токенайзер, LowerCaseFilter

Для второго поля (поиск без фразы) Стандартный токенайзер, StopFilter, PorterStemFilter, LowerCaseFilter

Теперь, основываясь на поиске фразы или нет, мне нужно переписать запрос пользователя для поиска в соответствующем поле.

Это правильный способ решения этой проблемы? Есть ли другой способ добиться этого без удвоения размера индекса?

допустим, запрос пользователя summary:"Furthermore, we should also fix this"

Внутренне это будет переведено на summary_field1:"Furthermore, we should also fix this"

Если запрос пользователя summary:(Furthermore, we should also fix this)

Внутренне это будет переведено на +summary_field2:furthermor +summary_field2:we +summary_field2:should +summary_field2:also +summary_field2:fix

и summary_field1, и summary_field2 индексируют одни и те же данные. summary_field1 проходит только через StandardTokenizer и LowerCaseFilter, тогда как summary_field2 проходит через StandardTokenizer, StopFilter, PorterStemFilter и LowerCaseFilter.

Пожалуйста, дайте мне знать, если я что-то здесь упускаю.

1 Ответ

3 голосов
/ 28 ноября 2011

Определив два разных поля, вы можете искать точные совпадения. Используя бусты, вы также можете выводить результаты в одном запросе. Например:

(firstField:"password management")^5 OR (secondField:"pasword management")^1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...