Посмотрите файл php.ini и убедитесь, что активированы fileinfo.so
или php_fileinfo.dll
(в зависимости от вашей платформы и версии).
Должна быть строка, похожая на
extension=fileinfo.so
в файле php.ini
Ответ на все три ваших вопросы те же: повторно используйте ваших читателей (и, возможно, ваших писателей). Для этого вы можете использовать шаблон singleton (т.е. объявить ваш читатель / писатель как общедоступный статический). Lucene FAQ говорит вам то же самое: поделитесь своими читателями, потому что первый запрос действительно медленный. Lucene берет на себя всю блокировку за вас, так что действительно нет причин, по которым у вас не должно быть общего считывателя.
Вероятно, проще всего просто оставить своего писателя и (используя модель NRT ) получить читателей от этого. Если вы редко пишете в индекс или если у вас нет особой потребности в скорости, то, вероятно, лучше каждый раз открывать свой писатель. Вот что я делаю.
Edit: добавлен пример кода:
public static IndexWriter writer = new IndexWriter(myDir);
public JsonResult SearchForStuff(string query)
{
IndexReader reader = writer.GetReader();
IndexSearcher search = new IndexSearcher(reader);
// do the search
}
Я бы, вероятно, пропустил кеширование - Lucene очень и очень эффективен. Возможно, так эффективно, что поиск будет быстрее, чем в кеше.
Мне кажется, что полный индекс OnApplication_Start мне не подходит - его, вероятно, следует запускать в своем собственном потоке, чтобы не блокировать другие дорогостоящие действия при запуске.