Ответ на все три ваших вопроса один и тот же: повторно используйте ваших читателей (и, возможно, ваших писателей).Вы можете использовать шаблон singleton , чтобы сделать это (то есть объявить ваш читатель / писатель как открытый статический). FAQ от Lucene говорит вам то же самое: поделитесь своими читателями, потому что первый запрос слишком медленный.Lucene обрабатывает всю блокировку за вас, поэтому на самом деле нет причин, по которым вам не нужно иметь общий читатель.
Вероятно, проще всего просто держать вашего писателя рядом и (используя NRT модель) получить читателей от этого.Если вы редко пишете в указатель, или если вам не нужна огромная скорость, тогда, вероятно, лучше каждый раз открывать ваш писатель.Это то, что я делаю.
Редактировать: добавлен пример кода:
public static IndexWriter writer = new IndexWriter(myDir);
public JsonResult SearchForStuff(string query)
{
IndexReader reader = writer.GetReader();
IndexSearcher search = new IndexSearcher(reader);
// do the search
}