2014-08-27 165 views
1

我正在使用Hibernate搜索與Lucene一起在我的數據庫上實現全文搜索。我想知道hibernate搜索查詢或lucene查詢返回排名最高和最相關的結果嗎?文檔說:Hibernate搜索結果排名

Apache Lucene提供了一種非常靈活和強大的方法來排序 結果。雖然默認排序(按相關性)是最合適的 時間

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

科:5.1.3.3。 Sorting

但我對結果非常困惑,因爲它們總是與對象的ID一起排列。我只需要排名前100的最相關記錄。

+1

默認的排序順序是由Lucene的相關性。也許你的(測試)數據只是以你的(測試)查詢似乎以id順序返回的方式排列。如果沒有您索引的內容和搜索方式的具體示例,則無法進一步提供幫助。 – Hardy 2014-08-28 12:24:46

回答

1

排序按相關性是受您的分析儀的選擇。如果您按照主鍵的順序獲得結果,則很可能它們都具有相同的分數,這通常是不太可能的,所以我的猜測是您沒有在任何搜索字段上啓用分詞。

請確保您標記了查詢中使用的字段,並且他們正在使用合適的分析器。要選擇一個適當的,你必須嘗試一下,因爲它取決於語言(如果它是自然語言)或你索引什麼樣的數據。

要實際調試通過關聯應用排序排序順序,看到Projections使用Hibernate的搜索文檔中:既FullTextQuery.SCOREFullTextQuery.EXPLANATION是非常有用的理解發生了什麼事情。

快速實驗不同分析儀的效果的一個方便的實用程序是使用org.hibernate.search.util.AnalyzerUtils。您可以自己編寫創建分析器實例的單元測試,也可以使用org.hibernate.search.engine.SearchFactory.getAnalyzer(String)或根據實體類型用於特定索引實體的基本測試,按名稱檢索分析器: org.hibernate.search.engine.SearchFactory.getAnalyzer(Class)