이 코드는 Lucene.NET을 사용한 색인 생성을 테스트합니다.Lucene 색인 생성이 실행될 때마다 속도가 느려지고 느려짐
for (int i = 0; i < 10; i++)
{
var stopwatch = Stopwatch.StartNew();
string indexPath = Path.Combine("C:\\lucene\\");
var directory = FSDirectory.Open(new DirectoryInfo(indexPath));
var analyzer = new StandardAnalyzer(LuceneConfiguration.Version);
IndexWriter indexWriter = null;
try
{
indexWriter = new IndexWriter(directory, analyzer, true,
IndexWriter.MaxFieldLength.UNLIMITED);
indexWriter.DeleteAll();
for (int documentNumber = 0; documentNumber < 100; documentNumber++)
{
var document = new Document();
for (int fieldNumber = 0; fieldNumber < 10; fieldNumber++)
{
document.Add(new Field("Field" + fieldNumber, "asdf qwerty Value" + fieldNumber, Field.Store.YES,
Field.Index.ANALYZED));
}
indexWriter.AddDocument(document);
}
indexWriter.Optimize();
}
finally
{
if (indexWriter != null)
{
indexWriter.Close();
}
}
stopwatch.Stop();
Console.WriteLine("Index time: " + stopwatch.Elapsed.TotalMilliseconds);
var reader = IndexReader.Open(directory, true);
var searcher = new IndexSearcher(reader);
var parser = new QueryParser(LuceneConfiguration.Version, "Field0", analyzer);
var query = parser.Parse("asdf");
var collector = TopScoreDocCollector.create(10, true);
searcher.Search(query, collector);
Console.WriteLine("Hits: " + collector.GetTotalHits());
}
Console.ReadKey();
색인 생성이 실행될 때마다 색인 생성 속도가 느려지고 느려집니다. 색인 생성 후 검색을 건너 뛰면 느려지지 않습니다. 이것은 디버깅으로 시작할 때만 발생합니다. 디버깅하지 않고 시작하면 안됩니다.
어떻게 될 수 있습니까?
어떤 종류의 자동 커밋을하고 있습니까? 명시 적으로'.Commit()'이 보이지 않습니까? 동일한 빌드를 프로파일 링하거나 하나의 디버그 빌드를 사용하고 다른 하나의 릴리스 빌드를 사용하고 있습니까? – skarmats
indexWrite.Close()가 커밋합니다. 릴리스 또는 디버그에서 실행해도 상관 없습니다. – Allrameest
아, 디버깅으로 실행하면 속도가 느려집니다. 디버깅없이 시작하면 항상 빠릅니다. – Allrameest