Hibernate搜索结果排名

时间:2014-08-27 08:13:38

标签: java lucene hibernate-search

我正在使用Hibernate Search和Lucene一起在我的数据库上实现全文搜索。我想知道hibernate搜索查询或lucene查询返回顶级排名和最相关的结果?文档说:

  

Apache Lucene提供了一种非常灵活且功能强大的排序方式   结果。虽然默认排序(按相关性)最合适   时间

链接:http://docs.jboss.org/hibernate/search/4.2/reference/en-US/html_single/#search-query

部分:5.1.3.3。排序

但我对结果非常困惑,因为它们总是与对象的ID一起排列。我只需要前100个最相关的记录。

2 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

按相关性排序会受到Analyzer选项的影响。如果你按照主键的顺序得到结果,那么它们可能都具有相同的分数,这通常是不太可能的,所以我的猜测是你没有在任何搜索过的字段上启用标记化。

确保您对查询中使用的字段进行了标记,并且他们正在使用适当的Analyzer。要选择合适的一个,您必须进行一些实验,因为它取决于语言(如果它是自然语言)或您要编制索引的数据类型。

要实际调试Relevance sort应用的排序顺序,请参阅Hibernate Search文档中Projections的用法: FullTextQuery.SCORE FullTextQuery.EXPLANATION 对于理解正在发生的事情非常有用。

快速试验不同分析仪效果的便捷实用程序是使用 org.hibernate.search.util.AnalyzerUtils 。您可以自己编写创建Analyzer实例的单元测试,也可以使用 org.hibernate.search.engine.SearchFactory.getAnalyzer(String)或用于特定索引的基础测试按名称检索分析器。实体类型的实体: org.hibernate.search.engine.SearchFactory.getAnalyzer(Class)