繁体   English   中英

每次Lucene索引运行时,它就会越来越慢

[英]Each time Lucene indexing is running it's getting slower and slower

此代码使用Lucene.NET测试索引。

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();

每次索引运行时,索引会变得越来越慢。 如果我在建立索引后跳过搜索,搜索速度不会变慢。 这仅在我通过调试启动它时发生。 如果我没有调试就启动它。

是什么原因造成的?

我想知道这是否是Lucene尝试自动清除索引目录时发生的IOExceptions的第一次机会。 因为您的阅读器/搜索器仍然处于打开状态,并且锁定了要删除的段文件,所以会发生这些情况。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM