Forschungsdokument zur Suchmaschinenauswahl
Einführung in die Elasticsearch*
Elasticsearch ist eine Echtzeit-Such- und Analyse-Engine. Es hilft Ihnen, groß angelegte Daten schneller als je zuvor zu verarbeiten.
Es kann für Volltextsuche, strukturierte Suche und Analysen verwendet werden, und natürlich kann man alle drei kombinieren.
Elasticsearch ist eine Suchmaschine, die auf der Volltextsuchmaschine Apache Lucene™ basiert und als das fortschrittlichste und effizienteste, voll ausgestattete Open-Source-Suchmaschinen-Framework gilt, das heute verfügbar ist.
Aber Lucene ist nur ein Framework, und um seine Funktionen voll auszuschöpfen, musst du JAVA verwenden und Lucene in dein Programm integrieren. Es erfordert viel Lernen, um zu verstehen, wie es funktioniert, und Lucene ist wirklich kompliziert.
Elasticsearch verwendet Lucene als interne Engine, aber bei der Volltextsuche benötigt man nur eine einheitliche API, ohne die komplexen Lucene-Betriebsprinzipien dahinter zu verstehen.
Natürlich ist Elasticsearch nicht nur so einfach wie Lucene, es enthält nicht nur Volltextsuchfunktionen, sondern kann auch folgende Aufgaben ausführen:
- Verteilte Echtzeit-Dateispeicherung und Indexierung jedes Feldes, damit es durchsucht werden kann.
- Verteilte Suchmaschine mit Echtzeit-Analysen.
- Es kann auf Hunderte von Servern skalieren, um Petabytes an strukturierten oder unstrukturierten Daten zu verarbeiten.
Mit so vielen Funktionen auf einem Server können Sie problemlos mit der RESTful API von ES, entweder über den Client oder eine Ihrer bevorzugten Programmiersprachen, kommunizieren.
Der Einstieg mit Elasticsearch ist sehr einfach. Es gibt viele sehr vernünftige Standardeinstellungen, was es für Anfänger zu einer guten Möglichkeit macht, sich nicht direkt mit komplexen Theorien auseinandersetzen zu müssen.
Es ist installiert und einsatzbereit und kann mit geringen Lernkosten sehr produktiv sein.
Mit zunehmendem Wissen können Sie auch von fortschrittlicheren Funktionen von Elasticsearch profitieren, und die gesamte Engine kann flexibel konfiguriert werden. Du kannst dein eigenes Elasticsearch nach deinen Bedürfnissen anpassen.
Anwendungsfälle:
- Wikipedia nutzt Elasticsearch, um Volltextsuchen durchzuführen und Schlüsselwörter hervorzuheben, sowie Suchvorschläge wie "Suchen-so-du-tippst" und "Hast du das gemeint".
- The Guardian nutzt Elasticsearch, um Besucherprotokolle zu verarbeiten, sodass Redakteure in Echtzeit über öffentliche Reaktionen auf verschiedene Artikel informiert werden können.
- StackOverflow kombiniert Volltextsuche mit Geolokalisierung und relevanten Informationen, um eine Darstellung von Fragen zu ähnlichen Themen zu bieten.
- GitHub nutzt Elasticsearch, um mehr als 130 Milliarden Codezeilen abzurufen.
- Jeden Tag nutzt Goldman Sachs es, um 5 TB Daten zu indexieren, und viele Investmentbanken nutzen es, um Aktienmarktbewegungen zu analysieren.
Aber Elasticsearch ist nicht nur für große Unternehmen gedacht, sondern hat auch vielen Start-ups wie DataDog und Klout geholfen, ihre Fähigkeiten zu erweitern.
Vor- und Nachteile von Elasticsearch**:
Verdienst
- Elasticsearch ist verteilt. Es werden keine weiteren Komponenten benötigt, und die Verteilung erfolgt in Echtzeit, bekannt als "Push-Replikation".
- Elasticsearch unterstützt nahezu Echtzeitsuche vollständig mit Apache Lucene.
- Die Verwaltung von Multitenancy erfordert keine spezielle Konfiguration, während Solr fortgeschrittenere Einstellungen erfordert.
- Elasticsearch nutzt das Konzept des Gateways, um das Sichern zu erleichtern.
- Jeder Knoten bildet eine gleichwertige Netzwerkstruktur, und wenn einige Knoten ausfallen, werden andere Knoten automatisch zugewiesen, um an ihrer Stelle zu arbeiten.
Mangel
- Nur ein Entwickler (die aktuelle Elasticsearch-GitHub-Organisation besteht aus mehr, sie hat bereits ziemlich aktive Maintainer)
- Nicht automatisch genug (nicht geeignet für die aktuelle neue Index Warmup API)
Über Solr*
Solr (ausgesprochen "solar") ist eine Open-Source-Enterprise-Suchplattform für das Apache-Lucene-Projekt. Zu den Hauptfunktionen gehören Volltextsuche, Treffermarkierung, facettierte Suche, dynamisches Clustern, Datenbankintegration und Verarbeitung von Rich Text (z. B. Word, PDF). Solr ist hoch skalierbar und bietet verteilte Suche sowie Indexreplikation. Solr ist die beliebteste Suchmaschine für Unternehmen, und Solr4 fügt außerdem NoSQL-Unterstützung hinzu.
Solr ist ein eigenständiger Volltext-Suchserver in Java, der auf einem Servlet-Container wie Apache Tomcat oder Jetty läuft. Solr verwendet die Lucene Java-Suchbibliothek als Kern für Volltextindexierung und Suche und verfügt über REST-ähnliche HTTP/XML- und JSON-APIs. Solrs leistungsstarke externe Konfigurationsmöglichkeiten machen es einfach, sich an viele Anwendungstypen ohne Java-Codierung anzupassen. Solr verfügt über eine Plugin-Architektur, die fortschrittlichere Anpassungen unterstützt.
Durch die Fusion der Apache Lucene- und Apache Solr-Projekte im Jahr 2010 wurden die beiden Projekte vom gleichen Entwicklungsteam der Apache Software Foundation entwickelt und umgesetzt. Was Technologie oder Produkte angeht, ist Lucene/Solr oder Solr/Lucene dasselbe.
Vor- und Nachteile von Solr:
Verdienst
- Solr verfügt über eine größere und reifere Community von Nutzern, Entwicklern und Mitwirkenden.
- Unterstützung für das Hinzufügen von Indizes in mehreren Formaten, wie HTML, PDF, Microsoft Office-Softwareformaten und Klartextformaten wie JSON, XML, CSV usw.
- Solr ist relativ reif und stabil.
- Suche während der Indexierung wird nicht berücksichtigt, und die Geschwindigkeit ist höher.
Mangel
- Wenn der Index etabliert ist, sinkt die Sucheffizienz, und die Echtzeit-Index-Sucheffizienz ist nicht hoch.
Elasticsearch vs. Solr*
Solr ist schneller, wenn man einfach nach vorhandenen Daten sucht.
Beim Echtzeit-Indexieren verursacht Solr IO-Blockierung und schlechte Abfrageleistung, was Elasticsearch einen klaren Vorteil hat.
Mit zunehmender Datenmenge sinkt die Sucheffizienz von Solr, während sich Elasticsearch nicht wesentlich verändert.
Zusammenfassend lässt sich sagen, dass Solrs Architektur für Echtzeitsuchanwendungen nicht geeignet ist.
Praxisnahe Produktionstests*
Die folgende Abbildung zeigt eine 50-fache Steigerung der durchschnittlichen Abfragegeschwindigkeit nach dem Wechsel von Solr zu Elasticsearch.
Zusammenfassung des Elasticsearch- vs. Solr-Vergleichs
- Beide sind einfach zu installieren;
- Solr nutzt Zookeeper für das verteilte Management, während Elasticsearch selbst ein verteiltes Orchestrierungsmanagement hat;
- Solr unterstützt mehr Datenformate, während Elasticsearch nur JSON-Dateiformate unterstützt;
- Solr bietet offiziell mehr Funktionen, während Elasticsearch selbst sich stärker auf Kernfunktionen konzentriert und erweiterte Funktionen größtenteils von Drittanbieter-Plugins bereitgestellt werden.
- Solr übertrifft Elasticsearch in traditionellen Suchanwendungen, ist aber bei der Verarbeitung von Echtzeitsuchanwendungen deutlich weniger effizient als Elasticsearch.
- Solr ist eine leistungsstarke Lösung für traditionelle Suchanwendungen, aber Elasticsearch eignet sich besser für aufkommende Echtzeitsuchanwendungen.
Weitere in Lucene basierende Open-Source-Suchmaschinenlösungen*
1: Benutze Lucene direkt
Hinweis: Lucene ist eine JAVA-Suchbibliothek, die keine vollständige Lösung für sich allein ist und zusätzlichen Entwicklungsaufwand erfordert.
Vorteile: Ausgereifte Lösung mit vielen erfolgreichen Fällen. Apache-Projekte auf höchstem Niveau, die weiterhin rasant voranschreiten. Große und aktive Entwicklungsgemeinschaft, eine große Anzahl von Entwicklern. Es ist einfach eine Klassenbibliothek mit genügend Raum für Anpassung und Optimierung: Nach einfacher Anpassung kann sie die meisten gängigen Anforderungen erfüllen; Optimiert für 1 Milliarde+ Suchanfragen.
Nachteile: Erfordert zusätzlichen Entwicklungsaufwand. Alle Skalierungen, Distributionen, Zuverlässigkeit usw. müssen von euch selbst implementiert werden; Im Nicht-Echtzeitmodus gibt es eine Zeitverzögerung zwischen Indexierung und Suche, und die Skalierbarkeit des aktuellen "Lucene Near Real Time Search"-Suchverfahrens muss weiter verbessert werden
Der Hyperlink-Login ist sichtbar.
2:Katta
Hinweis: Lucene-basiertes unterstütztes verteiltes, skalierbares, fehlertolerantes, nahezu Echtzeit-Suchschema.
Vorteile: Direkt mit Hadoop vertrieben. Es verfügt über einen Skalierungs- und Fehlertoleranzmechanismus.
Nachteile: Es ist nur eine Suchlösung, und du musst den Indexierungsteil trotzdem selbst implementieren. Im Hinblick auf die Suchfunktion werden nur die grundlegendsten Bedürfnisse erfüllt. Es gibt weniger Erfolgsgeschichten und die Reife des Projekts ist etwas geringer. Da es die Verteilung unterstützen muss, wird es schwierig sein, sie für einige komplexe Abfrageanforderungen anzupassen.
Der Hyperlink-Login ist sichtbar.
3: Hadoop-Beiträge/Index
Hinweis: Map/Reduce-Modus, eine verteilte Indexierungslösung, kann mit Katta verwendet werden.
Vorteile: Verteilte Indexierung und Skalierbarkeit.
Nachteile: Nur das Indexierungsschema, nicht die Suchimplementierung. Funktioniert im Batch-Modus mit schlechter Unterstützung für Echtzeitsuche.
Der Hyperlink-Login ist sichtbar.
4: LinkedIns Open-Source-Lösung
Beschreibung: Eine Reihe von Lösungen basierend auf Lucene, darunter Zoie für nahezu Echtzeitsuche, Bobo für Facettensuche, Decomposer für maschinelle Lernalgorithmen, Krati für Zusammenfassungs-Repositories, Sensei für Datenbankschema-Wrapping und mehr
Vorteile: Bewährte Lösung, die verteilte, skalierbare und funktionsreiche Implementierung unterstützt
Nachteile: Zu eng mit LinkedIn verbunden und schlechte Anpassbarkeit
Der Hyperlink-Login ist sichtbar.
5: Lucandra
Hinweis: Basierend auf Lucene existiert der Index in der Cassandra-Datenbank
Vorteile: Beziehen Sie sich auf die Vorteile von Cassandra
Nachteile: Beziehen Sie sich auf die Nachteile von Cassandra. Außerdem ist dies nur eine Demo und wurde nicht gründlich überprüft
Der Hyperlink-Login ist sichtbar.
6:HBasene
Hinweis: Basierend auf Lucene existiert der Index in der HBase-Datenbank
Vorteile: Siehe die Vorteile von HBase
Nachteile: Beziehen Sie sich auf die Nachteile von HBase. Außerdem werden in der Implementierung luzene Begriffe als Zeilen gespeichert, während die zu jedem Begriff gehörenden Postinglisten als Spalten gespeichert werden. Da die Anzahl der Postinglisten für einen einzelnen Begriff wächst, wird die Geschwindigkeit der Anfrage stark beeinflusst
Der Hyperlink-Login ist sichtbar.
7: Xunsearch
Hinweis: Xunsearch verwendet ein strukturiertes hierarchisches Design, einschließlich Backend-Services und Frontend-Entwicklungspakete, mit klaren Hierarchien und ohne Schnittstellen. Das Backend ist ein Daemon, geschrieben in C/C++, während das Frontend PHP verwendet, die beliebteste Skriptsprache, die für Websuchprojekte praktischer ist. Details finden Sie unter Architekturdesign.
Der Hyperlink-Login ist sichtbar.
|