2012-03-19 16 views
5

Chcę wyprowadzić wynik dokumentów. Kod, który piszę, jest następujący:Lucene: jak uzyskać wynik dokumentu

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); 
} 

, ale wynikiem jest NaN. Chcę wiedzieć, jak uzyskać wynik dokumentu.

+0

To jest właściwa droga aby uzyskać wynik dokumentu. Jak wygląda twoje zapytanie? – jpountz

+0

@jpountz Wkleiłem cały kod, pomóż mi to sprawdzić. Dziękuję – remy

+0

Czy możesz wkleić wynik połączenia z IndexSearcher.explain? – jpountz

Odpowiedz

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); 
     } 

spróbować.

0

Aby wydrukować wynik należy ustawić defaultFieldSortScoring (true, true)

11

dodatkowy do daulets answere trzeba włączyć punktacji w indexSearcher:

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

myślę, to co masz na myśli Remy, ale sposób, w jaki powinny być jaśniejsze :)

+1

dziękuję bardzo pomocne – Steve

+0

Nie jest dostępny w najnowszych wersjach –