Jsem rád, že se někdo ozval o Lucene – protože o tom nemám ponětí.
Sphinx, na druhou stranu, to znám docela dobře, tak uvidíme, jestli vám můžu nějak pomoci.
- Hodnocení relevance výsledku je výchozí. Pokud si přejete, můžete si nastavit vlastní třídění a dát konkrétním polím vyšší váhu.
- Rychlost indexování je super vysoká, protože komunikuje přímo s databází. Jakákoli pomalost bude pocházet ze složitých SQL dotazů a neindexovaných cizích klíčů a dalších podobných problémů. Také jsem nikdy nezaznamenal žádnou pomalost při vyhledávání.
- Jsem typ Rails, takže nemám ponětí, jak snadné je implementovat s Django. Existuje však rozhraní Python API, které je součástí zdroje Sphinx.
- Démon vyhledávací služby (searchd) má poměrně nízké využití paměti – a můžete nastavit limity pro kolik paměti proces indexeru také používá.
- Škálovatelnost je místo, kde jsou mé znalosti útržkovitější – ale je dost snadné zkopírovat indexové soubory na více počítačů a spustit několik prohledávaných démonů. Obecný dojem, který mám od ostatních, je, že je zatraceně dobrý při vysoké zátěži, takže jeho škálování na více počítačích není něco, co by bylo třeba řešit.
- Neexistuje žádná podpora pro „did-you-mean“ atd. – ačkoli to lze snadno provést pomocí jiných nástrojů. Sfinga odvozuje slova pomocí slovníků, takže například výrazy „řídit“ a „řídit“ by byly při vyhledávání považovány za stejné.
- Sphinx však nepovoluje částečné aktualizace indexu pro data pole. Běžným přístupem k tomu je udržovat delta index se všemi nedávnými změnami a znovu jej indexovat po každé změně (a tyto nové výsledky se objeví během sekundy nebo dvou). Vzhledem k malému množství dat to může trvat několik sekund. Stále však budete muset pravidelně reindexovat hlavní datovou sadu (ačkoli jak pravidelně závisí na volatilitě vašich dat – každý den? každou hodinu?). Díky vysoké rychlosti indexování je to vše docela bezbolestné.
Nemám ponětí, do jaké míry se to týká vaší situace, ale Evan Weaver porovnal několik možností vyhledávání Common Rails (Sfinga, Fretka (přístav v Lucene pro Ruby) a Solr), spouštějící některé benchmarky. Mohlo by to být užitečné, myslím.
Neprozkoumal jsem hloubku fulltextového vyhledávání MySQL, ale vím, že nekonkuruje ani rychlostí, ani funkcemi Sphinx, Lucene nebo Solr.