在排序时解释lucene中的得分

rrs*_*rsk 1 sorting lucene search full-text-search scoring

在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]);
Run Code Online (Sandbox Code Playgroud)

输出:

doc = 2得分= NaN [ null ]

doc = 44得分= NaN [ testString ]

Aru*_*run 5

好吧,这种共鸣是间接的,你告诉Lucene忽略其文档分数并使用你自己的排序顺序.评分用于引入topdocs,但您选择以您指定的排序顺序引入文档,因此NAN.

如果您想在指定自己的排序顺序时强制Lucene为您提供分数,请使用另一个重载方法进行搜索:

search(Query query, Filter filter, int n,
                             Sort sort, boolean doDocScores, boolean doMaxScore)
Run Code Online (Sandbox Code Playgroud)

如果doDocScores为true,则将计算并返回每个命中的分数.如果doMaxScore为true,则将计算所有收集的匹配的最大分数.

所以你会做类似的事情:searcher.search(query,null,sizeNeeded,sort,true,true);