ElasticsearchIniziare con Elasticsearch


Osservazioni

Elasticsearch è un avanzato server di ricerca open source basato su Lucene e scritto in Java.

Fornisce funzionalità di ricerca completa e parziale distribuita, basata su query e basata sulla geolocalizzazione accessibile tramite un'API REST HTTP.

Versioni

Versione Data di rilascio
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

Parametri di ricerca di base con esempi:

Per impostazione predefinita, il documento indicizzato completo viene restituito come parte di tutte le ricerche. Questo è indicato come fonte (il campo _source nei risultati della ricerca). Se non vogliamo che venga restituito l'intero documento sorgente, abbiamo la possibilità di richiedere solo alcuni campi dall'interno della sorgente da restituire, oppure possiamo impostare _source su false per omettere completamente il campo.

Questo esempio mostra come restituire due campi, account_number e balance (all'interno di _source ), dalla ricerca:

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

Si noti che l'esempio sopra riportato riduce semplicemente le informazioni restituite nel campo _source . _source comunque solo un campo denominato _source ma verranno inclusi solo i campi account_number e balance .

Se provieni da uno sfondo SQL, quanto sopra è in qualche modo simile nel concetto alla query SQL

SELECT account_number, balance FROM bank;
 

Passiamo ora alla parte della query. In precedenza, abbiamo visto come viene utilizzata la query match_all per abbinare tutti i documenti. Introduciamo ora una nuova query chiamata query di corrispondenza, che può essere pensata come una query di ricerca fielded di base (ovvero una ricerca eseguita su un campo o una serie di campi specifici).

Questo esempio restituisce l'account con account_number impostato su 20 :

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

Questo esempio restituisce tutti gli account contenenti il ​​termine "mill" address :

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

Questo esempio restituisce tutti gli account contenenti il ​​termine "mill" o "corsia" address :

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

Questo esempio è una variante della match ( match_phrase ) che divide la query in termini e restituisce solo i documenti che contengono tutti i termini address nelle stesse posizioni l'uno rispetto all'altro [1] .

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

Introduciamo ora la query bool (ean). La query bool ci permette di comporre query più piccole in query più grandi usando la logica booleana.

Questo esempio compone due query di corrispondenza e restituisce tutti gli account contenenti "mill" e "corsia" nell'indirizzo:

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

Nell'esempio precedente, la clausola bool must specificare tutte le query che devono essere vere per un documento da considerare come una corrispondenza.

Al contrario, questo esempio compone due query di corrispondenza e restituisce tutti gli account contenenti "mill" o "corsia" address :

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

Nell'esempio precedente, la clausola bool should specificare un elenco di query che devono essere vere per un documento da considerare come una corrispondenza.

Questo esempio compone due query di corrispondenza e restituisce tutti gli account che non contengono né "mill" né "corsia" address :

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

Nell'esempio precedente, la clausola must_not di bool specifica un elenco di query che nessuna delle quali deve essere vera per un documento considerato come una corrispondenza.

Possiamo combinare le clausole must, should e must_not contemporaneamente all'interno di una query bool. Inoltre, possiamo comporre query bool all'interno di una qualsiasi di queste clausole bool per simulare qualsiasi logica booleana multilivello complessa.

Questo esempio restituisce tutti gli account che appartengono a persone che hanno esattamente 40 anni e che non vivono a Washington ( WA in breve):

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

Indicizzazione e recupero di un documento

Elasticsearch è accessibile tramite un'API REST HTTP, in genere utilizzando la libreria cURL. I messaggi tra il server di ricerca e il client (la tua o la tua applicazione) vengono inviati sotto forma di stringhe JSON. Per impostazione predefinita, Elasticsearch viene eseguito sulla porta 9200.

Negli esempi seguenti, viene aggiunto ?pretty per dire a Elasticsearch di migliorare la risposta JSON. Quando si utilizzano questi endpoint all'interno di un'applicazione non è necessario aggiungere questo parametro di query.

Documenti di indicizzazione

Se intendiamo aggiornare le informazioni all'interno di un indice in un secondo momento, è una buona idea assegnare ID univoci ai documenti che indicizziamo. Per aggiungere un documento all'indice denominato megacorp , con tipo employee e ID 1 eseguire:

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

Risposta:

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

 

L'indice viene creato se non esiste quando inviamo la chiamata PUT.

Indicizzazione senza ID

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

Risposta:

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

 

Recupero di documenti

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

Risposta:

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

 

Scarica 10 documenti dall'indice megacorp con il tipo employee :

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

Risposta:

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

 

Ricerca semplice utilizzando la query di match , che cerca corrispondenze esatte nel campo fornito:

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

Risposta:

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

 

Installazione di Elasticsearch e Kibana su CentOS 7

Per eseguire Elasticsearch, è richiesto un Java Runtime Environment (JRE) sulla macchina. Elasticsearch richiede Java 7 o versioni successive e raccomanda Oracle JDK version 1.8.0_73 .

Quindi, assicurati di avere Java nel tuo sistema. In caso contrario, quindi seguire la procedura:

# 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 dovrebbe ora essere installato nel tuo sistema centOS. Puoi verificarlo con:

java -version
 

Scarica e installa elasticsearch

# 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   
 

Esecuzione di elasticsearch come servizio systemd all'avvio

sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch

# check the current status to ensure everything is okay.
systemctl status elasticsearch
 

Installazione di Kibana

Prima importazione chiave GPG su rpm

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

Quindi creare un repository locale kibana.repo

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

E aggiungi il seguente contenuto:

[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
 

Ora installa il kibana seguendo il seguente comando:

yum -y install kibana
 

Inizia con:

systemctl start kibana
 

Controlla lo stato con:

systemctl status kibana
 

Puoi eseguirlo come servizio di avvio.

systemctl enable kibana
 

Installazione di Elasticsearch su Ubuntu 14.04


Prerequisiti

Per eseguire Elasticsearch, è richiesto un Java Runtime Environment (JRE) sulla macchina. Elasticsearch richiede Java 7 o versioni successive e raccomanda Oracle JDK version 1.8.0_73 .

Installa 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
 

Controlla la versione di Java

java -version
 

Scarica e installa il pacchetto

Usando i binari

  1. Scarica l'ultima versione stabile di elasticsearch qui .
  2. Decomprimere il file ed eseguire

Linux:

$ bin/elasticsearch
 

Utilizzando apt-get

Un'alternativa al download di elasticsearch dal sito Web è l'installazione, utilizzando 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
 

Installazione di elasticsearch versione 5.x

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
 

Esecuzione come servizio su Linux:

Dopo aver installato quanto sopra non si avvia da solo. quindi abbiamo bisogno di avviarlo come servizio. Come avviare o interrompere Elasticsearch dipende dal fatto che il tuo sistema utilizzi SysV init o systemd. puoi controllarlo con il seguente comando.

ps -p 1
 

Se la tua distribuzione utilizza SysV init, dovrai eseguire:

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

Altrimenti se la tua distribuzione sta usando systemd:

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

Esegui il comando CURL dal tuo browser o da un client REST, per verificare se Elasticsearch è stato installato correttamente.

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

Installazione di Elasticsearch su Windows

Prerequisiti

La versione per Windows di Elasticsearch può essere ottenuta da questo link: https://www.elastic.co/downloads/elasticsearch . L'ultima versione stabile è sempre al top.

Poiché stiamo installando su Windows, abbiamo bisogno dell'archivio .ZIP . Fare clic sul collegamento nella sezione Downloads: e salvare il file sul computer.

Questa versione di elastico è "portatile", il che significa che non è necessario eseguire un programma di installazione per utilizzare il programma. Decomprimi il contenuto del file in una posizione che puoi facilmente ricordare. Per la dimostrazione, supponiamo che tu abbia decompresso tutto in C:\elasticsearch .

Si noti che l'archivio contiene una cartella denominata elasticsearch-<version> per impostazione predefinita, è possibile estrarre tale cartella in C:\ e rinominarla in elasticsearch o creare C:\elasticsearch autonomamente, quindi decomprimere solo il contenuto della cartella nell'archivio a lì.

Poiché Elasticsearch è scritto in Java, ha bisogno di Java Runtime Environment per funzionare. Quindi, prima di eseguire il server, controlla se Java è disponibile aprendo un prompt dei comandi e digitando:

java -version
 

Dovresti ricevere una risposta simile a questa:

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)
 

Se vedi invece il seguente

'java' non è riconosciuto come comando interno o esterno, programma eseguibile o file batch.

Java non è installato sul tuo sistema o non è configurato correttamente. Puoi seguire questo tutorial per (ri) installare Java. Inoltre, assicurati che queste variabili di ambiente siano impostate su valori simili:

Variabile Valore
JAVA_HOME C: \ Programmi \ Java \ jre
SENTIERO ...; C: \ Programmi \ Java \ jre

Se non sai ancora come ispezionare queste variabili consulta questo tutorial .

Esegui da un file batch

Con Java installato, apri la cartella bin . Può essere trovato direttamente nella cartella in cui è stato decompresso tutto, quindi dovrebbe trovarsi in c:\elasticsearch\bin . All'interno di questa cartella si trova un file chiamato elasticsearch.bat che può essere utilizzato per avviare Elasticsearch in una finestra di comando. Ciò significa che le informazioni registrate dal processo saranno visibili nella finestra del prompt dei comandi. Per fermare il server, premere CTRL C o semplicemente chiudere la finestra.

Esegui come servizio di Windows

Idealmente non si desidera avere una finestra aggiuntiva di cui non è possibile sbarazzarsi durante lo sviluppo e per questo motivo, Elasticsearch può essere configurato per essere eseguito come servizio.

Prima di poter installare Elasticsearch come servizio, è necessario aggiungere una riga al file C:\elasticsearch\config\jvm.options :

Il programma di installazione del servizio richiede che l'impostazione della dimensione dello stack di thread sia configurata in jvm.options prima di installare il servizio. Su Windows a 32 bit, dovresti aggiungere -Xss320k [...] e su Windows a 64 bit dovresti aggiungere -Xss1m al file jvm.options . [fonte]

Dopo aver apportato questa modifica, apri un prompt dei comandi e vai alla directory bin eseguendo il seguente comando:

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

La gestione dei servizi è gestita da elasticsearch-service.bat . Nelle versioni precedenti questo file potrebbe semplicemente essere chiamato service.bat . Per vedere tutti gli argomenti disponibili, eseguilo senza:

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

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

L'output ci dice anche che esiste un argomento SERVICE_ID facoltativo, ma per il momento possiamo ignorarlo. Per installare il servizio, esegui semplicemente:

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

Dopo aver installato il servizio, puoi avviarlo e interromperlo con i rispettivi argomenti. Per avviare il servizio, esegui

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

e per fermarlo, corri

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

Se preferisci una GUI per gestire il servizio, puoi utilizzare il seguente comando:

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

Verrà aperto Elastic Service Manager, che consente di personalizzare alcune impostazioni relative ai servizi e di interrompere / avviare il servizio utilizzando i pulsanti disponibili nella parte inferiore della prima scheda.