Точный порядок Lucene - PullRequest
       12

Точный порядок Lucene

4 голосов
/ 12 августа 2008

У меня была эта долгосрочная проблема, связанная с тем, что я не совсем понимал, как реализовать достойную сортировку или рейтинг Lucene. Скажем, у меня есть список городов и их населения. Если кто-то ищет «новый» или «лондон», я хочу получить список совпадений префиксов, упорядоченный по населению, и у меня есть такая работа с поиском по префиксу и обратным сортированием по полю, где есть поле заполненности, IE New Mexico, New York ; или Лондон, Лондондерри.

Однако я также всегда хочу, чтобы точное совпадающее имя было вверху. Таким образом, в случае с «Лондоном» в списке должно быть указано «Лондон, Лондон, Лондондерри», где первый Лондон находится в Великобритании, а второй Лондон - в Коннектикуте, даже если население Лондондерри выше, чем в Лондоне.

У кого-нибудь есть решение для одного запроса?

Ответы [ 3 ]

3 голосов
/ 31 августа 2008

dlamblin, позвольте мне посмотреть, правильно ли я понимаю: вы хотите сделать запрос на основе префикса, а затем отсортировать результаты по совокупности и, возможно, объединить порядок сортировки с предпочтением для точных совпадений. Я предлагаю вам отделить поиск от сортировки и использовать CustomSorter для сортировки: Вот запись в блоге, описывающая пользовательский сортировщик . Классическая книга Люсена хорошо описывает это.

1 голос
/ 04 сентября 2009

API для

Sortcomparator

говорит

Существует отдельное сопоставимое значение для каждого уникального термина в поле - если некоторые документы имеют одинаковый термин в поле, массив кеша будет иметь записи, которые ссылаются на одно и то же Сопоставимые

Вы можете подать

FieldSortedHitQueue

для sortcomparator, который имеет поле Comparator, для которого API говорит ...

Хранит компаратор, соответствующий каждое поле сортируется по.

Таким образом, термин может быть отсортирован соответственно

0 голосов
/ 12 августа 2008

Мое текущее решение состоит в том, чтобы создать точный поисковик и искатель префиксов, оба отсортированы по обратному населению, а затем скопировать все мои попадания, начиная с точных совпадений, и переходя к совпадениям префикса. Это делает просмотр моих результатов немного более раздражающим, чем я думаю.

Также я использовал хеш для устранения дубликатов, но позже изменил искатель префиксов в логический запрос поиска префиксов (ДОЛЖЕН) с точным поиском (НЕ ДОЛЖЕН), чтобы Lucene удалил дубликаты. Хотя это казалось еще более расточительным.

Редактировать : перемещено в комментарий (поскольку функция теперь существует): Yuval F Спасибо за сообщение в блоге ... Как компаратор сортировки узнает, что поле имени "Лондон" точно соответствует поисковому слову "Лондон", если он не может получить доступ к поисковому запросу?

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