我有一个问题在我的单元测试中间歇性出现,我无法理解为什么。
单元测试本身是将多个文档添加到索引,然后尝试查询索引以再次取出文档。
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在向索引添加文档方面有任何延迟吗?我假设一旦将文档添加到索引中,只要您关闭任何旧的搜索索引器并打开一个新索引器,它就立即可用。
有什么想法吗?
答案 0 :(得分:0)
如何关闭用于更新索引的IndexWriter? close方法有一个重载,它接受一个布尔参数,指定是否要等待合并完成。默认的合并调度程序在单独的线程中运行合并,这可能会导致您的问题。
尝试这样关闭作家:
indexWriter.Close(true);
可以在Lucene.NET documentation找到更多信息。
顺便说一下,您使用的是哪个版本的Lucene.NET?