Надлежащее структурирование Lucene. Сетевое использование в сайте MVC ASP.NET

Посмотрите файл php.ini и убедитесь, что активированы fileinfo.so или php_fileinfo.dll (в зависимости от вашей платформы и версии).

Должна быть строка, похожая на

extension=fileinfo.so

в файле php.ini

26
задан Maxim Zaslavsky 13 August 2010 в 22:02
поделиться

2 ответа

Ответ на все три ваших вопросы те же: повторно используйте ваших читателей (и, возможно, ваших писателей). Для этого вы можете использовать шаблон 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
}
15
ответ дан 28 November 2019 в 07:53
поделиться

Я бы, вероятно, пропустил кеширование - Lucene очень и очень эффективен. Возможно, так эффективно, что поиск будет быстрее, чем в кеше.

Мне кажется, что полный индекс OnApplication_Start мне не подходит - его, вероятно, следует запускать в своем собственном потоке, чтобы не блокировать другие дорогостоящие действия при запуске.

13
ответ дан Wyatt Barnett 28 November 2019 в 07:53
поделиться