Существуют ли какие-либо рекомендации по интеграции Lucene.NET в приложение ASP.NET MVC?
Мне интересно, есть ли какие-либо рекомендации, рекомендации или советы по интеграции поиска на основе Lucene.NET в веб-приложение ASP.NET MVC?
Вещи, которые я читал (или думаю, что я читал) в разных местах, включают следующее:
- Один
IndexWriter
, много IndexReader
s
- Когда индекс обновляется, reset/повторно инициализируйте
IndexReader
s
Есть ли еще какие-нибудь полезные советы или ресурсы, которые я должен прочитать перед запуском?
Спасибо,
Кирон
Ответы
Ответ 1
Вот мои советы (в определенном порядке):
- Выберите наиболее подходящий механизм блокировки.
- Используйте SetRAMBufferSizeMB, чтобы уменьшить накладные расходы ввода-вывода диска при записи индекса.
- Не используйте свойство SetMaxBufferedDocs.
- Используйте результаты поиска (TopDocs и ScoreDoc []) для получения результатов поиска индекса.
- Индексная запись - дорогостоящая операция, поэтому используйте ее экономно.
- Знайте данные, которые вы будете индексировать, поскольку некоторые типы данных (I.E., даты) могут быть трудно найти, если они не сохраняются последовательно.
Несколько ошибок из одного из моих предыдущих проектов были:
- Мне пришлось использовать BooleanQuery для выполнения традиционной операции И для поиска нескольких полей.
- В Lucene нет функции UPDATE, поэтому необходимо удалить и повторно добавить документ.
- Вы не можете сортировать /OrderBy в токенизированном поле.
Я бы предложил посмотреть исходный код RavenDb, поскольку он построен поверх Lucene и использует ряд лучших практик.
Ответ 2
RavenDb, безусловно, самый простой способ пойти сюда - это действительно lucene ++.
Что касается использования, я бы рекомендовал посмотреть движок блога SubText. Код лицензирован MIT, поэтому вы можете просто использовать его в своем проекте и иметь очень хорошо продуманный указатель/читатель.
В наших приложениях у нас, как правило, есть один писатель и отдельное приложение со многими читателями. Стратегия блокировки может быть ключевой здесь - особенно убедитесь, что читатели не пытаются блокировать индекс. Я замалчиваю конкретный термин, который мы должны использовать, чтобы это произошло.