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