使用Hibernate搜索来评估结果

时间:2011-01-30 05:53:24

标签: hibernate lucene hibernate-search

hibernate搜索是否有可能在数据库中有搜索结果后根据最佳匹配对结果进行排序

2 个答案:

答案 0 :(得分:3)

Lucene具有排序功能(默认为相关性)。

Hibernate搜索公开此功能(FullTextQuery.sort)。如果您不想要默认行为,则可以传递自己的排序对象。

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

在您的情况下,默认排序应该足够了。

答案 1 :(得分:2)

默认情况下,Hibernate Search会根据默认Lucene评分实施确定的结果的相关性(如doc_180所述)对结果进行排序。

但是,如果您对排名的方式不满意(例如,您可能希望人员实体的排名通常高于您拥有的所有其他索引实体)那么您可以做两件事之一:

  1. 将动态或静态提升因子应用于应被视为更相关的实体(请参阅@Boost和@DynamicBoost注释上的文档)或
  2. 您可以通过扩展org.apache.lucene.search.Similarity来编写自己的自定义评分实现(请参阅Hibernate Search Advanced Features)。第1点中提到的提升因子只是整体评分算法中的一个因素。