2009-11-16 99 views
2

我有一個使用lucene進行搜索的應用程序。搜索空間是成千上萬。搜索這些數千人,我只得到了幾個結果,大約20(這是可以和預期的)。但是,當我將搜索空間縮小到僅僅那20個條目時(即,我只索引那20個條目並忽略其他所有內容...以便開發將更容易),我得到相同的20個結果,但是以不同的順序(和得分)。使用不同搜索空間大小的不同lucene搜索結果

我試圖通過域#setOmitNorms(true)禁用規範因素,但我仍然得到不同的結果?

什麼可能導致得分差異?

感謝

回答

5

請參閱Lucene的Similarity API得分文檔。我敢打賭,這兩種情況之間的idf差異(numDocs和docFreq都不同)。爲了確切知道,請使用explain()函數來調試分數。

編輯:充分解釋的代碼段:

TopDocs hits = searcher.search(query, searchFilter, max); 
ScoreDoc[] scoreDocs = hits.scoreDocs; 
for (ScoreDoc scoreDoc : scoreDocs) { 
    String explanation = searcher.explain(query, scoreDoc.doc).toString(); 
    Log.debug(explanation); 
} 
+0

赦免,但我在哪裏可以得到解釋()的int(第二個參數)? – 2009-11-17 02:01:02

+0

請參閱我的編輯示例。 – 2009-11-17 07:50:18

+0

我沒有多少時間回到我的問題上,但這個建議似乎指向了正確的方向。謝謝。 – 2009-11-30 03:56:50

2

得分取決於索引中的所有文件:

在一般情況下,後面的 向量空間模型(VSM)的想法是比較 次的查詢字詞出現在 文檔相對於 時間段中出現的所有 文檔中出現的次數,該文檔與查詢關聯度越高。

來源:Apache Lucene - Scoring

+0

我不知道我理解這一點。所以如果我在搜索空間搜索一個名字爲'Mark'的人,我會得到'Mark Anthony','Markos'和'Mark'。但是,如果我將搜索空間限制爲僅限3個(僅限於索引3),我會得到'Mark','Mark Anthony'和'Markos'。鑑於相同的相關文件,但不同的「噪音」文件,他們的分類將如何改變? – 2009-11-17 02:18:12

+0

對不起,我也不是專家。你有沒有看過http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/Similarity.html? – sfussenegger 2009-11-17 08:24:39