2010-02-12 2 views
6

Wenn ein Bündel von Dokumenten zu suchen, kann ich leicht die Anzahl der Dokumente finden, die meine Suchkriterien entsprechen:Wie kann ich in einer Lucene/Lucene.net-Suche die Anzahl der Treffer pro Dokument zählen?

Hits hits = Searcher.Search(query); 
int DocumentCount = hits.Length(); 

Wie kann ich die Anzahl der Treffer in den Dokumenten festzustellen? Sagen wir zum Beispiel, ich suche nach "Kongress" und ich bekomme 2 Dokumente zurück. Wie kann ich feststellen, wie oft "Kongress" in jedem Dokument vorkommt? Nehmen wir zum Beispiel an, dass "Kongress" in Dokument 1 zweimal und in Dokument 2 2 Mal vorkommt. Das Ergebnis, das ich suche, ist .

Antwort

6

Dies ist Lucene Java, sollte aber für Lucene.NET arbeiten:

List docIds = // doc ids for documents that matched the query, 
       // sorted in ascending order 

int totalFreq = 0; 
TermDocs termDocs = reader.termDocs(); 
termDocs.seek(new Term("my_field", "congress")); 
for (int id : docIds) { 
    termDocs.skipTo(id); 
    totalFreq += termDocs.freq(); 
} 
+0

@ bajafresh4life: Was ist, wenn der Satz war zwei Wörter wie „Apfelbaum“? – Keltex

+0

Soll die Anzahl der Male in jedem Dokument oder jedem einzelnen Wort angezeigt werden? – bajafresh4life

0

Dies auch Lucene Java ist. Wenn Ihre Abfrage/Suchkriterien können als SpanQuery geschrieben werden, dann können Sie etwas tun:

IndexReader indexReader = // define your index reader here 
SpanQuery spanQuery = // define your span query here 
Spans spans = spanQuery.getSpans(indexReader); 
int occurrenceCount = 0; 
while (spans.next()) { 
    occurrenceCount++; 
} 
// now occurrenceCount contains the total number of occurrences of the word/phrase/etc across all documents in the index