2011-10-11 68 views
2

我正在嘗試增強某些文檔。但他們沒有得到提振。請告訴我我錯過了什麼。謝謝!索引時使用Lucene我增強某些文檔,但他們的搜索得分仍然爲1

在我的索引代碼,我有:

if (myCondition) 
{ 
    myDocument.SetBoost(1.1f); 
} 
myIndexWriter.AddDocument(document); 

然後在我的搜索代碼,我檢索從ScoreDocs文件的集合對象到我的文檔採集和:

foreach (Lucene.Net.Documents.Document doc in myDocuments) 
    { 
     float tempboost = doc.GetBoost(); 
    } 

和我把一個斷點在foreach子句中打破tempboost不是1的情況,並且斷點永遠不會被打中。

我錯過了什麼?

非常感謝!

回答

4

從Lucene的的javadoc(Java版本,但同樣的行爲適用):

公衆持股量getBoost()

返回,在索引時間,增強因子爲 由setBoost設置(浮動)。

請注意,一旦文檔被索引,該值就不再可用 索引。在搜索時,對於檢索的文檔,此方法 總是返回1.但這並不意味着索引時的增強值集 被忽略 - 它僅與其他 索引時間因素組合並存儲在別處,以便更好地建立索引和 搜索性能。

+0

謝謝!索引時,我會增加某些文檔,但不會出現在檢索到的文檔列表的頂部。我查看了這些文檔的分數,並且不知何故,第一個檢索到的文檔的分數總是0,其餘分數的分數是NaN。然後,我看着提示,試圖弄清楚發生了什麼。 – Barka

+0

顯然我不明白索引時文檔的提升與檢索時的分數之間的關係。我認爲這些是相關的,而且我認爲我可以在我的分數中得到廣泛的分數,而不僅僅是0和NaN。如果你能對此有所瞭解,我將不勝感激。 – Barka

+0

我從來沒有經歷過Lucene的NaN分數,我還沒有在Lucene工作過一段時間。關於評分的細微差別,我推薦這個[有點冗長的文檔](http://lucene.apache.org/java/3_0_0/api/core/org/apache/lucene/search/Similarity.html),但值得一讀了解幕後發生的事情。您也可以嘗試下載Lucene源代碼,將其鏈接到您的項目而不是編譯包,然後在調試模式下運行您的代碼,但觀看運行非常複雜,因爲Lucene的代碼分爲許多合作類。 –