2012-03-19 54 views
5

我想输出文档的分数。我写的代码是这样的:Lucene:如何获得文档的分数

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。我想知道如何获得文件的分数。

+0

这是正确的方式得到文件的分数。你的查询是什么样的? – jpountz 2012-03-19 13:43:04

+0

@jpountz我粘贴了所有代码,请帮我检查一下。谢谢 – remy 2012-03-19 13:53:35

+0

您可以将调用的结果粘贴到IndexSearcher.explain吗? – jpountz 2012-03-19 14:28:58

回答

4
 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(真,真)

11

附加到daulets的answere您必须启用在IndexSearcher的得分:

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

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

+1

感谢非常有帮助 – Steve 2014-12-18 17:20:43

+0

它在最近的版本中不可用 – 2017-03-03 13:45:30

相关问题