2010-02-12 7 views
6

Lors de la recherche d'un tas de documents, je peux facilement trouver le nombre de documents qui correspondent à mes critères de recherche:Dans une recherche Lucene/Lucene.net, comment compter le nombre de visites par document?

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

Comment puis-je déterminer le nombre total de visites dans les documents? Par exemple, disons que je recherche "congrès" et que je récupère deux documents. Comment puis-je obtenir le nombre de fois que "congrès" se produit dans chaque document? Par exemple, disons que "congrès" se produit deux fois dans le document n ° 1 et trois fois dans le document n ° 2. Le résultat que je recherche est .

Répondre

6

C'est Lucene Java, mais doit travailler pour 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'en est-il si l'expression était deux mots comme « pommier »? – Keltex

+0

Voulez-vous le nombre de fois que la phrase apparaît dans chaque document ou chaque mot individuel? – bajafresh4life

0

C'est Lucene Java aussi. Si votre requête/critères de recherche peuvent être écrits comme SpanQuery, alors vous pouvez faire quelque chose comme ceci:

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