Каков правильный шаблон использования для LINQ для Lucene's Index<T>
?
Он реализует IDisposible
, поэтому я подумал, что обернуть его в оператор using будет наиболее целесообразно:
IEnumerable<MyDocument> documents = null;
using (Index<MyDocument> index = new Index<MyDocument>(new System.IO.DirectoryInfo(IndexRootPath)))
{
documents = index.Where(d => d.Name.Like("term")).ToList();
}
Я иногда испытываю нежелательное удаление индекса на диске.Кажется, это происходит в 100% случаев, если несколько экземпляров индекса существуют одновременно.Я написал тест, используя PLINQ, чтобы запустить 2 поиска параллельно и 1 поиск работает, в то время как другой возвращает 0 результатов из-за опустошения индекса.
- Должен ли я вместо этого использовать один статический экземпляр?
- Должен ли я обернуть его в
Lazy<T>
? - Могу ли я открыться другим проблемам, когда несколько пользователей одновременно получают доступ к статическому индексу?
Я также хочу периодически переиндексировать по мере необходимости, вероятно, с использованием другого процесса, такого как служба Windows.Собираюсь ли я также столкнуться с проблемами, если пользователи выполняют поиск во время перестройки индекса?