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