Поиск по нескольким полям с помощью Lucene - PullRequest
4 голосов
/ 06 апреля 2011

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

Скажем, у меня есть список, содержащий объекты "Персона".Скажем, каждый объект содержит два строковых поля о человеке:

FirstName:  Jack
Surname:    Smith

FirstName   Mary
Surname:    Jackson

Если пользователь вводит «jack», мне нужно, чтобы поиск совпадал с обоими объектами: первым по Фамилии, а вторым по FirstName.

Я смотрел на использование MultiFieldQueryParser, но не могу правильно настроить поля.Любая помощь в этом или указание на хороший учебник будет принята с благодарностью.

1 Ответ

3 голосов
/ 06 апреля 2011

MultiFieldQueryParser это то, что вы хотите, как вы говорите.

Убедитесь:

  • Имена полей всегда используются последовательно
  • То же Analyzer используется в обоих полях, а также в анализаторе запросов
  • По умолчанию вы не найдете частичных слов, поэтому, если вы ищете jack, вы не найдете jackson. (В этом случае вы можете найти jack*.)

Что касается имени поля, я всегда устанавливаю enum для имен своих полей, а затем использую, например, MyFieldEnum.firstname.name() при передаче имен полей в Lucene, чтобы, если я совершу орфографическую ошибку, компилятор мог ее отловить, и это также хорошее место для размещения Javadoc, чтобы вы могли видеть, для чего предназначены поля, а также место, где вы можете см. полный список полей, которые вы хотите поддержать в ваших документах Lucene.

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