Правильный ли LINQ to Lucene Index <T>шаблон использования для ASP.NET? - PullRequest
1 голос
/ 13 мая 2010

Каков правильный шаблон использования для 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.Собираюсь ли я также столкнуться с проблемами, если пользователи выполняют поиск во время перестройки индекса?

1 Ответ

0 голосов
/ 04 мая 2013

Код выглядит как Linq-to-Lucene .

В большинстве случаев полностью очищенные индексы Lucene - это новые IndexWriters, созданные с параметром create, установленным в значение true. Код в вопросе не обрабатывает индексацию, поэтому дальнейшая отладка затруднена.

Lucene.Net является поточно-ориентированным, и я ожидаю, что linq-to-lucene также подавит это поведение. Один экземпляр статического индекса будет кэшировать содержимое в памяти, но я думаю, вам придется самостоятельно обрабатывать перезагрузку индекса изменений (я не знаю, сделает ли это linq-to-lucene).

При переиндексации не должно быть проблем с использованием нескольких поисковиков / читателей, Lucene создан для поддержки этого сценария. Однако в каталоге может быть только один модуль записи, поэтому никакой другой процесс не может записывать документы в индекс, пока ваша служба Windows должна была оптимизировать индекс.

...