【问题标题】:Lucene: how to get the score of a documentLucene:如何获取文档的分数
【发布时间】:2012-03-19 13:31:34
【问题描述】:

我想输出文档的分数。我为此编写的代码是:

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 我已经粘贴了所有代码,请帮我检查一下。谢谢
  • 你能把调用的结果粘贴到 IndexSearcher.explain 吗?
  • @jpountz 嗨,我已经修好了。要打印分数,我应该设置 defaultFieldSortScoring(true,true)。
  • 很高兴您解决了问题。但这意味着您正在对一个字段进行排序,而您粘贴的代码中并非如此!

标签: lucene


【解决方案1】:

除了 daulets 之外,您还必须在 indexSearcher 中启用评分:

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

我认为这就是你的意思,但这样应该更清楚:)

【讨论】:

  • 在最近的版本中不可用
  • 你救了我的命
【解决方案2】:
        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);
        }

试试这个。

【讨论】:

    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-04
      • 1970-01-01
      • 2012-02-14
      • 1970-01-01
      • 2010-11-20
      • 2011-03-19
      相关资源
      最近更新 更多