2011-08-19 36 views
2

任何人都知道爲什麼Solr的排名受到刪除(但不清除)文檔的影響?Solr刪除/優化影響排名分數

即。如果我添加一個文檔並搜索它,它的分數可能是4.7,但如果我重新添加它(即Solr刪除舊的並再次添加它...具有相同的值),則執行相同的查詢,結果得分4.5。如果我對索引進行了優化,那麼得分再次回到4.7。

我認爲這是由於當文檔已被邏輯刪除但未從索引中清除時,Solr中maxDoc和numDoc之間的區別。

這是一個錯誤?在我的情況下,它會導致問題,因爲當一個不相關的文檔(不在我的結果集中)被刪除時,排序順序變得不穩定。

這是Solr的3.2.0

-Matt

+0

我不擔心絕對值會發生變化......真正的問題是*相對值*似乎在改變,從而影響了排序... –

回答

0

這不是一個真正的錯誤,而如何Solr的工作原理默認情況下 - 如你揣刪除文檔,直到你優化實際上並沒有將其刪除,從而在那之前統計數據仍然反映了被刪除的文檔。好處是它使刪除成爲一項快速操作(優化通常是偶爾進行的)。其他一些引擎(如Xapian)確實會完全刪除文檔。

+0

我明白如何/爲什麼它沒有真正刪除文檔,但爲什麼它使用maxDoc進行idf計算?我在網上看到的每一處似乎都暗示使用了numDoc: http://lucene.apache.org/java/3_0_0/api/core/org/apache/lucene/search/DefaultSimilarity.html#idf(int,-int ) 然而,當我做了查詢,並得到它來解釋它給了我: <海峽NAME = 「LC059C4D2」> 12.179339 =(MATCH)fieldWeight(CPLNumber:LC059C4D2在143251)的產品:1.0 = TF (termFreq(CPLNumber:LC059C4D2)= 1)12.179339 = idf(docFreq = 1,maxDocs = 143270)1.0 = fieldNorm(field = CPLNumber,doc = 143251) –