ElasticsearchErste Schritte mit Elasticsearch


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

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" } }
      ]
    }
  }
}'
 

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"
          ]
        }
      }
    ]
  }
}

 

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
 

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

  1. Laden Sie die neueste stabile Version von Elasticsearch hier herunter.
  2. 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.options in jvm.options konfiguriert jvm.options bevor Sie den Service installieren. Unter 32-Bit-Windows sollten Sie -Xss320k […] und unter 64-Bit-Windows -Xss1m der Datei -Xss1m jvm.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.