Elasticsearch Tutorial
Iniziare con Elasticsearch
Ricerca…
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 |
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
- Scarica l'ultima versione stabile di elasticsearch qui .
- 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.optionsprima di installare il servizio. Su Windows a 32 bit, dovresti aggiungere-Xss320k[...] e su Windows a 64 bit dovresti aggiungere-Xss1mal filejvm.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.
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"
]
}
}
]
}
}
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" } }
]
}
}
}'
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