Мы часто используем Lucene.NET, когда объем данных велик, и для их чтения требуется сверхбыстрое время отклика. Мы обычно привязываем данные, которые нам нужно искать, а также ключ, чтобы позволить нам отобразить наши результаты обратно в таблицу базы данных, в которой есть оставшиеся детали. Это позволяет нам искать пользователя (в нашем случае), проверяющего его участие в прошлом. Это не просто поиск по имени пользователя, а поиск, который перебирает различные детали, пытаясь найти, есть ли другие экземпляры этого пользователя (хотя и в другой форме). В качестве примера этого мы ищем идентификатор пользователя (из одной системы), их идентификатор из другой системы, возможно, идентификатор из системы поставщиков, GUID флеш-куки, GUID куки-сайтов и т. Д. И, как мы находим один идентификатор, мы искать другие экземпляры этого идентификатора для других экземпляров пользователей. Это позволяет нам дедуплировать вход пользователей в одну из многих систем (поскольку их участие в любой системе разрешено только один раз в 24 часа). В SQL этот алогрит (о котором я был смутен) будет длиться вечно! В Lucene.NET это занимает меньше секунды. У Lucene гораздо больше возможностей поиска, чем у SQL Server. Суть в том, что он пишет или обновляет ваш индекс. Обычно это делается как работа ... все сразу. Однако, если вам нужно записать в индекс обновление в реальном времени, вам нужно написать какой-нибудь умный код, чтобы гарантировать, что он будет записан в заблокированном режиме (например, в очереди с синглтоном), иначе ваш код будет перекрываться и взрываться!
Я описываю использование Lucene.NET в своей книге ( Социальные сети ASP.NET ), и вы можете найти много помощи здесь .