Получить термины частоты в Lucene - PullRequest
6 голосов
/ 20 марта 2009

Существует ли быстрый и простой способ получения частотных терминов из индекса Lucene без использования класса TermVectorFrequencies, поскольку для больших коллекций это занимает очень много времени?

Я имею в виду, есть ли что-то вроде TermEnum, которое имеет не только частоту документа, но и частоту термина?

UPDATE: Использование TermDocs слишком медленное.

Ответы [ 3 ]

8 голосов
/ 20 марта 2009

Используйте TermDocs, чтобы получить частоту термина для данного документа. Как и периодичность документа, вы получаете термин документы из IndexReader, используя интересующий вас термин.


Вы не найдете более быстрый метод, чем TermDocs, не потеряв при этом общности. TermDocs читает непосредственно из файла ".frq" в сегменте индекса, где частота каждого термина указана в порядке документа.

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

Ваш следующий шаг может быть дополнительной обработкой для создания еще более специализированной файловой структуры, которая исключает SkipData. Лично я бы искал лучший алгоритм для достижения своей цели или обеспечил бы лучшее аппаратное обеспечение - много памяти, либо для хранения RAMDirectory, либо для предоставления ОС для использования в собственной системе кэширования файлов.

2 голосов
/ 15 мая 2011

Магистральная версия Lucene (в конечном итоге будет 4.0) теперь предоставляет totalTermFreq () для каждого термина из TermsEnum. Это общее количество раз, когда этот термин встречался во всем контенте (но, как и docFreq, не учитывает удаления).

1 голос
/ 20 марта 2009

TermDocs дает TF данного термина в каждом документе, который содержит термин. Вы можете получить DF, просматривая каждую пару <документ, частота> и подсчитывая количество пар, хотя TermEnums должен быть быстрее. IndexReader имеет метод termDocs (Term) , который возвращает TermDocs для данного Term и индекса.

...