#.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 документов в секунду).