Mysql
 sql >> Datenbank >  >> RDS >> Mysql

Vergleich Volltextsuchmaschine - Lucene, Sphinx, Postgresql, MySQL?

Schön zu sehen, dass sich jemand zu Lucene gemeldet hat - denn davon habe ich keine Ahnung.

Sphinx hingegen kenne ich ziemlich gut, also mal sehen, ob ich helfen kann.

  • Die Rangfolge der Ergebnisrelevanz ist die Standardeinstellung. Sie können Ihre eigene Sortierung einrichten, wenn Sie möchten, und bestimmte Felder höher gewichten.
  • Die Indizierungsgeschwindigkeit ist superschnell, da sie direkt mit der Datenbank kommuniziert. Jegliche Langsamkeit wird durch komplexe SQL-Abfragen und nicht indizierte Fremdschlüssel und andere derartige Probleme verursacht. Ich habe auch noch nie eine Langsamkeit beim Suchen bemerkt.
  • Ich bin ein Rails-Typ, also habe ich keine Ahnung, wie einfach es mit Django zu implementieren ist. Es gibt jedoch eine Python-API, die mit der Sphinx-Quelle geliefert wird.
  • Der Suchdienst-Daemon (searchd) verbraucht ziemlich wenig Speicher - und Sie können Beschränkungen für wie viel Speicher der Indexer-Prozess verwendet auch.
  • Skalierbarkeit ist, wo mein Wissen lückenhafter ist - aber es ist einfach genug, Indexdateien auf mehrere Maschinen zu kopieren und mehrere searchd-Daemons auszuführen. Der allgemeine Eindruck, den ich von anderen bekomme, ist jedoch, dass es unter hoher Last verdammt gut ist, sodass eine Skalierung auf mehrere Computer nicht erforderlich ist.
  • Es gibt keine Unterstützung für 'meinten Sie' usw. - obwohl dies mit anderen Tools problemlos möglich ist. Sphinx stämmt zwar Wörter, verwendet aber Wörterbücher, so dass 'driving' und 'drive' (zum Beispiel) bei der Suche als gleich angesehen werden.
  • Sphinx erlaubt jedoch keine partiellen Indexaktualisierungen für Felddaten. Der übliche Ansatz dafür besteht darin, einen Delta-Index mit allen jüngsten Änderungen zu verwalten und diesen nach jeder Änderung neu zu indizieren (und diese neuen Ergebnisse werden innerhalb von ein oder zwei Sekunden angezeigt). Aufgrund der geringen Datenmenge kann dies einige Sekunden dauern. Sie müssen den Hauptdatensatz dennoch regelmäßig neu indizieren (obwohl wie regelmäßig von der Volatilität Ihrer Daten abhängt - jeden Tag? jede Stunde?). Die schnellen Indizierungsgeschwindigkeiten halten dies jedoch ziemlich schmerzlos.

Ich habe keine Ahnung, wie anwendbar das auf Ihre Situation ist, aber Evan Weaver hat einige der gängigen Rails-Suchoptionen verglichen (Sphinx, Ferret (eine Portierung von Lucene für Ruby) und Solr), einige Benchmarks ausführen. Könnte nützlich sein, denke ich.

Ich habe die Tiefen der MySQL-Volltextsuche nicht ergründet, aber ich weiß, dass sie weder in Bezug auf die Geschwindigkeit noch in Bezug auf die Funktionen mit Sphinx, Lucene oder Solr konkurriert.