2016-02-21 14 views
0

Что отличает между IndexWriter.Close() и IndexWriter.Commit(), когда у меня только один экземпляр indexWriter?Lucene IndexWriter.Close() vs indexWriter.Commit()

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

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

+0

Помог ли мой ответ для вас? Вам нужна дополнительная информация? –

+0

Большое вам спасибо. Ваша информация достаточно. – amir

+0

Я рад это слышать. Вы знакомы с принятием ответа? Или что-то не хватает в моем ответе, который заставляет вас не принимать его? –

ответ

1

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

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

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

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