У меня есть проблема, которая периодически появляется в моих модульных тестах, и я не могу понять, почему.
Сам модульный тест добавляет несколько документов в индекс, а затем пытается запросить индекс, чтобы вернуть документы обратно.
Так что 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 какие-либо задержки с добавлением документов в индекс? Я предположил, что после добавления документа в индекс он был доступен немедленно, если вы закрыли все старые поисковые индексы и открыли новый.
Есть идеи?