В поиске Lucene / Lucene.net как подсчитать количество обращений на документ? - PullRequest
6 голосов
/ 12 февраля 2010

При поиске в пачке документов я могу легко найти количество документов, которые соответствуют моим критериям поиска:

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

Как определить общее количество обращений в документах? Например, допустим, я ищу «конгресс» и получаю 2 документа обратно. Как узнать, сколько раз «конгресс» встречается в каждом документе? Например, скажем, «конгресс» встречается 2 раза в документе № 1 и 3 раза в документе № 2. Результат, который я ищу: 5 .

Ответы [ 2 ]

6 голосов
/ 12 февраля 2010

Это Lucene Java, но должно работать для 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 голосов
/ 17 февраля 2010

Это также Lucene Java. Если ваш запрос / критерии поиска можно записать как SpanQuery , то вы можете сделать что-то вроде этого:

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
...