Использование Hibernate Search для оценки результата - PullRequest
3 голосов
/ 30 января 2011

Можно ли при поиске в режиме гибернации отсортировать результат по наилучшему совпадению после того, как он получил результат поиска из базы данных

Ответы [ 2 ]

3 голосов
/ 30 января 2011

Lucene имеет функцию сортировки (которая по умолчанию соответствует).

Поиск в Hibernate предоставляет эту функцию (FullTextQuery.sort). если вам не нужно поведение по умолчанию, вы можете передать свой собственный объект сортировки.

Sort sort = new Sort(new SortField("name"));
searchQuery.setSort(sort);
List results = searchQuery.list();

В вашем случае достаточно сортировки по умолчанию.

2 голосов
/ 10 февраля 2011

По умолчанию Hibernate Search сортирует результаты на основе релевантности результатов (как упомянуто в doc_180), определенной реализацией скоринга Lucene по умолчанию.

Однако, если вас не устраивает способ ранжирования (например, вы можете захотеть, чтобы сущности людей в целом имели более высокий рейтинг, чем все остальные индексируемые вами сущности), вы можете сделать одну из двух вещей. :

  1. Применение динамического или статического коэффициента усиления к объектам, которые следует считать более актуальными (см. Документы в аннотациях @Boost и @DynamicBoost), или
  2. Вы можете написать свою собственную реализацию скоринга, расширив org.apache.lucene.search.S Similarity (см. Расширенные функции поиска в Hibernate * ). Коэффициент усиления, упомянутый в пункте 1, является лишь одним из факторов в этом общем алгоритме оценки.
...