Heim > Backend-Entwicklung > C#.Net-Tutorial > Was ist Elasticsearch? Wo kann Elasticsearch eingesetzt werden?

Was ist Elasticsearch? Wo kann Elasticsearch eingesetzt werden?

零下一度
Freigeben: 2017-06-23 16:10:36
Original
4163 Leute haben es durchsucht
  • Elasticsearch-Version: 5.4

  • Elasticsearch-Schnellstart Teil 1: Erste Schritte mit Elasticsearch

  • Elasticsearch-Schnellstart Teil 1 2 Artikel: Elasticsearch- und Kibana-Installation

  • Elasticsearch-Schnellstartartikel 3: Elasticsearch-Index- und Dokumentoperationen

  • Elasticsearch-Schnellstartartikel 4: Elasticsearch-Dokumentabfrage

Elasticsearch ist eine hoch skalierbare Open-Source-Volltextsuch- und Analysemaschine. Es kann große Datenmengen schnell und nahezu in Echtzeit speichern, durchsuchen und analysieren. Es wird im Allgemeinen als zugrunde liegende Engine/Technologie verwendet, um Anwendungen mit komplexen Suchfunktionen und -anforderungen umfassend zu unterstützen.

Elasticsearch kann an folgenden Orten verwendet werden:

  1. Angenommen, es gibt eine Online-Shop-Website, auf der Kunden nach Produkten suchen können Verkauf. In diesem Fall können Sie Elasticsearch verwenden, um Ihren gesamten Produktkatalog und Ihr gesamtes Inventar zu speichern, Suchvorgänge für diese bereitzustellen und ihnen automatisch einige Vorschläge zu unterbreiten.

  2. Angenommen, Sie möchten Protokolle oder Transaktionsdaten sammeln und durch Analyse und Mining Trends, Statistiken, Zusammenfassungen oder Anomalien finden. In diesem Fall können Sie LogStash (Teil des Elasticsearch/Logstash/Kibana-Stacks) verwenden, um Ihre Daten zu sammeln, zu aggregieren und zu analysieren, und dann LogStash verwenden Senden Sie diese Daten an Elasticsearch . Sobald Elasticsearch die Daten erfasst hat, können Sie die für Sie interessanten Informationen suchen und zusammenfassen.

  3. Angenommen, Sie betreiben eine Preisalarmplattform und lassen preisbewusste Kunden eine Regel festlegen wie „Ich bin am Kauf eines bestimmten elektronischen Geräts interessiert, wenn es innerhalb des nächsten Monats eines gibt.“ Der Verkäuferpreis liegt unter x $, ich möchte benachrichtigt werden. In diesem Fall können Sie den Preis des Verkäufers an Elasticsearch übermitteln, eine umgekehrte Suche (Filter) verwenden, die Preisänderungen mit der Kundenanfrage abgleichen und den Kunden benachrichtigen, wenn eine Übereinstimmung gefunden wird.

  4. Angenommen, Sie haben einen Analysebedarf (Business Intelligence) und möchten schnell ein Ad-hoc-Problem in großen Datenmengen (denken Sie an Millionen oder Milliarden von Datensätzen) untersuchen, analysieren, visualisieren und finden ). In diesem Fall können Sie Elasticsearch zum Speichern der Daten verwenden und dann Kibana (Teil des Elasticsearch -Stacks) verwenden, um ein benutzerdefiniertes Dashboard zur Visualisierung zu erstellen Sie wichtige Daten. Darüber hinaus können Sie mit der Aggregationsfunktion Elasticsearch komplexe Business-Intelligence-Abfragen auf Basis von Daten durchführen.

Für den Rest dieses Tutorials werde ich Sie durch den Start- und Ausführungsprozess von Elasticsearch führen und Ihnen einige grundlegende Vorgänge zeigen, wie zum Beispiel: Indizierung, Suche und Daten ändern. Am Ende dieses Tutorials werden Sie ein tieferes Verständnis dafür haben, was Elasticsearch ist und wie es funktioniert. Wir hoffen, dass Sie dazu inspiriert werden, damit sowohl anspruchsvolle Suchanwendungen zu erstellen als auch nützliche Dinge aus Ihren Daten zu entdecken.

Grundlegende Konzepte (Grundkonzepte)

Es gibt einige Konzepte, die den Kern von Elasticsearch . Das Verständnis dieser Konzepte von Anfang an wird das spätere Lernen erheblich erleichtern.

Near Real Time (NRT)

Elasticsearch ist eine nahezu Echtzeit-Suche Plattform. Dies bedeutet, dass von der Indexierung eines Dokuments bis zur Durchsuchbarkeit nur eine geringe Verzögerung (normalerweise 1 Sekunde) vergeht.

Cluster (Cluster)

Ein Cluster ist eine Sammlung von einem oder mehreren Knoten (Servern), die sich zum Speichern aller Daten und zur Indizierung vereinen und Suchoperationen können auf allen Knoten durchgeführt werden. Cluster werden durch einen eindeutigen Namen identifiziert, der standardmäßig „elasticsearch“ lautet. Denn ein Knoten kann nur zu einem Cluster gehören und dem Cluster basierend auf dem Clusternamen beitreten. Der Name ist also wichtig.

Verwenden Sie nicht denselben Clusternamen in verschiedenen Umgebungen, da sonst möglicherweise der falsche Cluster hinzugefügt wird. Beispielsweise können Sie die Clusternamen

logging-dev , logging-stage und logging-prod jeweils in Entwicklungs-, Staging- und Produktionsumgebungen verwenden.

Beachten Sie, dass ein Cluster mit nur einem Knoten gültig und perfekt ist. Es ist auch möglich, mehrere unabhängige Cluster zu haben, von denen jeder seinen eigenen eindeutigen Clusternamen hat.

Knoten (Knoten)

Knoten ist ein einzelner Server, der Teil des Clusters ist, Daten speichert und an der Indizierung und Suche des Clusters beteiligt ist . Wie der Cluster werden auch Knoten durch eindeutige Namen unterschieden. Der Standardname ist eine zufällige UUID (Universally Unique IDentifier), die beim Start des Servers auf den Knoten festgelegt wird. Sie können den Knotennamen auch anpassen, wenn Sie nicht den Standardwert verwenden möchten. Namen sind für Administratoren sehr wichtig, da sie Ihnen dabei helfen, zu identifizieren, welche Knoten den einzelnen Servern im Cluster entsprechen.

Knoten können dem angegebenen Cluster beitreten, indem sie den Clusternamen konfigurieren. Standardmäßig schließen sich Knoten einem Cluster namens elasticsearch an. Wenn Sie also eine große Anzahl von Knoten im Netzwerk starten und diese alle miteinander kommunizieren können, werden sie automatisch einem Cluster A hinzugefügt Cluster mit dem Namen elasticsearch .

Index

Index ist eine Sammlung von Dokumenten mit bestimmten ähnlichen Merkmalen. Zum Beispiel Kundendatenindex, Produktkatalogindex und Bestelldatenindex. Ein Index wird durch einen Namen (der ausschließlich aus Kleinbuchstaben bestehen muss) identifiziert, der beim Indizieren, Suchen, Aktualisieren und Löschen von Dokumenten verwendet wird. Innerhalb eines einzelnen Clusters können Sie beliebig viele Indizes definieren.

Typ

Ein Index kann einen oder mehrere Typen definieren. Ein Typ ist eine logische Kategorie/Partition eines Index, was auch immer Sie darunter verstehen möchten. Normalerweise wird ein Typ für Dokumente definiert, die über einen gemeinsamen Satz von Feldern verfügen. Beispielsweise könnte eine Blogging-Plattform alle Daten in einem einzigen Index speichern. In diesem Index können Sie Benutzerdatentypen, Blog-Datentypen und Kommentardatentypen definieren.

Dokument

Dokument ist die Grundeinheit, die indiziert werden kann. Verwenden Sie beispielsweise ein Dokument, um Daten über einen Kunden, Daten über ein einzelnes Produkt oder Daten über eine einzelne Bestellung zu speichern. Dokumente werden mit JSON dargestellt. In einem Index/Typ kann eine große Anzahl von Dokumenten gespeichert werden. Es ist erwähnenswert, dass das Dokument zwar im Wesentlichen im Index gespeichert ist, tatsächlich jedoch indiziert/einem Typ im Index zugewiesen wird.

Shards und Replikate

Ein Index kann riesige Datenmengen speichern, die die Festplattenkapazität eines einzelnen Knotens überschreiten können. Beispielsweise speichert ein Index 1 Milliarde Dokumente und belegt 1 TB Festplattenspeicher. Selbst wenn er gespeichert werden kann, kann dies zu einer Verlangsamung führen Verarbeitung von Suchanfragen durch den Server.

Um dieses Problem zu lösen, stellt elasticsearch die Sharding-Funktion bereit, was eine Indexunterteilung bedeutet. Beim Erstellen eines Index können Sie einfach die Anzahl der benötigten Shards definieren. Jeder Shard selbst verfügt über alle Funktionen eines Index und kann auf jedem Knoten im Cluster gespeichert werden.

Sharding ist aus zwei Hauptgründen wichtig:

  • Es ermöglicht Ihnen, Ihr Inhaltsvolumen horizontal aufzuteilen/skalieren

  • Es ermöglicht Ihnen, Vorgänge parallel auf Shards auf mehreren Knoten zu verteilen und so die Leistung oder den Durchsatz zu verbessern.

Der Mechanismus der Shard-Verteilung und die Art und Weise, wie die Dokumente wieder zu Suchanfragen zusammengefasst werden, wird vollständig von Elasticsearch verwaltet und ist für den Benutzer transparent.

In einer Netzwerk-/Cloud-Umgebung, in der jederzeit ein Fehler auftreten kann, kann Sharding sehr nützlich sein und ein Failover-Mechanismus wird dringend empfohlen, um zu verhindern, dass Shards/Knoten offline gehen oder verschwinden. Zu diesem Zweck können Sie mit elasticsearch eine oder mehrere Kopien der Shards des Index erstellen, bei denen es sich um sogenannte replizierte Shards oder einfach Replikate handelt.

Repliken sind aus zwei Hauptgründen wichtig:

  • Um hohe Verfügbarkeit bereitzustellen, wenn ein Shard/Knoten ausfällt. Daher ist es wichtig zu beachten, dass ein Replikat nicht auf demselben Knoten zugewiesen werden kann wie der ursprüngliche/primäre Shard, von dem es kopiert wurde.

  • Damit können Sie das Suchvolumen/den Suchdurchsatz skalieren, da Suchvorgänge für alle Replikate parallel durchgeführt werden können.

Zusammenfassend lässt sich sagen, dass jeder Index in mehrere Shards unterteilt werden kann. Jeder Index kann auch nullmal (d. h. keine Kopien) oder mehrmals repliziert werden. Nach der Replikation verfügt jeder Index über einen primären Shard (den ursprünglichen Shard, der repliziert wurde) und einen sekundären Shard (eine Kopie des primären Shards). Die Anzahl der Shards und Replikate kann beim Erstellen des Index pro Index definiert werden. Nach dem Erstellen eines Index können Sie die Anzahl der Replikate jederzeit dynamisch ändern, die Anzahl der Shards können Sie jedoch nachträglich nicht mehr ändern.

Standardmäßig werden jedem Index 5 primäre Shards und 1 Replikat-Shard zugewiesen. Wenn Sie also zwei Knoten im Cluster haben, verfügt Ihr Index über insgesamt 5 primäre Shards und 5 replizierte Shards 10 Scherben.

Jeder Elasticsearch-Shard ist ein Lucene-Index. Ab LUCENE-5843 können bis zu 2.147.483.519 (= Integer.MAX_VALUE - 128) Dokumente verwendet werden Überwacht die Shard-Größe.

Zusammenfassung

1. Warum nicht eine relationale Datenbank für die Suche verwenden? Da die Datenbank zum Implementieren der Suche verwendet wird, ist die Leistung sehr schlecht und eine Wortsegmentierungssuche kann nicht durchgeführt werden.

2. Was sind Volltextsuche, invertierter Index und Lucene? Frühere Personen haben es bereits zusammengefasst. Weitere Informationen finden Sie unter [Lernen Sie Schritt für Schritt den Volltextabruf] Eine vorläufige Erkundung von Apache Lucene

3. Eigenschaften von Elasticsearch

  • Es kann in Clustern verteilt werden und große Datenmengen verarbeiten.

  • Es ist für Benutzer sehr einfach sofort einsatzbereit. Wenn die Datenmenge nicht groß ist, wird der Vorgang nicht zu kompliziert sein;

  • verfügt über Funktionen, die relationale Datenbanken nicht haben, wie z. B. Volltextsuche, Synonymverarbeitung, Relevanzranking , komplexe Datenanalyse und umfangreiche Datenverarbeitung. Verarbeitung nahezu in Echtzeit.

  • Basierend auf Lucene verbirgt es Komplexität und bietet eine einfache und benutzerfreundliche, erholsame API-Schnittstelle und eine Java-API-Schnittstelle

4. Das Kernkonzept von Elasticsearch

  • Cluster: Der Cluster enthält mehrere Knoten, und zu welchem ​​Cluster jeder Knoten gehört, wird durch die Konfiguration bestimmt (Der Standardwert ist „Elasticsearch“)

  • Knoten: Ein Knoten im Cluster. Der Knoten tritt standardmäßig automatisch dem Cluster mit dem Namen „elasticsearch“ bei. Ein Elasticsearch-Dienst ist ein Knoten. Wenn eine Maschine beispielsweise zwei ES-Dienste startet, gibt es zwei Knoten.

  • Index: Der Index entspricht einer MySQL-Datenbank und enthält eine Reihe von Dokumentdaten mit einer ähnlichen Struktur.

  • Typ: Typ, äquivalent zu einer MySQL-Tabelle, einer logischen Datenklassifizierung im Index.

  • Dokument: Das Dokument entspricht einer Datensatzzeile in der MySQL-Tabelle und ist die kleinste Dateneinheit in ES.

  • Shard: Eine einzelne Maschine kann keine große Datenmenge speichern, da sie die Daten in einem Index in mehrere Shards aufteilen und zur Speicherung auf mehrere Server verteilen kann.

  • Replikat: Replikat Um Ausfallzeiten und Shard-Verluste zu vermeiden, beträgt die minimale Hochverfügbarkeitskonfiguration 2 Server.

Das obige ist der detaillierte Inhalt vonWas ist Elasticsearch? Wo kann Elasticsearch eingesetzt werden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage