Сводка : я собираю идентификаторы документов всех посещений для данного поиска, используя собственный коллектор (он заполняет BitSet идентификаторами). Поиск и получение документов довольно быстро, в зависимости от моих потребностей, но когда дело доходит до получения документов с диска, все идет очень медленно. Есть ли способ оптимизировать Lucene для более быстрого сбора документов?
Подробности : я работаю над обработанным корпусом Википедии и храню каждое предложение в качестве отдельного документа. Когда я ищу «компьютер», я получаю все предложения, содержащие термин «компьютер». В настоящее время поиск в корпусе и получение всех идентификаторов документов работают за доли секунды, но получение первых 1000 документов занимает около 20 секунд. Извлечение всех документов занимает пропорционально больше времени (т. Е. Еще 20 секунд для каждой партии из 1000 документов).
Последующие поиски и выборка документов занимают гораздо меньше времени (хотя я не знаю, кто занимается кэшированием, ОС или Lucene?), Но я буду искать много разных терминов и не хочу полагаться на кэширование для меня очень важна производительность при первом поиске.
Я ищу предложения / хитрости, которые улучшат производительность извлечения документов (если это вообще возможно). Заранее спасибо!
Приложение :
Я использую Lucene 3.0.0, но я использую Jython для управления классами Lucene. Это означает, что я вызываю метод get_doc следующего класса Jython для каждого идентификатора документа, который я получил во время поиска:
class DocumentFetcher():
def __init__(self, index_name):
self._directory = FSDirectory.open(java.io.File(index_name))
self._index_reader = IndexReader.open(self._directory, True)
def get_doc(self, doc_id):
return self._index_reader.document(doc_id)
В моем индексе 50 миллионов документов.