2013-12-12 22 views
1

在lucene索引中搜索時,我在topDocs.scoreDocs中獲取了一些文檔的空值。 請解釋我關於在[]值在topDocs.scoreDocs解釋在包含排序時在lucene中的評分

SortField sortFieldObj = new SortField(sortField, SortField.STRING, sortOrder); 
Sort sort = new Sort(sortFieldObj); 
TopDocs topDocs = searcher.search(query, null, sizeNeeded, sort); 
Document docNew = searcher.doc(topDocs.scoreDocs[i].doc); 
System.out.println(topDocs.scoreDocs[i]); 

輸出:

DOC = 2得分= NaN的[]

DOC = 44得分= NaN [testString]

回答

4

那麼,這個共振是間接的,你告訴Lucene忽略它的文檔分數並使用你自己的排序順序。評分是用來帶給topdocs的,但是你選擇按照你指定的排序順序帶來文檔,因此是NAN。

如果要強制Lucene的,當你指定自己的排序順序使用其他重載的方法搜索給你的分數:

search(Query query, Filter filter, int n, 
          Sort sort, boolean doDocScores, boolean doMaxScore) 

如果doDocScores爲真,那麼每個命中將比分becomputed並返回。 如果doMaxScore爲true,則會計算所有收集的匹配的最高分數。所以你會做類似的事情:searcher.search(query,null,sizeNeeded,sort,true,true);

+0

感謝您的評論Arun..But我的問題是關於null內的[]和獲取字段的值在[]。我已經強調了現在的問題 – rrsk

+0

當涉及到自己的排序順序時,scoreDocs是什麼意思 – rrsk