2010-02-12 14 views
6

Durante la ricerca di un mucchio di documenti, posso facilmente trovare il numero di documenti che soddisfano i miei criteri di ricerca:In una ricerca Lucene/Lucene.net, come faccio a contare il numero di visite per documento?

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

Come faccio a determinare il numero totale di visite all'interno dei documenti? Ad esempio, supponiamo di cercare "congresso" e ottengo 2 documenti indietro. Come posso ottenere il numero di volte in cui "congresso" si verifica in ogni documento? Ad esempio, diciamo che "congresso" si verifica 2 volte nel documento n. 1 e 3 volte nel documento n. Il risultato che sto cercando è .

risposta

6

Questo è Lucene Java, ma dovrebbe funzionare per Lucene.NET:

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: Che dire se la frase era di due parole come "melo"? – Keltex

+0

Vuoi il numero di volte in cui la frase appare in ciascun documento o in ogni singola parola? – bajafresh4life

0

Questo è Lucene Java anche. Se la query/criteri di ricerca possono essere scritti come SpanQuery, allora si può fare qualcosa di simile:

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 
Problemi correlati