Мне нужно проиндексировать около 10 ГБ данных. Каждый из моих «документов» довольно маленький, представьте основную информацию о продукте, около 20 полей данных, большинство всего несколько слов. Индексируется только 1 столбец, остальные сохраняются. Я собираю данные из текстовых файлов, так что эта часть довольно быстрая.
Текущая скорость индексации составляет всего около 40 МБ в час. Я слышал, что другие люди говорят, что они достигли в 100 раз быстрее, чем это. Для небольших файлов (около 20 МБ) индексация идет довольно быстро (5 минут). Тем не менее, когда он у меня проходит по всем моим файлам данных (около 50 файлов общим объемом 10 ГБ), со временем рост индекса, похоже, сильно замедляется. Любые идеи о том, как я могу ускорить индексацию, или какова оптимальная скорость индексации?
Кстати, я заметил, что API в порту .Net, похоже, не содержит все те же методы, что и оригинал в Java ...
Обновление - вот фрагменты кода C # для индексирования:
Сначала я все настроил:
directory = FSDirectory.GetDirectory(@txtIndexFolder.Text, true);
iwriter = new IndexWriter(directory, analyzer, true);
iwriter.SetMaxFieldLength(25000);
iwriter.SetMergeFactor(1000);
iwriter.SetMaxBufferedDocs(Convert.ToInt16(txtBuffer.Text));
Затем прочитайте из файла данных с разделителями табуляции:
using (System.IO.TextReader tr = System.IO.File.OpenText(File))
{
string line;
while ((line = tr.ReadLine()) != null)
{
string[] items = line.Split('\t');
Затем создайте поля и добавьте документ в индекс:
fldName = new Field("Name", items[4], Field.Store.YES, Field.Index.NO);
doc.Add(fldName);
fldUPC = new Field("UPC", items[10], Field.Store.YES, Field.Index.NO);
doc.Add(fldUPC);
string Contents = items[4] + " " + items[5] + " " + items[9] + " " + items[10] + " " + items[11] + " " + items[23] + " " + items[24];
fldContents = new Field("Contents", Contents, Field.Store.NO, Field.Index.TOKENIZED);
doc.Add(fldContents);
...
iwriter.AddDocument(doc);
После завершения индексации:
iwriter.Optimize();
iwriter.Close();