2011-03-21 53 views
8

我需要0和1如何規範化Lucene分數?

例如,隨機查詢將返回以下的分數之間的標準化得分的Lucene ...

8.864665 
2.792687 
2.792687 
2.792687 
2.792687 
0.49009037 
0.33730242 
0.33730242 
0.33730242 
0.33730242 

什麼是最大的成績? 10.0?

謝謝

回答

8

你可以把所有的得分與最高分獲得0和1之間

得分不過,請注意,歸一化等級應採用比較單一的結果僅查詢。比較來自2個不同查詢的結果的分數(正常化或不正確)是不正確的。

+0

@ nikhil500真的嗎?所以如果我有一堆查詢,我怎麼能看到哪些表現更好? – aneuryzm 2011-03-21 16:01:56

+0

請詳細說明如何(以及爲什麼)要比較多個查詢的結果。不同查詢的得分並不能直接比較,但根據您的具體問題,我們可能會提出一些解決方案。 – nikhil500 2011-03-22 01:45:00

+0

@ nikhil500我的問題是,對於每個查詢,我必須結合多個分數(來自其他軟件),除了Lucene分數以外,它們都被標準化(0到1之間)。 – aneuryzm 2011-03-22 05:55:53

5

有沒有好的標準方法來標準化與lucene分數。閱讀此:ScoresAsPercentages和這explanation

在您的情況下,最高分是第一個結果的分數,如果結果按分數排序。但是對於其他查詢,這個分數將會不同。

又見how-do-i-normalise-a-solr-lucene-score

+0

我的問題是,我對每個查詢結果都有lucene分數+其他分數(與Lucene無關)。其他分數都在1和0之間歸一化。如果我沒有用相同的方法對Lucene分數進行歸一化處理,我將得到不平衡的結果... – aneuryzm 2011-03-21 16:08:09

+0

看看http://lucene.apache.org/java /2_9_2/api/core/org/apache/lucene/search/Collector.html類。您可能必須編寫自己的收集器。也許使用你的其他分數或組合。 – morja 2011-03-21 16:21:13

0

定期正常化只會幫助你比較查詢之間的得分分佈(和他們的檢索列表) 。 您不能簡單地將分數標準化以比較查詢之間的性能。 想想所有檢索到的文檔高度相關並且接收相同(高分)的查詢,並且在另一個查詢中檢索到的列表包含大麥相關文檔(再次,具有相同分數) - 現在,不管每個查詢你做出的標準化 - 標準化的分數將是相同的。

您需要考慮可以將所有分數都提高到相同水平的交叉查詢因子。

例如 - 也許計算查詢和整個索引,並使用與文檔得分

0

如果要比較兩個或多個查詢沿劃線某種程度上的相似,我發現了一個解決方法。 您可以使用LevenstheinDistanceLuceneLevenstheinDistance(Damerau)類將您的得分最高的文檔與您的queryterm進行比較,以獲得您的queryterm與結果之間的距離。結果是它們之間的相似性。爲每個要比較的查詢執行此操作。現在您有了一個工具來使用querytherm的相似性和最高結果來比較您的查詢。您現在可以選擇具有最高相似度的查詢,並將其用於下一個適當的操作。

//Damerau LevenstheinDistance 
    LuceneLevenshteinDistance d = new LuceneLevenshteinDistance(); 

    similiarity = d.getDistance(queryterm, yourResult);