Goed om te zien dat er iemand is ingelicht over Lucene, want daar heb ik geen idee van.
Sphinx, aan de andere kant, ken ik heel goed, dus laten we kijken of ik je kan helpen.
- Resultaatrelevantie ranking is de standaard. U kunt desgewenst uw eigen sortering instellen en specifieke velden hogere gewichten geven.
- De indexeringssnelheid is supersnel, omdat deze rechtstreeks met de database praat. Elke traagheid komt van complexe SQL-query's en niet-geïndexeerde externe sleutels en andere soortgelijke problemen. Ik heb ook nooit enige traagheid opgemerkt bij het zoeken.
- Ik ben een Rails-man, dus ik heb geen idee hoe gemakkelijk het te implementeren is met Django. Er is echter een Python-API die bij de Sphinx-bron wordt geleverd.
- De zoekservice-daemon (searchd) heeft weinig geheugengebruik - en je kunt limieten instellen voor hoeveel geheugen het indexeerproces gebruikt dat ook.
- Schaalbaarheid is waar mijn kennis meer summier is - maar het is gemakkelijk genoeg om indexbestanden naar meerdere machines te kopiëren en verschillende doorzochte daemons uit te voeren. De algemene indruk die ik echter van anderen krijg, is dat het behoorlijk verdomd goed is onder hoge belasting, dus het uitschalen over meerdere machines is niet iets dat moet worden aangepakt.
- Er is geen ondersteuning voor 'bedoelde je', enz. - hoewel dit gemakkelijk genoeg met andere tools kan worden gedaan. Sphinx stamt wel van woorden door gebruik te maken van woordenboeken, dus 'rijden' en 'rijden' (bijvoorbeeld) zouden bij zoekopdrachten als hetzelfde worden beschouwd.
- Sphinx staat echter geen gedeeltelijke indexupdates voor veldgegevens toe. De gebruikelijke aanpak hiervoor is om een delta-index bij te houden met alle recente wijzigingen en deze na elke wijziging opnieuw te indexeren (en die nieuwe resultaten verschijnen binnen een seconde of twee). Vanwege de kleine hoeveelheid gegevens kan dit enkele seconden duren. U zult de hoofddataset echter nog steeds regelmatig opnieuw moeten indexeren (hoewel hoe regelmatig afhangt van de volatiliteit van uw gegevens - elke dag? elk uur?). De hoge indexeringssnelheden houden dit echter allemaal vrij pijnloos.
Ik heb geen idee in hoeverre dit van toepassing is op jouw situatie, maar Evan Weaver vergeleek enkele van de veelgebruikte zoekopties van Rails (Sphinx, Ferret (een haven van Lucene voor Ruby) en Solr), met enkele benchmarks. Zou handig kunnen zijn, denk ik.
Ik heb de diepten van MySQL's full-text search niet gepeild, maar ik weet dat het qua snelheid en functionaliteit niet concurreert met Sphinx, Lucene of Solr.