Да, я использовал это именно для того, что вы описываете. У нас было два сервиса - один для чтения, другой для записи, но только потому, что у нас было несколько читателей. Я уверен, что мы могли бы сделать это только с одним сервисом (писателем) и встроить ридер в веб-приложение и сервисы.
Я использовал lucene.net в качестве основного индексатора базы данных, поэтому я получил в основном идентификаторы БД (для индексированных сообщений электронной почты), и я также использовал его, чтобы получить достаточно информации для заполнения результатов поиска или чего-то подобного не касаясь базы данных. Он отлично работает в обоих случаях, так как SQL может работать немного медленнее, так как вам нужно получить идентификатор, выбрать идентификатор и т. Д. Мы справились с этим, создав временную таблицу (с одной строкой идентификатора в ней) и массовая вставка из файла (который был выводом из lucene) с последующим присоединением к таблице сообщений. Был намного быстрее.
Lucene не совершенен, и вам нужно немного подумать вне рамок реляционной базы данных, потому что ПОЛНОСТЬЮ не единое целое, но он очень и очень хорош в том, что делает. Стоит взглянуть, и, как мне сказали, нет проблем «упс, извините, вам нужно заново перестроить свой индекс», которые имеет FTI MS SQL.
Кстати, мы имели дело с 20-50 миллионами электронных писем (и около 1 миллиона уникальных вложений), на мой взгляд, около 20 ГБ индекса lucene и 250 + ГБ базы данных SQL + вложения.
Производительность была фантастической, если не сказать больше - просто подумайте и настройте факторы слияния (когда они объединяют сегменты индекса). Нет проблем с наличием более одного сегмента, но может возникнуть БОЛЬШАЯ проблема, если вы попытаетесь объединить два сегмента, каждый из которых имеет 1 мил, и у вас есть поток наблюдателя, который убивает процесс, если он занимает слишком много времени ... .. (да, это надрал нам задницу некоторое время). Поэтому сохраняйте максимальное количество документов на штуку НИЗКИМ (т. Е. Не устанавливайте максимальное значение, как мы!)
РЕДАКТИРОВАТЬ Corey Trager задокументировал, как использовать Lucene.NET в BugTracker.NET здесь .