Подсчет частоты слова в люцене - PullRequest
3 голосов
/ 12 ноября 2010

Может ли кто-нибудь помочь мне найти частоту слов во всем люценовом индексе
например, если в документе A есть 3 слова (B), а в документе C их 2, я бы хотел, чтобы метод возвращал 5, показывая частоту слова (B) во всем люценовом индексе

Ответы [ 3 ]

3 голосов
/ 12 ноября 2010

Предполагается, что вы работаете с Lucene 3.x:

IndexReader ir = IndexReader.open(dir); 
TermDocs termDocs = ir.termDocs(new Term("your_field", "your_word"));
int count = 0;
while (termDocs.next()) {
   count += termDocs.freq();
}

Некоторые комментарии:

dir является экземпляром Lucene Класс каталога .Его создание отличается для индексов ОЗУ и файловой системы, подробности см. В документации Lucene.

"your_filed" является полем для поиска термина.Если у вас есть несколько полей, вы можете запустить процедуру для всех из них или, альтернативно, при индексации ваших файлов вы можете создать специальное поле (например, «_content») и сохранить там объединенные значения всех других полей.

1 голос
/ 17 июля 2013

используя lucene 3.4

простой способ получить счет, но вам нужно два массива: - /

int[] docs = new int[1000];
int[] freqs = new int[1000];
int count = indexReader.termDocs(term).read(docs, freqs);

будьте осторожны: если вы будете использовать для чтения, вы не сможете использоватьnext () больше, потому что после read () вы уже в конце перечисления:

int[] docs = new int[1000];
int[] freqs = new int[1000];
TermDocs td = indexReader.termDocs(term);
int count = td.read(docs, freqs);
while (td.next()){ // always false, already at the end of the enumartion
}
...