2010-02-12 10 views
6

Al buscar un montón de documentos, puedo encontrar fácilmente el número de documentos que coinciden con mis criterios de búsqueda:En una búsqueda de Lucene/Lucene.net, ¿cómo cuento el número de visitas por documento?

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

¿Cómo puedo determinar el número total de accesos dentro de los documentos? Por ejemplo, digamos que busco "congreso" y recupero 2 documentos. ¿Cómo puedo obtener el número de veces que ocurre "congreso" en cada documento? Por ejemplo, digamos "congreso" aparece 2 veces en el documento # 1 y 3 veces en el documento # 2. El resultado que estoy buscando es .

Respuesta

6

Esta es Lucene Java, pero debería funcionar para 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: ¿Qué pasa si la frase era dos palabras como "manzano"? – Keltex

+0

¿Desea el número de veces que aparece la frase en cada documento o cada palabra individual? – bajafresh4life

0

Esta es Lucene Java también. Si sus criterios de búsqueda/consulta pueden ser escritos como SpanQuery, entonces usted puede hacer algo como esto:

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 
Cuestiones relacionadas