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 для этих важных деталей. Это мне очень помогло.