В Lucene / поиск Lucene.net, как я считаю количество хитов на документ?

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

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

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

6
задан Keltex 12 February 2010 в 02:46
поделиться

2 ответа

Это 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();
}
6
ответ дан 17 December 2019 в 02:28
поделиться

Это тоже 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
0
ответ дан 17 December 2019 в 02:28
поделиться