【问题标题】:Explain scoring in lucene while sorting involved在涉及排序时解释 lucene 中的评分
【发布时间】:2013-12-30 17:27:47
【问题描述】:

在 lucene 索引中搜索时,我在 topDocs.scoreDocs 中获得了一些文档的空值。 请解释一下 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 score=NaN[null]

doc=44 score=NaN[testString]

【问题讨论】:

    标签: sorting search lucene full-text-search scoring


    【解决方案1】:

    嗯,原因是您间接告诉 Lucene 忽略其文档分数并使用您自己的排序顺序。评分用于引入 topdocs,但您选择按照您指定的排序顺序引入文档,因此是 NAN。

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

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

    如果 doDocScores 为真,那么每次点击的分数将被计算并返回。 如果 doMaxScore 为 true,则将计算所有收集到的命中的最大分数。

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

    【讨论】:

    • 感谢您的评论 Arun..但我的问题是关于 [] 内的 null 和 [] 内获取字段的值。我现在已经强调了这个问题
    • 当涉及到自己的排序顺序时,还有 scoreDocs 的含义
    猜你喜欢
    • 2016-02-08
    • 2012-06-23
    • 2011-09-23
    • 1970-01-01
    • 1970-01-01
    • 2015-09-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多