ElasticsearchAan de slag met Elasticsearch


Opmerkingen

Elasticsearch is een geavanceerde open source zoekserver op basis van Lucene en geschreven in Java.

Het biedt gedistribueerde volledige en gedeeltelijke tekst, op zoekopdrachten gebaseerde en op geolocatie gebaseerde zoekfunctionaliteit die toegankelijk is via een HTTP REST API.

versies

Versie Publicatiedatum
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

Basiszoekparameters met voorbeelden:

Standaard wordt het volledige geïndexeerde document geretourneerd als onderdeel van alle zoekopdrachten. Dit wordt de bron genoemd (veld _source in de zoekresultaten). Als we niet willen dat het hele brondocument wordt geretourneerd, hebben we de mogelijkheid om slechts enkele velden van binnenuit te retourneren, of we kunnen _source op false om het veld volledig weg te laten.

Dit voorbeeld laat zien hoe twee velden, account_number en balance (binnen _source ), uit de zoekopdracht worden _source :

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match_all": {} },
  "_source": ["account_number", "balance"]
}'
 

Merk op dat het bovenstaande voorbeeld eenvoudigweg de informatie vermindert die in het veld _source . Het retourneert nog steeds slechts één veld met de naam _source maar alleen de velden account_number en balance worden opgenomen.

Als u uit een SQL-achtergrond komt, is het bovenstaande enigszins vergelijkbaar in concept met de SQL-query

SELECT account_number, balance FROM bank;
 

Laten we nu verder gaan met het querygedeelte. Eerder hebben we gezien hoe de match_all query wordt gebruikt om alle documenten te matchen. Laten we nu een nieuwe query introduceren, de matchquery genaamd, die kan worden gezien als een standaardzoekopdracht met een veld (dat wil zeggen een zoekopdracht die is uitgevoerd tegen een specifiek veld of een set velden).

Dit voorbeeld geeft de rekening bij de account_number ingesteld op 20 :

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match": { "account_number": 20 } }
}'
 

In dit voorbeeld worden alle accounts geretourneerd die de term "mill" in het address :

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match": { "address": "mill" } }
}'
 

In dit voorbeeld worden alle accounts geretourneerd die de term "mill" of "lane" in het address :

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match": { "address": "mill lane" } }
}'
 

Dit voorbeeld is een variant van match ( match_phrase ) die de zoekopdracht in termen splitst en alleen documenten retourneert die alle termen in het address op dezelfde posities ten opzichte van elkaar bevatten [1] .

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": { "match_phrase": { "address": "mill lane" } }
}'
 

Laten we nu de bool (ean) -query introduceren. Met de bool-query kunnen we kleinere query's samenstellen in grotere query's met behulp van booleaanse logica.

In dit voorbeeld worden twee matchquery's samengesteld en worden alle accounts met "mill" en "lane" in het adres geretourneerd:

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
    "bool": {
      "must": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}'
 

In het bovenstaande voorbeeld geeft de bool must clausule alle query's op die waar moeten zijn om een document als een overeenkomst te kunnen beschouwen.

In dit voorbeeld worden daarentegen twee matchquery's samengesteld en worden alle accounts geretourneerd die "mill" of "lane" in het address :

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
    "bool": {
      "should": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}'
 

In het bovenstaande voorbeeld, de bool should clausule specificeert een lijst van vragen die beide moeten gelden voor een document dat moet worden beschouwd als een wedstrijd.

In dit voorbeeld worden twee matchquery's samengesteld en worden alle accounts geretourneerd die noch "mill" noch "lane" in het address :

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
    "bool": {
      "must_not": [
        { "match": { "address": "mill" } },
        { "match": { "address": "lane" } }
      ]
    }
  }
}'
 

In het bovenstaande voorbeeld geeft de bool must_not-clausule een lijst met query's op die allemaal niet waar moeten zijn om een document als een overeenkomst te kunnen beschouwen.

We kunnen clausules must, should en must_not tegelijkertijd in een bool-query combineren. Verder kunnen we bool-vragen in elk van deze bool-clausules samenstellen om elke complexe booleaanse logica met meerdere niveaus na te bootsen.

In dit voorbeeld worden alle accounts geretourneerd die horen bij mensen die exact 40 jaar oud zijn en niet in Washington wonen (kortweg WA ):

curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
  "query": {
    "bool": {
      "must": [
        { "match": { "age": "40" } }
      ],
      "must_not": [
        { "match": { "state": "WA" } }
      ]
    }
  }
}'
 

Een document indexeren en ophalen

Elasticsearch is toegankelijk via een HTTP REST API, meestal met behulp van de cURL-bibliotheek. De berichten tussen de zoekserver en de client (uw of uw toepassing) worden verzonden in de vorm van JSON-reeksen. Standaard wordt Elasticsearch uitgevoerd op poort 9200.

In de onderstaande voorbeelden is ?pretty toegevoegd om Elasticsearch te vertellen de JSON-reactie te verfraaien. Wanneer u deze eindpunten in een toepassing gebruikt, hoeft u deze queryparameter niet toe te voegen.

Documenten indexeren

Als we van plan zijn om informatie binnen een index later bij te werken, is het een goed idee om unieke ID's toe te wijzen aan de documenten die we indexeren. Om een document toe te voegen aan de index met de naam megacorp , met type employee en ID 1 uitgevoerd:

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

Reactie:

{
  "_index": "megacorp",
  "_type": "employee",
  "_id": "1",
  "_version": 1,
  "_shards": {
    "total": 2,
    "successful": 1,
    "failed": 0
  },
  "created": true
}

 

De index wordt gemaakt als deze niet bestaat wanneer we de PUT-oproep verzenden.

Indexeren zonder een ID

POST /megacorp/employee?pretty
{
    "first_name" :  "Jane",
    "last_name" :   "Smith",
    "age" :         32,
    "about" :       "I like to collect rock albums",
    "interests":  [ "music" ]
}
 

Reactie:

{
  "_index": "megacorp",
  "_type": "employee",
  "_id": "AVYg2mBJYy9ijdngfeGa",
  "_version": 1,
  "_shards": {
    "total": 2,
    "successful": 2,
    "failed": 0
  },
  "created": true
}

 

Documenten ophalen

curl -XGET "http://localhost:9200/megacorp/employee/1?pretty"
 

Reactie:

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

 

Haal 10 documenten uit de megacorp index met het type employee :

curl -XGET "http://localhost:9200/megacorp/employee/_search?pretty"
 

Reactie:

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

 

Eenvoudig zoeken met behulp van de match query, die eruit ziet voor de exacte wedstrijden in het veld:

curl -XGET "http://localhost:9200/megacorp/employee/_search" -d'
{
    "query" : {
        "match" : {
            "last_name" : "Smith"
        }
    }
}'
 

Reactie:

{
  "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 en Kibana installeren op CentOS 7

Om Elasticsearch te kunnen gebruiken, is een Java Runtime Environment (JRE) vereist op de machine. Elasticsearch vereist Java 7 of hoger en beveelt Oracle JDK version 1.8.0_73 .

Zorg er dus voor dat je Java in je systeem hebt. Zo niet, volg dan de procedure:

# 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 zou nu in uw centOS-systeem moeten zijn geïnstalleerd. Je kunt het controleren met:

java -version
 

Elasticsearch downloaden en installeren

# 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   
 

ElasticSearch uitvoeren als een systemd-service bij het opstarten

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 installeren

Importeer eerst de GPG-sleutel op rpm

sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
 

Maak vervolgens een lokale repository kibana.repo

sudo vi /etc/yum.repos.d/kibana.repo 
 

En voeg de volgende inhoud toe:

[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
 

Installeer nu de kibana met de volgende opdracht:

yum -y install kibana
 

Begin met:

systemctl start kibana
 

Controleer status met:

systemctl status kibana
 

U kunt het uitvoeren als een opstartservice.

systemctl enable kibana
 

Elasticsearch installeren op Ubuntu 14.04


voorwaarden

Om Elasticsearch te kunnen gebruiken, is een Java Runtime Environment (JRE) vereist op de machine. Elasticsearch vereist Java 7 of hoger en beveelt Oracle JDK version 1.8.0_73 .

Installeer 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
 

Controleer Java-versie

java -version
 

Pakket downloaden en installeren

Binaries gebruiken

  1. Download de laatste stabiele versie van Elasticsearch hier .
  2. Pak het bestand uit en voer het uit

Linux:

$ bin/elasticsearch
 

Apt-get gebruiken

Een alternatief voor het downloaden van ElasticSearch van de website is het installeren met 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-versie 5.x installeren

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
 

Uitgevoerd als een service op Linux:

Na het installeren start het bovenstaande niet zelf. dus we moeten het als een service starten. Hoe Elasticsearch te starten of te stoppen, hangt ervan af of uw systeem SysV init of systemd gebruikt. u kunt het controleren met de volgende opdracht.

ps -p 1
 

Als uw distributie SysV init gebruikt, moet u het volgende uitvoeren:

sudo update-rc.d elasticsearch defaults 95 10
sudo /etc/init.d/elasticsearch start
 

Anders als uw distributie systemd gebruikt:

sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
 

Voer de CURL opdracht uit vanuit uw browser of een REST-client om te controleren of Elasticsearch correct is geïnstalleerd.

curl -X GET http://localhost:9200/
 

Elasticsearch op Windows installeren

voorwaarden

De Windows-versie van Elasticsearch kan worden verkregen via deze link: https://www.elastic.co/downloads/elasticsearch . De nieuwste stabiele release staat altijd bovenaan.

Omdat we op Windows installeren, hebben we het .ZIP archief nodig. Klik op de link in het gedeelte Downloads: en sla het bestand op uw computer op.

Deze versie van elastiek is "draagbaar", wat betekent dat u geen installatieprogramma hoeft uit te voeren om het programma te gebruiken. Pak de inhoud van het bestand uit op een locatie die u gemakkelijk kunt onthouden. Voor een demonstratie gaan we ervan uit dat u alles naar C:\elasticsearch hebt uitgepakt.

Merk op dat het archief standaard een map met de naam elasticsearch-<version> , u kunt die map naar C:\ extraheren en hernoemen naar elasticsearch of zelf C:\elasticsearch en vervolgens alleen de inhoud van de map in het archief uitpakken naar daar.

Omdat Elasticsearch in Java is geschreven, heeft het de Java Runtime Environment nodig om te kunnen functioneren. Controleer dus voordat u de server uitvoert, of Java beschikbaar is door een opdrachtprompt te openen en te typen:

java -version
 

Je zou een reactie moeten krijgen die er zo uitziet:

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)
 

Als u in plaats daarvan het volgende ziet

'java' wordt niet herkend als een interne of externe opdracht, een bruikbaar programma of een batchbestand.

Java is niet op uw systeem geïnstalleerd of is niet correct geconfigureerd. U kunt deze zelfstudie volgen om Java (opnieuw) te installeren. Zorg er ook voor dat deze omgevingsvariabelen op vergelijkbare waarden zijn ingesteld:

veranderlijk Waarde
JAVA_HOME C: \ Program Files \ Java \ jre
PAD ...; C: \ Program Files \ Java \ jre

Raadpleeg deze zelfstudie als u nog niet weet hoe u deze variabelen moet inspecteren.

Uitvoeren van batchbestand

Open Java en open de map bin . Het kan direct worden gevonden in de map waarnaar u alles hebt uitgepakt, dus het zou onder c:\elasticsearch\bin . Binnen deze map bevindt zich een bestand genaamd elasticsearch.bat dat kan worden gebruikt om Elasticsearch in een opdrachtvenster te starten. Dit betekent dat de informatie die door het proces is vastgelegd, zichtbaar is in het opdrachtpromptvenster. Om de server te stoppen, drukt u op CTRL C of sluit u eenvoudig het venster.

Uitvoeren als een Windows-service

In het ideale geval wilt u geen extra venster waar u tijdens de ontwikkeling niet van af kunt komen, en om deze reden kan Elasticsearch worden geconfigureerd om als een service te worden uitgevoerd.

Voordat we Elasticsearch als een service kunnen installeren, moeten we een regel toevoegen aan het bestand C:\elasticsearch\config\jvm.options :

Het service-installatieprogramma vereist dat de jvm.options instelling wordt geconfigureerd in jvm.options voordat u de service installeert. Op 32-bits Windows moet u -Xss320k […] toevoegen en op 64-bits Windows moet u -Xss1m toevoegen aan het bestand jvm.options . [bron]

Nadat u die wijziging hebt aangebracht, opent u een opdrachtprompt en navigeert u naar de map bin door de volgende opdracht uit te voeren:

C:\Users\user> cd c:\elasticsearch\bin
 

Servicebeheer wordt afgehandeld door elasticsearch-service.bat . In oudere versies kan dit bestand eenvoudigweg service.bat worden genoemd. Om alle beschikbare argumenten te zien, voer het uit zonder:

C:\elasticsearch\bin> elasticsearch-service.bat

Usage: elasticsearch-service.bat install|remove|start|stop|manager [SERVICE_ID]
 

De uitvoer vertelt ons ook dat er een optioneel argument SERVICE_ID , maar we kunnen dit vooralsnog negeren. Om de service te installeren, voert u eenvoudig uit:

C:\elasticsearch\bin> elasticsearch-service.bat install
 

Nadat u de service hebt geïnstalleerd, kunt u deze starten en stoppen met de bijbehorende argumenten. Start om de service te starten

C:\elasticsearch\bin> elasticsearch-service.bat start
 

en om het te stoppen, ren je

C:\elasticsearch\bin> elasticsearch-service.bat stop
 

Als u liever een GUI gebruikt om de service te beheren, kunt u de volgende opdracht gebruiken:

C:\elasticsearch\bin> elasticsearch-service.bat manager
 

Hiermee wordt Elastic Service Manager geopend, waarmee u enkele servicegerelateerde instellingen kunt aanpassen en de service kunt stoppen / starten met behulp van de knoppen onder aan het eerste tabblad.