我有一個使用lucene進行搜索的應用程序。搜索空間是成千上萬。搜索這些數千人,我只得到了幾個結果,大約20(這是可以和預期的)。但是,當我將搜索空間縮小到僅僅那20個條目時(即,我只索引那20個條目並忽略其他所有內容...以便開發將更容易),我得到相同的20個結果,但是以不同的順序(和得分)。使用不同搜索空間大小的不同lucene搜索結果
我試圖通過域#setOmitNorms(true)禁用規範因素,但我仍然得到不同的結果?
什麼可能導致得分差異?
感謝
我有一個使用lucene進行搜索的應用程序。搜索空間是成千上萬。搜索這些數千人,我只得到了幾個結果,大約20(這是可以和預期的)。但是,當我將搜索空間縮小到僅僅那20個條目時(即,我只索引那20個條目並忽略其他所有內容...以便開發將更容易),我得到相同的20個結果,但是以不同的順序(和得分)。使用不同搜索空間大小的不同lucene搜索結果
我試圖通過域#setOmitNorms(true)禁用規範因素,但我仍然得到不同的結果?
什麼可能導致得分差異?
感謝
請參閱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);
}
得分取決於索引中的所有文件:
在一般情況下,後面的 向量空間模型(VSM)的想法是比較 次的查詢字詞出現在 文檔相對於 時間段中出現的所有 文檔中出現的次數,該文檔與查詢關聯度越高。
我不知道我理解這一點。所以如果我在搜索空間搜索一個名字爲'Mark'的人,我會得到'Mark Anthony','Markos'和'Mark'。但是,如果我將搜索空間限制爲僅限3個(僅限於索引3),我會得到'Mark','Mark Anthony'和'Markos'。鑑於相同的相關文件,但不同的「噪音」文件,他們的分類將如何改變? – 2009-11-17 02:18:12
對不起,我也不是專家。你有沒有看過http://lucene.apache.org/java/2_4_0/api/org/apache/lucene/search/Similarity.html? – sfussenegger 2009-11-17 08:24:39
赦免,但我在哪裏可以得到解釋()的int(第二個參數)? – 2009-11-17 02:01:02
請參閱我的編輯示例。 – 2009-11-17 07:50:18
我沒有多少時間回到我的問題上,但這個建議似乎指向了正確的方向。謝謝。 – 2009-11-30 03:56:50