Мы - группа студентов, которые используют Lucene.net для индексации нескольких 100 000 отпечатков музыки и сопоставления их с данными отпечатками из проанализированных песен, чтобы проверить, соответствуют ли они чему-либо, что есть в нашей базе данных.
Поскольку ежедневно выпускается большое количество новой музыки, мы стараемся обновлять наш индекс новыми данными, часто примерно на 5-8 000 отпечатков пальцев в неделю. Проблема возникает, когда мы добавляем несколько тысяч записей непосредственно в существующий индекс, так как это приводит к тому, что наш поиск сильно ухудшается или вообще не может быть найден. (Мы совершенно новички в индексации Lucene)
Чтобы это исправить, мы должны заново создать наш индекс, который является очень долгим процессом (до 18 часов). У меня вопрос, есть ли другие альтернативы, кроме воссоздания всего индекса? Мы рассмотрели возможность использования нескольких индексов и использования MultiReader, но похоже, что это только задерживает проблему?
Lucene.Net.Store.Directory directory = FSDirectory.Open (new System.IO.DirectoryInfo (luceneIndexPath));
IndexWriter iw = null;
int fingerCount = 0;
try {
iw = new IndexWriter (directory, new StandardAnalyzer (Lucene.Net.Util.Version.LUCENE_30), false, IndexWriter.MaxFieldLength.UNLIMITED);
iw.UseCompoundFile = false;
iw.SetSimilarity (new CDR.Indexer.DefaultSimilarityExtended ());
iw.MergeFactor = 10; // default = 10
iw.SetRAMBufferSizeMB (512 * 3);
Document doc = new Document ();
doc.Add (new Field ("FINGERID", "", Field.Store.YES, Field.Index.NOT_ANALYZED));
doc.Add (new Field ("SUBFINGER", "", Field.Store.NO, Field.Index.ANALYZED));
}
iw.AddDocument (doc);
iw.commit ();
iw.dispose ();
Большое спасибо за ваши соображения!