Ich suche derzeit nach anderen Suchmethoden, anstatt eine große SQL-Abfrage zu haben. Ich sah Elasticsearch vor kurzem und mit gespielt Zischen (eine Python - Implementierung einer Suchmaschine).
Können Sie Gründe für Ihre Wahl (en) angeben?
Ich suche derzeit nach anderen Suchmethoden, anstatt eine große SQL-Abfrage zu haben. Ich sah Elasticsearch vor kurzem und mit gespielt Zischen (eine Python - Implementierung einer Suchmaschine).
Können Sie Gründe für Ihre Wahl (en) angeben?
Antworten:
Als Schöpfer von ElasticSearch kann ich Ihnen vielleicht einige Gründe geben, warum ich es überhaupt erst erstellt habe :).
Die Verwendung von reinem Lucene ist eine Herausforderung. Es gibt viele Dinge, auf die Sie achten müssen, wenn Sie eine wirklich gute Leistung erzielen möchten. Außerdem handelt es sich um eine Bibliothek, also keine verteilte Unterstützung. Es handelt sich lediglich um eine eingebettete Java-Bibliothek, die Sie warten müssen.
In Bezug auf die Benutzerfreundlichkeit von Lucene habe ich vor langer Zeit (seit fast 6 Jahren) Compass erstellt. Ziel war es, die Verwendung von Lucene zu vereinfachen und den Alltag von Lucene zu vereinfachen. Was mir immer wieder begegnet ist, ist die Anforderung, Compass verteilen zu können. Ich habe angefangen, innerhalb von Compass daran zu arbeiten, indem ich Datenrasterlösungen wie GigaSpaces, Coherence und Terracotta integriert habe, aber das reicht nicht aus.
Im Kern muss eine verteilte Lucene-Lösung abgespalten werden. Mit der Weiterentwicklung von HTTP und JSON als allgegenwärtige APIs bedeutet dies auch, dass eine Lösung, mit der viele verschiedene Systeme mit verschiedenen Sprachen problemlos verwendet werden können.
Aus diesem Grund habe ich ElasticSearch erstellt. Es verfügt über ein sehr fortschrittliches verteiltes Modell, spricht JSON nativ und bietet viele erweiterte Suchfunktionen, die alle nahtlos über JSON DSL ausgedrückt werden.
Solr ist auch eine Lösung, um einen Indexierungs- / Suchserver über HTTP verfügbar zu machen, aber ich würde argumentieren, dass ElasticSearch ein viel besseres verteiltes Modell und eine einfache Bedienung bietet (obwohl es derzeit bei einigen Suchfunktionen fehlt, aber nicht lange und in keinem In diesem Fall ist geplant, alle Kompassfunktionen in ElasticSearch zu integrieren. Natürlich bin ich voreingenommen, da ich ElasticSearch erstellt habe. Möglicherweise müssen Sie dies selbst überprüfen.
Was Sphinx betrifft, habe ich es nicht benutzt, daher kann ich keinen Kommentar abgeben. Ich kann Sie auf diesen Thread im Sphinx-Forum verweisen, der meiner Meinung nach das überlegene verteilte Modell von ElasticSearch beweist.
Natürlich bietet ElasticSearch viel mehr Funktionen als nur die Verteilung. Es ist eigentlich mit Blick auf eine Wolke gebaut. Sie können die Funktionsliste auf der Site überprüfen.
quelle
Ich habe Sphinx, Solr und Elasticsearch verwendet. Solr / Elasticsearch bauen auf Lucene auf. Es werden viele allgemeine Funktionen hinzugefügt: Webserver-API, Facettieren, Zwischenspeichern usw.
Wenn Sie nur eine einfache Volltextsuche einrichten möchten, ist Sphinx die bessere Wahl.
Wenn Sie Ihre Suche überhaupt anpassen möchten, sind Elasticsearch und Solr die bessere Wahl. Sie sind sehr erweiterbar: Sie können Ihre eigenen Plugins schreiben, um die Ergebnisbewertung anzupassen.
Einige Anwendungsbeispiele:
quelle
Wir verwenden Lucene regelmäßig, um zig Millionen Dokumente zu indizieren und zu durchsuchen. Die Suche ist schnell genug und wir verwenden inkrementelle Updates, die nicht lange dauern. Wir haben einige Zeit gebraucht, um hierher zu kommen. Die Stärken von Lucene sind seine Skalierbarkeit, eine Vielzahl von Funktionen und eine aktive Community von Entwicklern. Die Verwendung von Bare Lucene erfordert die Programmierung in Java.
Wenn Sie neu anfangen, ist das Werkzeug für Sie in der Lucene-Familie Solr , das viel einfacher einzurichten ist als das reine Lucene und fast die gesamte Macht von Lucene besitzt. Es kann problemlos Datenbankdokumente importieren. Solr sind in Java geschrieben, daher erfordert jede Änderung von Solr Java-Kenntnisse. Sie können jedoch viel tun, indem Sie einfach die Konfigurationsdateien optimieren.
Ich habe auch gute Dinge über Sphinx gehört, insbesondere in Verbindung mit einer MySQL-Datenbank. Habe es aber nicht benutzt.
IMO, sollten Sie wählen nach:
quelle
Wir verwenden Sphinx in einem vertikalen Suchprojekt mit mehr als 10.000.000 MySQL-Datensätzen und mehr als 10 verschiedenen Datenbanken. Es hat eine hervorragende Unterstützung für MySQL und eine hohe Leistung bei der Indizierung. Die Recherche ist schnell, aber vielleicht etwas weniger als bei Lucene. Es ist jedoch die richtige Wahl, wenn Sie jeden Tag schnell indizieren und eine MySQL-Datenbank verwenden müssen.
quelle
Ein Experiment zum Vergleich von ElasticSearch und Solr
quelle
Meine sphinx.conf
Testskript:
Beispielergebnis:
Sphinx-Abfragezeit:
Sphinx-Abfragezeit (1k gleichzeitig):
MySQL-Abfragezeit:
MySQL-Abfragezeit (1k gleichzeitig):
quelle
Der einzige Leistungsvergleich zwischen Elasticsearch und Solr, den ich bisher finden konnte, ist hier:
Solr vs elasticsearch Deathmatch!
quelle
Lucene ist nett und alles, aber ihr Stoppwort ist schrecklich. Ich musste StopAnalyzer.ENGLISH_STOP_WORDS_SET manuell eine Menge Stoppwörter hinzufügen, um es annähernd nutzbar zu machen.
Ich habe Sphinx nicht verwendet, aber ich weiß, dass die Leute auf die Geschwindigkeit und das nahezu magische Verhältnis von "Leichtigkeit der Einrichtung zu Attraktivität" schwören.
quelle
Versuchen Sie es mit Indextank.
Als Fall der elastischen Suche wurde es als viel einfacher zu verwenden als Lucene / Solr konzipiert. Es enthält auch ein sehr flexibles Bewertungssystem, das ohne Neuindizierung angepasst werden kann.
quelle