Я использую Lucene.net для поиска в 50K сущностях . эти объекты сохраняются в базе данных. Я создал приложение, которое пытается индексировать 100 объектов каждый раз .
код очень прост:
var entityList = GetEntityList(100);
foreach (var item in entityList)
Indexer.IndexEntity(item);
А это класс индексатора:
public class Indexer {
public void IndexEntity(Entity item)
{
IndexWriter writer;
string path = ConfigurationManager.AppSettings["SearchIndexPath"];
FSDirectory directory = FSDirectory.Open(new DirectoryInfo(path));
Analyzer analyzer = new StandardAnalyzer(Version.LUCENE_29);
if (Directory.GetFiles(path).Length > 0)
writer = new IndexWriter(directory, analyzer, false, IndexWriter.MaxFieldLength.UNLIMITED);
else
writer = new IndexWriter(directory, analyzer, true, IndexWriter.MaxFieldLength.UNLIMITED);
Document document = new Document();
document.Add(new Field("id", item.Id.ToString(), Field.Store.YES, Field.Index.NO, Field.TermVector.NO));
document.Add(new Field("category", item.Category.Id.ToString(), Field.Store.YES, Field.Index.NO, Field.TermVector.NO));
document.Add(new Field("location", item.Location.Id.ToString(), Field.Store.YES, Field.Index.NO, Field.TermVector.NO));
document.Add(new Field("point", item.Point.ToString(), Field.Store.YES, Field.Index.NO, Field.TermVector.NO));
document.Add(new Field("picture", item.PictureUrl, Field.Store.YES, Field.Index.NO, Field.TermVector.NO));
document.Add(new Field("creationdate", item.CreationDate.ToString(), Field.Store.YES, Field.Index.NO, Field.TermVector.NO));
document.Add(new Field("title", item.Title, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES));
document.Add(new Field("body", item.Body, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES));
string str2 = string.Empty;
foreach (Tag tag in item.Tags)
{
if (!string.IsNullOrEmpty(str2))
{
str2 = str2 + "-";
}
str2 = str2 + tag.DisplayName;
}
document.Add(new Field("tags", str2, Field.Store.YES, Field.Index.ANALYZED, Field.TermVector.YES));
writer.AddDocument(document);
writer.Optimize();
writer.Close();
}
}
Все было хорошо, и моя скорость поиска теперь достаточно хороша . но проблема в том, что скорость индексации уменьшается . мое приложение до сих пор индексирует около 15 тысяч объектов, а размер файлов индекса составляет около 600 МБ . Теперь, когда он хочет проиндексировать 100 новых сущностей, это занимает много времени 24 минут!
в чем проблема? заранее спасибо.