Dobrze widzieć, że ktoś wtrącił się w sprawie Lucene - bo nie mam o tym pojęcia.
Z kolei Sfinksa znam całkiem dobrze, więc zobaczmy, czy mogę pomóc.
- Ranking trafności wyników jest ustawieniem domyślnym. Jeśli chcesz, możesz skonfigurować własne sortowanie i nadać określonym polom wyższe wagi.
- Prędkość indeksowania jest superszybka, ponieważ łączy się bezpośrednio z bazą danych. Wszelkie spowolnienie będzie spowodowane złożonymi zapytaniami SQL i nieindeksowanymi kluczami obcymi oraz innymi podobnymi problemami. Nigdy też nie zauważyłem spowolnienia w wyszukiwaniu.
- Jestem facetem od Railsów, więc nie mam pojęcia, jak łatwo można to zaimplementować w Django. Istnieje jednak interfejs API Pythona, który jest dostarczany ze źródłem Sphinx.
- Demon usługi wyszukiwania (searchd) zużywa dość mało pamięci — możesz ustawić limity dla ile pamięci proces indeksowania również używa.
- Skalowalność to obszar, w którym moja wiedza jest bardziej pobieżna — ale dość łatwo jest skopiować pliki indeksu do wielu komputerów i uruchomić kilka przeszukiwanych demonów. Ogólne wrażenie, jakie mam od innych, jest takie, że jest cholernie dobre pod dużym obciążeniem, więc skalowanie go na wielu maszynach nie jest czymś, czym trzeba się zająć.
- Nie ma wsparcia dla „czy chciałeś” itp. — chociaż można to łatwo zrobić za pomocą innych narzędzi. Sphinx kryje słowa, chociaż używa słowników, więc „jazda” i „jazda” (na przykład) będą traktowane jako to samo w wyszukiwaniach.
- Sphinx nie pozwala jednak na częściowe aktualizacje indeksu dla danych pola. Powszechnym podejściem do tego jest utrzymywanie indeksu delta ze wszystkimi ostatnimi zmianami i ponowne indeksowanie go po każdej zmianie (a te nowe wyniki pojawiają się w ciągu sekundy lub dwóch). Ze względu na niewielką ilość danych może to zająć kilka sekund. Nadal będziesz musiał jednak regularnie ponownie indeksować główny zbiór danych (chociaż jak często zależy od zmienności danych – codziennie? co godzinę?). Duże prędkości indeksowania sprawiają jednak, że wszystko to jest całkiem bezbolesne.
Nie mam pojęcia, jak odnosi się to do twojej sytuacji, ale Evan Weaver porównał kilka popularnych opcji wyszukiwania Rails (Sphinx, Ferret (port Lucene dla Ruby) i Solr), przeprowadzający testy. To może być przydatne, jak sądzę.
Nie zgłębiłem głębi wyszukiwania pełnotekstowego MySQL, ale wiem, że nie konkuruje pod względem szybkości ani funkcji ze Sphinxem, Lucene czy Solr.