在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 ]
答案 0 :(得分: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);