Hibernate 搜索排序

Hibernate Search sorting

Hibernate 搜索是根据相关性对结果进行排序,这是正常的。 除此之外,如果两个文档具有相同的分数,则它们按主键排序。

例如,

book1 : id=1, bookTitle = "hibernate search by example".

book2 : id=2, bookTitle = "hibernate search in action"

如果我正在执行查询以查找术语 "hibernate search",我将有以下顺序:book1 然后 book2

我想颠倒顺序:先是 book2,然后是 book1。 这意味着反转主键顺序。 有没有办法在不实现自定义 Similarity 的情况下做到这一点?同时保持关联顺序。

是的,您需要创建一个 Sort 对象来指定所需的排序,并在您的查询中进行设置。见Section 5.1.3.3 of the Hibernate docs. Then, in the list of SortFieldsSortField.FIELD_SCORE。 SortField 的构造函数还允许您反转顺序。

org.hibernate.search.FullTextQuery query = s.createFullTextQuery( luceneQuery, MyEntity.class );
org.apache.lucene.search.Sort sort = new Sort(
    SortField.FIELD_SCORE, 
    new SortField("id", SortField.STRING, true));
query.setSort(sort);
List results = query.list();