I am using Lucene.net to search in about 50K entities . these entities are saved in database. I have created an application witch is trying to index 100 entities in each time .
the code is very simple:
var entityList = GetEntityList(100);
foreach (var item in entityList)
Indexer.IndexEntity(item);
And This is the Indexer Class :
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();
}
}
Every thing was fine and my search speed is now good enough . but the problem is that the indexing speed is decreased . my application is indexed about 15K entities up to now and index files size is about 600MB . Now when it wants to index 100 new entities, it takes long about 24 minutes!
what is the problem? thanks in advance.
Two things stand out pretty clearly in your code:
With these two changes, I think you'll see dramatic speed ups in your indexing jobs.
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.