Существуют ли какие-либо рекомендации по интеграции 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, поэтому вы можете просто использовать его в своем проекте и иметь очень хорошо продуманный указатель/читатель.

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