2010-02-12 8 views
6

Podczas poszukiwania kilka dokumentów, można łatwo znaleźć liczbę dokumentów, które pasują do moich kryteriów:W wyszukiwaniu Lucene/Lucene.net, jak policzyć liczbę uderzeń na dokument?

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

Jak określić całkowitą liczbę trafień w dokumentach? Na przykład, powiedzmy, że szukam "kongresu" i otrzymuję 2 dokumenty z powrotem. Jak mogę uzyskać liczbę przypadków "kongresu" w każdym dokumencie? Na przykład powiedzmy "kongres" występuje 2 razy w dokumencie nr 1 i 3 razy w dokumencie nr 2. Rezultat, którego szukam, to .

Odpowiedz

6

To Lucene Java, ale powinien działać na 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: A co jeśli zdanie było dwa słowa takie jak „jabłoń”? – Keltex

+0

Czy chcesz, aby # razy wyrażenie pojawiło się w każdym dokumencie lub w każdym pojedynczym słowie? – bajafresh4life

0

Jest to również Java Lucene. Jeśli zapytanie/kryteria wyszukiwania mogą być zapisane jako SpanQuery, to można zrobić coś takiego:

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