Ich möchte die Volltextsuche von Daten in meiner Ruby on Rails-Anwendung durchführen. Welche Möglichkeiten gibt es?Wie kann ich Volltextsuche in Ruby on Rails durchführen?
Antwort
Es gibt verschiedene Optionen und jede hat unterschiedliche Stärken und Schwächen. Wenn Sie eine Volltextsuche hinzufügen möchten, wäre es ratsam, sie jeweils ein wenig zu untersuchen und auszuprobieren, um zu sehen, wie gut sie in Ihrer Umgebung funktioniert.
MySQL bietet integrierte Unterstützung für die Volltextsuche. Es verfügt über Online-Unterstützung, dh wenn neue Datensätze zur Datenbank hinzugefügt werden, werden sie automatisch indiziert und sind in den Suchergebnissen verfügbar. Die documentation hat mehr Details.
acts_as_tsearch
bietet einen Wrapper für ähnliche integrierte Funktionalität für aktuelle Versionen von PostgreSQL
Für andere Datenbanken müssen Sie andere Software verwenden.
Lucene ist ein beliebter Suchanbieter in Java geschrieben. Sie können Lucene über seinen Suchserver Solr mit Rails unter Verwendung von acts_as_solr
verwenden.
Wenn Sie kein Java verwenden möchten, gibt es einen Port von Lucene in Ruby namens Ferret. Unterstützung für Rails wird mit dem acts_as_ferret
Plugin hinzugefügt.
Xapian ist eine weitere gute Option und wird in Rails mit dem acts_as_xapian
Plugin unterstützt.
Schließlich ist meine bevorzugte Wahl Sphinx mit dem Ultrasphinx Plugin. Es ist extrem schnell und bietet viele Möglichkeiten, Ihre Datenbanken zu indizieren und zu durchsuchen, wird aber nicht mehr aktiv gepflegt.
Ein weiteres Plugin für Sphinx ist Thinking Sphinx, das eine Menge positiver feedback hat. Es ist ein wenig einfacher mit Thinking Sphinx zu beginnen als mit Ultrasphinx. Ich würde vorschlagen, beide Plugins zu untersuchen, um festzustellen, welche besser zu Ihrem Projekt passt.
Sie können Ferret verwenden (was Lucene in Ruby geschrieben ist). Es integriert nahtlos mit Rails mit dem Acts_as_ferret Mixin. Schauen Sie sich "How to Integrate Ferret With Rails" an. Eine Alternative ist Sphinx.
Ich kann Sphinx empfehlen. Ryan Bates hat eine großartige screencast mit dem Thinking Sphinx Plugin, um eine Volltextsuchlösung zu erstellen.
Ich habe eine list of the various Ruby on Rails search options in this other question kompiliert. Ich bin mir nicht sicher, wie oder ob wir unsere Fragen kombinieren sollen.
Es hängt davon ab, welche Datenbank Sie verwenden. Ich würde Solr empfehlen, da es viele schöne Optionen bietet. Der Nachteil ist, dass Sie einen separaten Prozess dafür ausführen müssen. Ich habe auch Ferret verwendet, fand aber, dass es hinsichtlich des multi-threaded Zugriffs auf den Index weniger stabil ist. Ich habe Sphinx nicht ausprobiert, weil es nur mit MySQL und Postgres funktioniert.
Nur eine Anmerkung für zukünftige Referenz: Ultra Sphinx wird nicht mehr gepflegt. Denkende Sphinx ist ihr Ersatz. Obwohl es zu dieser Zeit einige Funktionen wie Exzerpieren, die Ultra Sphinx hatte, fehlt es in anderen Funktionen.
Ich würde Acts_as_ferret empfehlen, da ich es für Scrumpad Projekt bei der Arbeit benutze.Die Indizierung kann als separater Prozess durchgeführt werden, der sicherstellt, dass wir während der Neuindizierung unsere Anwendung weiterhin verwenden können. Dies kann die Ausfallzeit der Website reduzieren. Auch die Suche ist viel schneller. Sie können mehrere Modelle gleichzeitig durchsuchen und Ihre Ergebnisse nach den von Ihnen bevorzugten Feldern sortieren lassen.
Das ist eine umfassendere Liste, aber fehlen einige Details über die Stärken und Schwächen von jedem; diese Frage auch. Was ich gerne sehen würde, ist eine Liste jedes Plugins mit Informationen über seine Stärken und Schwächen und Links zu Dokumentation und Tutorials. – sock