Elasticsearch Tutorial
Erste Schritte mit Elasticsearch
Suche…
Bemerkungen
Elasticsearch ist ein erweiterter Open-Source-Suchserver, der auf Lucene basiert und in Java geschrieben ist.
Sie bietet verteilte, abfrage- und geolokationsbasierte Suchfunktionen für vollständigen und unvollständigen Text, auf die über eine HTTP-REST-API zugegriffen werden kann.
Versionen
| Ausführung | Veröffentlichungsdatum |
|---|---|
| 5.2.1 | 2017-02-14 |
| 5.2.0 | 2017-01-31 |
| 5.1.2 | 2017-01-12 |
| 5.1.1 | 2016-12-08 |
| 5.0.2 | 2016-11-29 |
| 5.0.1 | 2016-11-15 |
| 5.0.0 | 2016-10-26 |
| 2.4.0 | 2016-08-31 |
| 2.3.0 | 2016-03-30 |
| 2.2.0 | 2016-02-02 |
| 2.1.0 | 2015-11-24 |
| 2.0.0 | 2015-10-28 |
| 1.7.0 | 2015-07-16 |
| 1.6.0 | 2015-06-09 |
| 1.5.0 | 2015-03-06 |
| 1.4.0 | 2014-11-05 |
| 1.3.0 | 2014-07-23 |
| 1.2.0 | 2014-05-22 |
| 1.1.0 | 2014-03-25 |
| 1.0.0 | 2014-02-14 |
Installation von Elasticsearch unter Ubuntu 14.04
Voraussetzungen
Zur Ausführung von Elasticsearch ist auf dem Computer eine Java Runtime Environment (JRE) erforderlich. Elasticsearch erfordert Java 7 oder höher und empfiehlt Oracle JDK version 1.8.0_73 .
Installieren Sie Oracle Java 8
sudo add-apt-repository -y ppa:webupd8team/java
sudo apt-get update
echo "oracle-java8-installer shared/accepted-oracle-license-v1-1 select true" | sudo debconf-set-selections
sudo apt-get install -y oracle-java8-installer
Überprüfen Sie die Java-Version
java -version
Paket herunterladen und installieren
Verwenden von Binärdateien
- Laden Sie die neueste stabile Version von Elasticsearch hier herunter.
- Entpacken Sie die Datei & Ausführen
Linux:
$ bin/elasticsearch
Mit apt-get
Eine Alternative zum Herunterladen von elasticsearch von der Website ist die Installation mit apt-get .
wget -qO - https://packages.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://packages.elastic.co/elasticsearch/2.x/debian stable main" | sudo tee -a /etc/apt/sources.list.d/elasticsearch-2.x.list
sudo apt-get update && sudo apt-get install elasticsearch
sudo /etc/init.d/elasticsearch start
Elasticsearch Version 5.x installieren
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
sudo apt-get install apt-transport-https
echo "deb https://artifacts.elastic.co/packages/5.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-5.x.list
sudo apt-get update && sudo apt-get install elasticsearch
Läuft als Dienst unter Linux:
Nach der Installation startet das obige nicht von selbst. Wir müssen es also als Dienstleistung starten. Wie Sie Elasticsearch starten oder stoppen, hängt davon ab, ob Ihr System SysV init oder systemd verwendet. Sie können es mit dem folgenden Befehl überprüfen.
ps -p 1
Wenn Ihre Distribution SysV init verwendet, müssen Sie Folgendes ausführen:
sudo update-rc.d elasticsearch defaults 95 10
sudo /etc/init.d/elasticsearch start
Ansonsten, wenn Ihre Distribution systemd verwendet:
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
Führen Sie den Befehl CURL Ihrem Browser oder einem REST-Client aus, um zu prüfen, ob Elasticsearch ordnungsgemäß installiert wurde.
curl -X GET http://localhost:9200/
Installation von Elasticsearch unter Windows
Voraussetzungen
Die Windows-Version von Elasticsearch kann über diesen Link abgerufen werden: https://www.elastic.co/downloads/elasticsearch . Die neueste stabile Version ist immer ganz oben.
Bei der Installation unter Windows benötigen wir das .ZIP Archiv. Klicken Sie auf den Link im Abschnitt Downloads: und speichern Sie die Datei auf Ihrem Computer.
Diese Version von Elastic ist "tragbar", dh Sie müssen kein Installationsprogramm ausführen, um das Programm verwenden zu können. Entpacken Sie den Inhalt der Datei an einen Ort, an den Sie sich leicht erinnern können. Zur Demonstration nehmen wir an, dass Sie alles nach C:\elasticsearch elasticsearch entpackt haben.
Beachten Sie, dass das Archiv standardmäßig einen Ordner namens elasticsearch-<version> enthält. Sie können diesen Ordner entweder nach C:\ extrahieren und in elasticsearch umbenennen oder C:\elasticsearch selbst erstellen und dann nur den Inhalt des Ordners im Archiv entpacken dorthin
Da Elasticsearch in Java geschrieben ist, muss Java Runtime Environment verwendet werden. Überprüfen Sie daher vor dem Ausführen des Servers, ob Java verfügbar ist, indem Sie eine Eingabeaufforderung öffnen und Folgendes eingeben:
java -version
Sie sollten eine Antwort erhalten, die so aussieht:
java version "1.8.0_91"
Java(TM) SE Runtime Environment (build 1.8.0_91-b14)
Java HotSpot(TM) Client VM (build 25.91-b14, mixed mode)
Wenn Sie stattdessen Folgendes sehen
'java' wird nicht als interner oder externer Befehl, bedienbares Programm oder Batchdatei erkannt.
Java ist nicht auf Ihrem System installiert oder nicht ordnungsgemäß konfiguriert. Sie können diesem Tutorial folgen, um Java (neu) zu installieren. Stellen Sie außerdem sicher, dass diese Umgebungsvariablen auf ähnliche Werte gesetzt sind:
| Variable | Wert |
|---|---|
| JAVA_HOME | C: \ Programme \ Java \ jre |
| PFAD | …; C: \ Programme \ Java \ jre |
Wenn Sie noch nicht wissen, wie diese Variablen untersucht werden sollen, lesen Sie dieses Tutorial .
Führen Sie die Batchdatei aus
Öffnen Sie bei installiertem Java den Ordner bin . Es befindet sich direkt in dem Ordner, in den Sie alles entpackt haben, also unter c:\elasticsearch\bin . In diesem Ordner befindet sich eine Datei namens elasticsearch.bat , mit der Elasticsearch in einem Befehlsfenster gestartet werden kann. Dies bedeutet, dass vom Prozess protokollierte Informationen im Eingabeaufforderungsfenster angezeigt werden. Um den Server zu stoppen, drücken Sie STRG C oder schließen Sie einfach das Fenster.
Als Windows-Dienst ausführen
Idealerweise möchten Sie kein zusätzliches Fenster haben, das Sie während der Entwicklung nicht loswerden können. Aus diesem Grund kann Elasticsearch so konfiguriert werden, dass es als Dienst ausgeführt wird.
Bevor wir Elasticsearch als Dienst installieren können, müssen Sie der Datei C:\elasticsearch\config\jvm.options eine Zeile C:\elasticsearch\config\jvm.options :
Das Service-Installationsprogramm erfordert, dass die Einstellung für die Thread-
jvm.optionsinjvm.optionskonfiguriertjvm.optionsbevor Sie den Service installieren. Unter 32-Bit-Windows sollten Sie-Xss320k[…] und unter 64-Bit-Windows-Xss1mder Datei-Xss1mjvm.options. [Quelle]
Wenn Sie diese Änderung vorgenommen haben, öffnen Sie eine Eingabeaufforderung und navigieren Sie mit dem folgenden Befehl zum bin Verzeichnis:
C:\Users\user> cd c:\elasticsearch\bin
Das Service Management wird von elasticsearch-service.bat abgewickelt. In älteren Versionen könnte diese Datei einfach als service.bat . Um alle verfügbaren Argumente anzuzeigen, führen Sie sie ohne aus:
C:\elasticsearch\bin> elasticsearch-service.bat
Usage: elasticsearch-service.bat install|remove|start|stop|manager [SERVICE_ID]
Die Ausgabe sagt uns auch, dass es ein optionales SERVICE_ID Argument gibt, wir können es jedoch SERVICE_ID ignorieren. Um den Dienst zu installieren, führen Sie einfach Folgendes aus:
C:\elasticsearch\bin> elasticsearch-service.bat install
Nach der Installation des Dienstes können Sie ihn mit den entsprechenden Argumenten starten und stoppen. Starten Sie den Dienst, um den Dienst zu starten
C:\elasticsearch\bin> elasticsearch-service.bat start
und um es zu stoppen, renne
C:\elasticsearch\bin> elasticsearch-service.bat stop
Wenn Sie stattdessen eine GUI zur Verwaltung des Dienstes bevorzugen, können Sie den folgenden Befehl verwenden:
C:\elasticsearch\bin> elasticsearch-service.bat manager
Daraufhin wird der Elastic Service Manager geöffnet, in dem Sie einige dienstbezogene Einstellungen anpassen und den Dienst mithilfe der Schaltflächen am unteren Rand der ersten Registerkarte anhalten bzw. starten können.
Dokument indizieren und abrufen
Der Zugriff auf Elasticsearch erfolgt über eine HTTP-REST-API, normalerweise unter Verwendung der cURL-Bibliothek. Die Nachrichten zwischen dem Suchserver und dem Client (Ihrer oder Ihrer Anwendung) werden in Form von JSON-Zeichenfolgen gesendet. Standardmäßig wird Elasticsearch auf Port 9200 ausgeführt.
In den folgenden Beispielen wird ?pretty Pretty hinzugefügt, um Elasticsearch anzuweisen, die JSON-Antwort zu verbessern. Wenn Sie diese Endpunkte innerhalb einer Anwendung verwenden, müssen Sie diesen Abfrageparameter nicht hinzufügen.
Dokumente indizieren
Wenn wir Informationen innerhalb eines Index später aktualisieren möchten, empfiehlt es sich, den von uns indizierten Dokumenten eindeutige IDs zuzuweisen. So fügen Sie ein Dokument mit dem Namen megacorp , mit dem Typ employee und ID 1 :
curl -XPUT "http://localhost:9200/megacorp/employee/1?pretty" -d'
{
"first_name" : "John",
"last_name" : "Smith",
"age" : 25,
"about" : "I love to go rock climbing",
"interests": [ "sports", "music" ]
}'
Antwort:
{
"_index": "megacorp",
"_type": "employee",
"_id": "1",
"_version": 1,
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}
Der Index wird erstellt, wenn er beim Senden des PUT-Aufrufs nicht vorhanden ist.
Indizierung ohne ID
POST /megacorp/employee?pretty
{
"first_name" : "Jane",
"last_name" : "Smith",
"age" : 32,
"about" : "I like to collect rock albums",
"interests": [ "music" ]
}
Antwort:
{
"_index": "megacorp",
"_type": "employee",
"_id": "AVYg2mBJYy9ijdngfeGa",
"_version": 1,
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
},
"created": true
}
Dokumente abrufen
curl -XGET "http://localhost:9200/megacorp/employee/1?pretty"
Antwort:
{
"_index": "megacorp",
"_type": "employee",
"_id": "1",
"_version": 1,
"found": true,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": 25,
"about": "I love to go rock climbing",
"interests": [
"sports",
"music"
]
}
}
Holen Sie 10 Dokumente aus dem megacorp Index mit dem Typ employee :
curl -XGET "http://localhost:9200/megacorp/employee/_search?pretty"
Antwort:
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 2,
"max_score": 1,
"hits": [
{
"_index": "megacorp",
"_type": "employee",
"_id": "1",
"_score": 1,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": 25,
"about": "I love to go rock climbing",
"interests": [
"sports",
"music"
]
}
},
{
"_index": "megacorp",
"_type": "employee",
"_id": "AVYg2mBJYy9ijdngfeGa",
"_score": 1,
"_source": {
"first_name": "Jane",
"last_name": "Smith",
"age": 32,
"about": "I like to collect rock albums",
"interests": [
"music"
]
}
}
]
}
}
Einfache Suche mit der match , die im angegebenen Feld nach genauen Übereinstimmungen sucht:
curl -XGET "http://localhost:9200/megacorp/employee/_search" -d'
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}'
Antwort:
{
"took": 2,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 0.6931472,
"hits": [
{
"_index": "megacorp",
"_type": "employee",
"_id": "1",
"_score": 0.6931472,
"_source": {
"first_name": "John",
"last_name": "Smith",
"age": 25,
"about": "I love to go rock climbing",
"interests": [
"sports",
"music"
]
}
}
]
}
}
Grundlegende Suchparameter mit Beispielen:
Standardmäßig wird das vollständig indizierte Dokument als Teil aller Suchvorgänge zurückgegeben. Dies wird als Quelle (Feld _source in den _source ) bezeichnet. Wenn wir nicht möchten, dass das gesamte Quelldokument zurückgegeben wird, haben wir die Möglichkeit, nur einige wenige Felder aus der Quelle _source , oder _source auf false gesetzt werden, um das Feld vollständig auszulassen.
Dieses Beispiel zeigt, wie zwei Felder, account_number und balance (innerhalb von _source ) aus der Suche zurückgegeben werden:
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match_all": {} },
"_source": ["account_number", "balance"]
}'
Beachten Sie, dass das obige Beispiel die im Feld _source zurückgegebenen Informationen reduziert. Es wird immer nur ein Feld mit dem Namen _source jedoch werden nur die Felder account_number und balance berücksichtigt.
Wenn Sie aus einem SQL-Hintergrund stammen, ähnelt das obige Konzept der SQL-Abfrage
SELECT account_number, balance FROM bank;
Nun geht es weiter zum Abfrageteil. Bisher haben wir gesehen, wie die match_all Abfrage verwendet wird, um alle Dokumente match_all . Lassen Sie uns nun eine neue Abfrage einführen, die Übereinstimmungsabfrage genannt wird. Diese Abfrage kann als einfache Feldsuchabfrage (z. B. Suche nach einem bestimmten Feld oder einer Gruppe von Feldern) betrachtet werden.
In diesem Beispiel wird das Konto mit der account_number 20 :
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match": { "account_number": 20 } }
}'
In diesem Beispiel werden alle Konten zurückgegeben, die den Begriff "Mühle" in der address :
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match": { "address": "mill" } }
}'
In diesem Beispiel werden alle Konten zurückgegeben, die den Begriff "Mühle" oder "Spur" in der address :
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match": { "address": "mill lane" } }
}'
Dieses Beispiel ist eine Variante von match ( match_phrase ), die die Abfrage in Begriffe match_phrase und nur Dokumente zurückgibt, die alle Begriffe in der address relativ zueinander an denselben Positionen enthalten [1] .
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match_phrase": { "address": "mill lane" } }
}'
Lassen Sie uns nun die Abfrage bool (ean) einführen. Die bool-Abfrage ermöglicht es uns, kleinere Abfragen mithilfe der booleschen Logik zu größeren Abfragen zusammenzusetzen.
In diesem Beispiel werden zwei Übereinstimmungsabfragen erstellt und alle Konten zurückgegeben, die "mill" und "lane" in der Adresse enthalten:
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": {
"bool": {
"must": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}'
Im obigen Beispiel gibt die Klausel bool must alle Abfragen an, die erfüllt sein müssen, damit ein Dokument als Übereinstimmung betrachtet wird.
Im Gegensatz dazu erstellt dieses Beispiel zwei Übereinstimmungsabfragen und gibt alle Konten zurück, die "mill" oder "lane" in der address :
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": {
"bool": {
"should": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}'
Im obigen Beispiel gibt die Klausel bool should eine Liste von Abfragen an, die beide zutreffen müssen, damit ein Dokument als Übereinstimmung betrachtet wird.
In diesem Beispiel werden zwei Übereinstimmungsabfragen erstellt und alle Konten zurückgegeben, die weder "mill" noch "lane" in der address :
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": {
"bool": {
"must_not": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}'
Im obigen Beispiel gibt die bool-Klausel must_not eine Liste von Abfragen an, von denen keine wahr sein muss, damit ein Dokument als Übereinstimmung betrachtet wird.
Innerhalb einer bool-Abfrage können wir must-, soll- und must_not-Klauseln gleichzeitig kombinieren. Darüber hinaus können Bool-Abfragen in einer dieser Bool-Klauseln zusammengestellt werden, um komplexe Boolesche Logik auf mehreren Ebenen nachzuahmen.
In diesem Beispiel werden alle Konten zurückgegeben, die Personen gehören, die genau 40 Jahre alt sind und nicht in Washington (kurz WA ) leben:
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": {
"bool": {
"must": [
{ "match": { "age": "40" } }
],
"must_not": [
{ "match": { "state": "WA" } }
]
}
}
}'
Elasticsearch und Kibana unter CentOS 7 installieren
Zur Ausführung von Elasticsearch ist auf dem Computer eine Java Runtime Environment (JRE) erforderlich. Elasticsearch erfordert Java 7 oder höher und empfiehlt Oracle JDK version 1.8.0_73 .
Stellen Sie also sicher, dass Sie Java in Ihrem System haben. Wenn nicht, folgen Sie den Anweisungen:
# Install wget with yum
yum -y install wget
# Download the rpm jre-8u60-linux-x64.rpm for 64 bit
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u60-b27/jre-8u60-linux-x64.rpm"
# Download the rpm jre-8u101-linux-i586.rpm for 32 bit
wget --no-cookies --no-check-certificate --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com%2F; oraclelicense=accept-securebackup-cookie" "http://download.oracle.com/otn-pub/java/jdk/8u101-b13/jre-8u101-linux-i586.rpm"
# Install jre-.*.rpm
rpm -ivh jre-.*.rpm
Java sollte jetzt in Ihrem centOS-System installiert sein. Sie können es überprüfen mit:
java -version
Elasticsearch herunterladen und installieren
# Download elasticsearch-2.3.5.rpm
wget https://download.elastic.co/elasticsearch/release/org/elasticsearch/distribution/rpm/elasticsearch/2.3.5/elasticsearch-2.3.5.rpm
# Install elasticsearch-.*.rpm
rpm -ivh elasticsearch-.*.rpm
Ausführen von elasticsearch als systemd-Dienst beim Start
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
# check the current status to ensure everything is okay.
systemctl status elasticsearch
Kibana installieren
Importiere zuerst den GPG-Schlüssel bei rpm
sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
Dann erstellen Sie ein lokales Repository kibana.repo
sudo vi /etc/yum.repos.d/kibana.repo
Und füge folgenden Inhalt hinzu:
[kibana-4.4]
name=Kibana repository for 4.4.x packages
baseurl=http://packages.elastic.co/kibana/4.4/centos
gpgcheck=1
gpgkey=http://packages.elastic.co/GPG-KEY-elasticsearch
enabled=1
Installieren Sie nun die Kibana mit folgendem Befehl:
yum -y install kibana
Beginnen Sie mit:
systemctl start kibana
Status prüfen mit:
systemctl status kibana
Sie können es als Startdienst ausführen.
systemctl enable kibana