Lucene:如何获取文档的评分

7
我想输出文档的分数。我编写的代码如下:
```python print(score) ```
请注意,此处的“score”需要替换为您实际使用的变量名。
IndexReader reader = IndexReader.open(FSDirectory.open(indexDir));
IndexSearcher searcher = new IndexSearcher(reader);
Analyzer analyzer = new IKAnalyzer();
QueryParser parser = new QueryParser(Version.LUCENE_31, "title",
            analyzer);
Query q = null;
q = parser.parse("MacOS");
TopDocs docs = searcher.search(q, 10);
ScoreDoc[] hits = docs.scoreDocs;
for(int i=0;i<hits.length;++i){
  System.out.println(hits[i].score);
}

但输出结果为NaN。我想知道如何获取文档的得分。

这是获取文档分数的正确方法。你的查询是什么样子? - jpountz
@jpountz 我已经复制粘贴了所有的代码,请帮我检查一下。谢谢。 - remy
你能粘贴一下对IndexSearcher.explain调用的结果吗? - jpountz
@jpountz 你好,我已经修复了。为了打印分数,我应该设置defaultFieldSortScoring(true,true)。 - remy
很高兴你解决了问题。但这意味着你在一个字段上进行了排序,而在你贴出的代码中并没有这种情况! - jpountz
3个回答

12

除了使用daulets答案之外,您还需要在indexSearcher中启用评分:

...
searcher.setDefaultFieldSortScoring(true, true);
...

我认为这就是你的意思,Remy,但这样会更清晰 :)


它在最近的版本中不可用。 - MohammadHossein R

6
        IndexReader reader = IndexReader.open(FSDirectory.open(indexDir));
        IndexSearcher searcher = new IndexSearcher(reader);
        Analyzer analyzer = new IKAnalyzer();
        QueryParser parser = new QueryParser(Version.LUCENE_31, "title", analyzer);
        Query q = null;
        q = parser.parse("MacOS");
        TopDocs docs = searcher.search(q, 10);
        ScoreDoc[] filterScoreDosArray = docs.topDocs().scoreDocs;
        for (int i = 0; i < filterScoreDosArray.length; ++i) {
            int docId = filterScoreDosArray[i].doc;
            Document d = is.doc(docId);
            System.out.println((i + 1) + ". " + d.get("docno")+" Score: "+ filterScoreDosArray[i].score);
        }

试一下这个。


0

要打印分数,我应该设置defaultFieldSortScoring(true,true)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接