2010-11-12 2 views
2

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

+0

какой размер индекса вы смотрите? в зависимости от того, что вы можете подумать об использовании Hadoop для этого, или простой анализатор индексов для сбора частот слов на карте. – anirvan

ответ

3

Предполагая, что вы работать с 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 Directory class. Это создание отличается для индексов ОЗУ и файловой системы, подробности см. В документации Lucene.

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

+0

ужасно 'TermDocs' не в lucene 5.3.1, который я использую :( –

1

с помощью Lucene 3.4

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

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

берегитесь: если вы будете использовать для чтения вы не можете использовать следующий() более того, поскольку после чтения() вы уже находитесь в конце перечисления:

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 
} 
Смежные вопросы