Tak, użyłem go dokładnie do tego, co opisujesz. Mieliśmy dwie usługi - jedną do odczytu i jedną do pisania, ale tylko dlatego, że mieliśmy wielu czytelników. Jestem pewien, że moglibyśmy to zrobić za pomocą tylko jednej usługi (pisarza) i osadzić czytnik w aplikacji internetowej i usługach.
Użyłem lucene.net jako ogólnego indeksatora bazy danych, więc to, co otrzymałem, to w zasadzie identyfikatory DB (do zindeksowanych wiadomości e-mail), a także używam go, aby uzyskać wystarczającą ilość informacji, aby wypełnić wyniki wyszukiwania lub takie bez dotykania Baza danych. Działa to świetnie w obu przypadkach, chociaż SQL może działać trochę wolniej, ponieważ w zasadzie musisz uzyskać identyfikator, wybrać identyfikator itp. Obeszliśmy to, tworząc tabelę tymczasową (zawierającą tylko wiersz identyfikatora) i wstawianie zbiorcze z pliku (który był wynikiem lucene), a następnie dołączanie do tabeli komunikatów. Było dużo szybciej.
Lucene nie jest doskonały i musisz myśleć trochę poza ramami relacyjnych baz danych, ponieważ TO OGÓŁEM nie jest jednym z nich, ale jest bardzo dobry w tym, co robi. Warte obejrzenia i, jak mi powiedziano, nie ma problemów „ojej, przepraszam, musisz ponownie odbudować indeks”, które ma FTI MS SQL.
BTW, mieliśmy do czynienia z 20-50 milionami e-maili (i około 1 milionem unikalnych załączników), w sumie około 20 GB indeksu lucene, jak sądzę, i 250 + GB bazy danych SQL + załączniki.
Wydajność była co najmniej fantastyczna – po prostu upewnij się, że pomyślisz i dostosujesz swoje czynniki scalające (gdy łączy segmenty indeksu). Nie ma problemu z posiadaniem więcej niż jednego segmentu, ale może być DUŻY problem, jeśli spróbujesz połączyć dwa segmenty, z których każdy zawiera 1 milion elementów, i masz wątek obserwatora, który zabija proces, jeśli trwa zbyt długo... .. (tak, to kopnęło nam na chwilę tyłek). Więc utrzymuj maksymalną liczbę dokumentów na rzecz NISKĄ (tj. Nie ustawiaj jej na maxint, jak to zrobiliśmy!)
EDIT Corey Trager udokumentował, jak korzystać z Lucene.NET w BugTracker.NET tutaj.