我在排序中遇到了一個問題,具體如下:
。之前的代碼是這樣寫的
Sort sort = new Sort(new SortField[ ] {
SortField.FIELD_SCORE,
new SortField("field_1", SortField.STRING) 。
new SortField("field_2", SortField.STRING) 。
new SortField("field_2", SortField.Long)
});
這是由stackoverflow答案粘貼的一個例子,用于自定義排序。 在 Lucene 中基于數字欄位對搜索結果進行排序。
雖然他并沒有建議這是正確的排序方式,但這也是我公司多年來一直使用的代碼。
但是當我創建一個新的函式,需要對許多欄位進行排序時,通過執行單元測驗,我發現它實際上并沒有按照預期作業。
我需要移除SortField.FIELD_SCORE,以使其正常作業。我想這是由這里描述的例子建議的,如果我沒有理解錯的話,https://docs.jboss.org/hibernate/search/4.1/reference/en-US/html_single/#d0e5317。
即主代碼將轉換為
。Sort sort = new Sort(new SortField[ ] {
new SortField("field_1", SortField.STRING) 。
new SortField("field_2", SortField.STRING) 。
new SortField("field_2", SortField.Long)
});
所以我的問題是
- 什么是用法?
SortField.FIELD_SCORE的用法是什么?欄位分數是如何計算的?- 為什么呈現
SortField.FIELD_SCORE? - 為什么呈現
SortField.FIELD_SCORE有時回傳正確的值,有時不回傳呢?
uj5u.com熱心網友回復:
SortField.FIELD_SCORE的用法是什么?欄位分數是如何計算的?
當你搜索包含某個詞的檔案時,每個檔案都會被分配一個 "分數":一個浮點值,通常是正值。這個值越高,匹配度就越高。具體如何計算有點復雜,而且當你有多個嵌套查詢(如布爾查詢等)時,情況會變得更糟,因為分數會與其他公式結合起來。我只想說:分數是一個數字,每個檔案都有一個值,越高越好。
SortField.FIELD_SCORE將簡單地按分數降序對檔案進行排序。
為什么現在的SortField.FIELD_SCORE有時會回傳正確的值,有時不會?
很難說。這取決于很多東西,比如你的分析器、你正在運行的確切查詢,甚至你的檔案中搜索詞的頻率。正如我所說,用于計算分數的公式很復雜。
在你的排序中,有一點很突出,那就是你是按分數和實際欄位來排序的。這不太可能有好的效果。分數通常是唯一的,所以除非你的檔案非常相似(例如,由于某種原因,所有文本欄位都是空的),否則排名靠前的檔案會有這樣的分數。 想想字母順序:如果我必須對 所以,如果你對按分數排序不感興趣(如果你不知道什么是分數,你很可能確實不感興趣),就堅持按欄位排序: 而如果你對按分數排序感興趣,那么就按分數排序: 請注意,Hibernate Search 4.1(您的檔案鏈接的版本)已經非常舊了;您應該考慮至少升級到5.11(類似的API,也很舊但仍在維護),最好是6.0(不同,但更現代的API,新的也在維護)。
標籤: 上一篇:我想通過使用Spring資料JPA在保存子物體時也保存父物體。
下一篇:地圖外鍵JPA
[5.1, 3.4, 2.6, 2.4, 2.2]/code>。他們的順序已經是 "完整的":你可以添加你想要的后續排序,順序將不會改變,因為它完全由按分數排序定義。
["area", "baby"]進行排序,"baby "的第二個字母可能是 "a",但這并不重要,因為第一個字母是 "b",它總是會在 "area "的 "a "后面。
Sort sort = new Sort(new SortField[ ] {
new SortField("field_1", SortField.STRING) 。
new SortField("field_2", SortField.STRING) 。
new SortField("field_2", SortField.Long)
});
Sort sort = new Sort(new SortField[ ] {
SortField.FIELD_SCORE
});
// Or equivalently
Sort sort = Sort.RELEVANCE; // "Relevance" means "sort by score"
