Вы должны сделать так, чтобы получить наилучшую производительность. на моей машине я индексирую 1000 документов за 1 секунду
1) Вы должны повторно использовать (Документ, Поле), не создавая каждый раз, когда вы добавляете такой документ
private static void IndexingThread(object contextObj)
{
Range<int> range = (Range<int>)contextObj;
Document newDoc = new Document();
newDoc.Add(new Field("title", "", Field.Store.NO, Field.Index.ANALYZED));
newDoc.Add(new Field("body", "", Field.Store.NO, Field.Index.ANALYZED));
newDoc.Add(new Field("newsdate", "", Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));
newDoc.Add(new Field("id", "", Field.Store.YES, Field.Index.NOT_ANALYZED_NO_NORMS));
for (int counter = range.Start; counter <= range.End; counter++)
{
newDoc.GetField("title").SetValue(Entities[counter].Title);
newDoc.GetField("body").SetValue(Entities[counter].Body);
newDoc.GetField("newsdate").SetValue(Entities[counter].NewsDate);
newDoc.GetField("id").SetValue(Entities[counter].ID.ToString());
writer.AddDocument(newDoc);
}
}
После этого вы можете использовать многопоточность и разбивать большую коллекцию на более мелкие и использовать приведенный выше код для каждого раздела
например, если у вас есть 10 000 документов, вы можете создать 10 Thread с помощью ThreadPool и направить каждый раздел в
одна нить для индексации
Тогда вы получите лучшую производительность.