При использовании Lucene.Net с ASP.NET я могу представить, что один веб-запрос может инициировать обновление индекса, а другой веб-запрос выполняет поиск. Может ли Lucene.Net встроить в нее возможность управлять параллельным доступом или мне нужно управлять им, чтобы избежать ошибок "из-за другого процесса"?
EDIT: после чтения документов и экспериментов, это то, что, как я думаю, я узнал: есть две проблемы: безопасность потоков и concurrency. Многопоточность "безопасна" в том, что вы не можете сделать ничего плохого для индекса. Но он безопасен ценой только одного объекта, имеющего блокировку индекса за один раз. Второй объект придет и выдаст исключение. Таким образом, вы не можете оставить поиск открытым и ожидать, что писатель в другом потоке сможет обновить индекс. И если поток занят обновлением индекса, тогда попытка создания поисковика завершится с ошибкой.
Кроме того, Searchers видят индекс, как это было в то время, когда они его открывают, поэтому, если вы их сохраните и обновите индекс, они не будут видеть обновления.
Я хотел, чтобы мои искатели увидели последние обновления.
Мой дизайн и, похоже, работает до сих пор, заключается в том, что мои авторы и поисковые системы разделяют блокировку, так что они не терпят неудачу - они просто ждут - до тех пор, пока не будет выполнена текущая запись или поиск.