在lucene索引中搜索时,我在topDocs.scoreDocs中为某些文档获取null值.请解释一下 topDocs.scoreDocs 中[]的值
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 [ null ]
doc = 44得分= NaN [ testString ]
Arun.. 5
好吧,这种共鸣是间接的,你告诉Lucene忽略其文档分数并使用你自己的排序顺序.评分用于引入topdocs,但您选择以您指定的排序顺序引入文档,因此NAN.
如果您想在指定自己的排序顺序时强制Lucene为您提供分数,请使用另一个重载方法进行搜索:
search(Query query, Filter filter, int n, Sort sort, boolean doDocScores, boolean doMaxScore)
如果doDocScores为true,则将计算并返回每个命中的分数.如果doMaxScore为true,则将计算所有收集的匹配的最大分数.
所以你会做类似的事情:searcher.search(query,null,sizeNeeded,sort,true,true);