2013-03-25 55 views
2

我一直在尋找一個類似的問題,但似乎沒有任何幫助。在lucene中對提升結果進行排序

我想排序我的查詢結果,但保持升壓順序。

例如,我製作了一個orQuery,其中3個查詢在Occur.SHOULD之內,並且提升了2.0,1.0和0.2。然後,當我進行排序時,我希望boost 2.0的結果保留在頂部,但排序,然後boost 1.0的結果也排序,最後查詢(0.2)的結果也排序。

您可以將結果想象爲三組排序結果。

有什麼我可以使用???

+0

看看這個文檔https://lucene.apache。組織/核心/ old_versioned_docs /版本/ 3_0_3/API /所有/組織/阿帕奇/ Lucene的/搜索/ Sort.html – 2013-03-25 15:40:46

回答

1

我看到一對夫婦的方式去了解這一點:

- 請在提升巨大的差異。

如果您在查詢中應用的提升因素足夠大,它們應該覆蓋每個其他影響分數的因素。所以,而不是0.2,1.0和2.0,你可以嘗試0.000001,1.0和1000000,以便嘗試。試驗一下,直到你得到可用的東西。然後,根據相關性(Sort.RELEVANCE)進行排序,因爲它是默認值,然後您不僅可以得到您想要的排序,還可以在這些子組中保留所有其他有用的評分方面。

- 實際應用通過查詢升壓

排序這是你需要採取的提振因素嚴格排序的選項,其次,在一個單一的查詢的一些其他類型的參數。

Lucene的Sort不給你施加的一個術語(有很好的理由增強因子的直接可見,這是一個有點古怪的事情要做。提升是爲了影響分數,不是得分)。它最接近你的是按照相關性排序,這當然是其他許多事情的因素。

如果您需要獲取原始提升係數,則需要覆蓋Similarity

有三個提升要考慮:

  • 查詢提升:應用作爲查詢的一部分,這將被傳遞到Similarity.computeWeight
  • 場和文件提升:在索引時應用相結合,存儲在索引中,並結合「長度規範」因素。

你似乎有興趣獲得的唯一提升是查詢級別提升,這應該是最容易處理的。您可以修改TFIDFSimilarity,也可以從頭開始創建[相似性]的子類。無論採用哪種方式,您都希望將大部分邏輯刪除,然後返回查詢提升。

相關問題