2013-05-28 16 views
5

我對lucene評分策略有點困惑。我知道,Lucene的得分公式是這樣的:Lucene評分:queryNorm在什麼情況下使用?

score(q,d) = coord(q,d) x queryNorm(q) X SUM <t_in_q> (tf(t_in_d) x idf(t)^2 x t.getBoost() x norm(t,d)) 

我理解這個公式中的每個組件除了queryNorm(Q)。正如官方文件解釋,

queryNorm(Q)是用於 查詢可比性之間做出成績歸一化因子。這個因素並不影響文檔排名 (因爲所有排名文檔都乘以相同因子),但 只是試圖使得來自不同查詢的分數(或甚至不同的索引)具有可比性。

爲什麼我需要比較不同查詢之間的分數?換句話說,你可以給一個的例子來顯示在哪個上下文中queryNorm(q)有用嗎?

回答

5

好問題,我自己想過這個。根據this ScoresAsPercentages argument,嘗試比較不同的查詢或索引分數,甚至在不同的時間在相同的查詢和索引上的分數,這是一個壞主意,我同意。

我的理解是,儘管queryNorm確實不會使它們嚴格可比,但它確實有幫助。與缺省queryNorm相比,它們更接近於沒有。

我想它也可以讓人們編寫自己的相似度,並使用這個調用來創建規範化的,可比較的分數,使用在他們的特定情況下工作的算法。

已有一些discussion on dropping it,您可能會感興趣。

+0

這是一個有趣的線索。我仍然在爲普通用戶提供對queryNorm更多控制的工作,這對搜索工作沒有任何壞處。但是,因爲它是以重量計算的,所以擔心的計算成本很小。 – Denzel

+0

所以回到我的問題,跨越查詢比較分數似乎更多地在機器學習人員,如文檔聚類,並很少出現在常見的搜索工作,對嗎? – Denzel

+0

有策略可以使查詢具有可比性,而不必去機器學習(例如,參見[餘弦相似度](http://en.wikipedia.org/wiki/Cosine_similarity))。在Lucene中,它是可以避免的。用於比較不同查詢之間分數的解決方案是重新考慮您的要求。 – femtoRgon

0

我知道問題是舊的,但我有一個類似的問題。 queryNorm在所有搜索結果中不相同的原因是文檔可能位於不同的分片中,並且queryNorm只在同一分片內保持不變。

從我的理解這個問題可以通過兩種方式來解決:

  • 自然,當有大量的數據

  • 設置碎片的數量爲1職高這有後果表演。

    { 「設置」:{ 「number_of_shards」:1}}

http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/relevance-is-broken.html

相關問題