Я создаю сайт ASP.NET MVC, где планирую использовать Lucene.Net. Я предвидел способ структурирования использования Lucene, но не уверен, что моя планируемая архитектура в порядке и эффективна.
Мой план:
- В событии
Application_Start
в Global.asax: я проверяю наличие индекса в файловой системе - если он не существует, я создаю его и заполняю его документами, извлеченными из базы данных. - Когда отправляется новый контент: я создаю
IndexWriter
, заполняю документ, записываю в индекс и, наконец, удаляюIndexWriter
.IndexWriters
не используются повторно, поскольку я не могу представить себе хороший способ сделать это в приложении ASP.NET MVC. - Когда содержимое редактируется: повторяю тот же процесс, что и при отправке нового контента, за исключением того, что я сначала удаляю старый контент, а затем добавляю изменения.
- Когда пользователь ищет контент: я проверяю
HttpRuntime.Cache
, чтобы узнать, действительно ли пользователь выполнил поиск этого термина за последние 5 минут - если они есть, я возвращаю эти результаты; в противном случае я создаюIndexReader
, создаю и запускаю запрос, помещаю результаты вHttpRuntime.Cache
, возвращаю их пользователю и, наконец, удаляюIndexReader
. Еще разIndexReaders
не используются повторно.
Мои вопросы:
- Это хорошая структура - , как я могу ее улучшить?
- Существуют ли любые проблемы с производительностью/эффективностью.. Я должен знать.
- Кроме того, не повторно использовать IndexReaders и IndexWriters огромный запах кода?