Lucene создает новый файл .cfs каждый раз, когда я добавляю его в индекс

#.net-core #lucene #lucene.net

Вопрос:

Каждый раз, когда я фиксирую добавление нового документа в индекс, создается новый файл _X.cfs.

 using (StandardAnalyzer analyzer = new StandardAnalyzer(LuceneVersion.LUCENE_48))
{
   using (IndexWriter writer = new IndexWriter(Directory)
   {

      Document doc = new Document();

      doc.Add(new TextField("Id", Id.ToString(), Lucene.Net.Documents.Field.Store.YES))
      doc.Add(new TextField("Symbol", Symbol, Lucene.Net.Documents.Field.Store.NO))
      doc.Add(new TextField("Channel",  Channel, Lucene.Net.Documents.Field.Store.NO))

      writer.AddDocument(doc);
      writer.Commmit();
  }
}
   
 

У меня есть запущенный процесс, в котором будет индексироваться 1000 документов в день (в разное время). Таким образом, в моем каталоге будет 1000 новых файлов .cfs.

Каково решение этой проблемы?

Я использую Люсен.ЧИСТАЯ версия 4.8.0-beta00014

Ответ №1:

Вставка 1000 документов — это не проблема. В моем локальном окне для разработчиков я могу вставлять около 14 тысяч документов в секунду. Конечно, скорость будет сильно зависеть от размера документов и скорости машины.

Lucene хорошо управляет сегментами и периодически будет их объединять. В результате будет меньше сегментов, но больше сегментов. Вы можете облегчить жизнь Lucene и ускорить индексирование , не звоня Flush Commit или MaybeRefreshBlocking не вставляя необходимый набор документов до тех пор, пока вы не введете нужный набор документов. (Эти команды заставляют буферизованные документы записываться в новом сегменте). Но даже если вы вызываете все эти методы после каждого добавления документа в индекс, Lucene все равно будет хорошо управлять сегментами, выполняя слияние по мере необходимости. Это будет просто намного медленнее (может быть, около 20 документов в секунду).