Lucene IndexWriter.Close() против indexWriter.Commit()

Чем отличается IndexWriter.Close() а такжеIndexWriter.Commit() когда я хава только один случай indexWriter?

Примечание. Данные, которые я собираюсь сделать индексом, очень велики, поэтому я не могу закрыть среду выполнения IndexWriter.

Примечание. Я хочу выполнять поиск в документах, когда данные индексируются одновременно.

1 ответ

Решение

Commit() фиксирует ожидающие, буферизованные изменения в индексе (который затем можно найти с помощью IndexReader()). Затем IndexWriter можно продолжать использовать для дополнительных изменений. Close() также выполняет Commit(), но дополнительно закрывает IndexWriter. Обратите внимание, что IndexWriter реализует IDisposable (), и я рекомендую использовать его.

По вашей первой заметке, если вы имеете в виду, что есть много документов для индексации, это нормально. Вы можете использовать один и тот же IndexWriter для многих документов, не закрывая его. Просто зациклите сколько угодно документов, которые вы хотите проиндексировать в одном и том же IndexWriter с помощью оператора ().

Что касается вашей второй заметки, вы должны выполнить commit () (или close ()), прежде чем ваши IndexWriter () будут видны IndexReader (). Вы всегда можете выполнить поиск с помощью IndexReader (), но он будет видеть только тот индекс, который был со времени последнего IndexWriter.Commit().

Я рекомендую Lucene In Action для этих важных деталей. Это мне очень помогло.

Другие вопросы по тегам