Вопрос

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

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

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

Это было полезно?

Решение

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

Другие советы

API для

Сорт-компаратор

говорит

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

Вы можете применить

ПолеSortedHitQueue

к компаратору сортировки, у которого есть поле Comparator, для которого API говорит...

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

Таким образом, термин можно отсортировать соответствующим образом.

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

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

Редактировать:Перенесено в комментарий (поскольку такая функция теперь существует): Юваль Ф Спасибо за ваш пост ...Как компаратор сортировки узнает, что поле имени «лондон» точно соответствует поисковому слову «лондон», если у него нет доступа к искомому слову?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top