2011-03-31 4 views
1

이 코드는 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(); 

색인 생성이 실행될 때마다 색인 생성 속도가 느려지고 느려집니다. 색인 생성 후 검색을 건너 뛰면 느려지지 않습니다. 이것은 디버깅으로 시작할 때만 발생합니다. 디버깅하지 않고 시작하면 안됩니다.

어떻게 될 수 있습니까?

+0

어떤 종류의 자동 커밋을하고 있습니까? 명시 적으로'.Commit()'이 보이지 않습니까? 동일한 빌드를 프로파일 링하거나 하나의 디버그 빌드를 사용하고 다른 하나의 릴리스 빌드를 사용하고 있습니까? – skarmats

+1

indexWrite.Close()가 커밋합니다. 릴리스 또는 디버그에서 실행해도 상관 없습니다. – Allrameest

+0

아, 디버깅으로 실행하면 속도가 느려집니다. 디버깅없이 시작하면 항상 빠릅니다. – Allrameest

답변

1

Lucene이 인덱스 디렉토리를 자동으로 지우려고 할 때 발생하는 첫 번째 IOExceptions인지 궁금합니다. 독자/검색자가 아직 열려 있기 때문에 이러한 오류가 발생하고 삭제를 위해 세그먼트 파일을 잠급니다.

+0

나는 당신이 옳다고 생각합니다. Lucene이 디버깅 할 때 느려지는 예외를 많이 던지는 것처럼 보입니다 ... – Allrameest

관련 문제