C# Lucene.net间歇性索引文档未出现在

C# Lucene.net间歇性索引文档未出现在,c#,indexing,lucene.net,C#,Indexing,Lucene.net,我遇到了一个问题,它在我的单元测试中断断续续地出现,我不知道为什么 单元测试本身就是将多个文档添加到一个索引中,然后尝试查询该索引以再次获取文档 因此,95%的时间它工作没有任何问题。另外5%的时间它无法从索引中检索文档 我的单元测试代码如下: [Test] public void InsertMultipleDocuments() { string indexPath = null; using (LuceneHelper target = Ge

我遇到了一个问题,它在我的单元测试中断断续续地出现,我不知道为什么

单元测试本身就是将多个文档添加到一个索引中,然后尝试查询该索引以再次获取文档

因此,95%的时间它工作没有任何问题。另外5%的时间它无法从索引中检索文档

我的单元测试代码如下:

[Test]
    public void InsertMultipleDocuments()
    {
        string indexPath = null;
        using (LuceneHelper target = GetLuceneHelper(ref indexPath))
        {
            target.InsertOrUpdate(
                    target.MakeDocument(GetDefaultSearchDocument()), 
                    target.MakeDocument(GetSecondSearchDocument()));

            var doc = target.GetDocument(_documentID.ToString()).FirstOrDefault();
            Assert.IsNotNull(doc);
            Assert.AreEqual(doc.DocumentID, _documentID.ToString());

            doc = target.GetDocument(_document2ID.ToString()).FirstOrDefault();
            Assert.IsNotNull(doc);
            Assert.AreEqual(doc.DocumentID, _document2ID.ToString());
        }

        TidyUpTempFolder(indexPath);
    }
我不会发布LuceneHelper的完整代码,但它的基本思想是,它在引用中保存一个IndexSearcher,每次将一个项写入索引时它都会关闭(因此可以使用所有最新文档再次打开它)

在收集第二个文档时,实际的单元测试通常会失败。我认为这是因为搜索者没有被关闭并看到缓存的数据,但事实并非如此

Lucene是否延迟将文档添加到索引中?我认为,一旦它将文档添加到索引中,只要您关闭任何旧的搜索索引器并打开一个新的索引器,它就会立即可用


有什么想法吗?

如何关闭用于更新索引的IndexWriter?close方法有一个重载,它使用一个布尔参数指定是否要等待合并完成。默认的合并计划程序在单独的线程中运行合并,这可能会导致您的问题

尝试按如下方式关闭编写器:

indexWriter.Close(true);
有关更多信息,请访问


顺便说一句,您使用的是Lucene.NET的哪个版本?

这听起来好像可以解决它,但是我仍然会间歇性地遇到同样的问题。事实上,我并不介意它在后台这样做,但我希望在完成后得到通知。这可能吗?我认为不调用blocking Close(true)方法就不可能知道合并何时完成。