Elasticsearch Tutorial
Empezando con Elasticsearch
Buscar..
Observaciones
Elasticsearch es un servidor de búsqueda de código abierto avanzado basado en Lucene y escrito en Java.
Proporciona funciones de búsqueda distribuidas de texto completo y parcial, basadas en consultas y geolocalización accesibles a través de una API REST HTTP.
Versiones
| Versión | Fecha de lanzamiento |
|---|---|
| 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 |
Instalando Elasticsearch en Ubuntu 14.04
Prerrequisitos
Para ejecutar Elasticsearch, se requiere un Java Runtime Environment (JRE) en la máquina. Elasticsearch requiere Java 7 o superior y recomienda Oracle JDK version 1.8.0_73 .
Instalar 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
Comprobar la versión de Java
java -version
Descargar e instalar el paquete
Utilizando binarios
- Descarga la última versión estable de Elasticsearch aquí .
- Descomprima el archivo y ejecute
Linux:
$ bin/elasticsearch
Utilizando apt-get
Una alternativa a la descarga de elasticsearch desde el sitio web es instalarlo, usando 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
Instalación de elasticsearch versión 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
Ejecutando como un servicio en Linux:
Después de instalar lo anterior no se inicia solo. por lo que tenemos que iniciarlo como un servicio. Cómo iniciar o detener Elasticsearch depende de si su sistema utiliza SysV init o systemd. Puedes comprobarlo con el siguiente comando.
ps -p 1
Si su distribución utiliza SysV init, deberá ejecutar:
sudo update-rc.d elasticsearch defaults 95 10
sudo /etc/init.d/elasticsearch start
De lo contrario, si su distribución está usando systemd:
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
Ejecute el comando CURL desde su navegador o un cliente REST para verificar si Elasticsearch se ha instalado correctamente.
curl -X GET http://localhost:9200/
Instalación de Elasticsearch en Windows
Prerrequisitos
La versión para Windows de Elasticsearch se puede obtener en este enlace: https://www.elastic.co/downloads/elasticsearch . La última versión estable está siempre en la parte superior.
Como estamos instalando en Windows, necesitamos el archivo .ZIP . Haga clic en el enlace en la sección Downloads: y guarde el archivo en su computadora.
Esta versión de elastic es "portátil", lo que significa que no necesita ejecutar un instalador para usar el programa. Descomprima el contenido del archivo en una ubicación que pueda recordar fácilmente. Para la demostración, asumiremos que has descomprimido todo en C:\elasticsearch .
Tenga en cuenta que el archivo contiene una carpeta llamada elasticsearch-<version> de forma predeterminada, puede extraer esa carpeta a C:\ y cambiarle el nombre a elasticsearch o crear C:\elasticsearch usted mismo, luego descomprimir solo el contenido de la carpeta en el archivo a ahi
Dado que Elasticsearch está escrito en Java, necesita el entorno de ejecución de Java para funcionar. Entonces, antes de ejecutar el servidor, compruebe si Java está disponible abriendo un símbolo del sistema y escribiendo:
java -version
Deberías obtener una respuesta como esta:
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)
Si ves lo siguiente en su lugar
'java' no se reconoce como un comando interno o externo, un programa operable o un archivo por lotes.
Java no está instalado en su sistema o no está configurado correctamente. Puedes seguir este tutorial para (re) instalar Java. Además, asegúrese de que estas variables de entorno estén configuradas en valores similares:
| Variable | Valor |
|---|---|
| JAVA_HOME | C: \ Archivos de programa \ Java \ jre |
| CAMINO | ...; C: \ Archivos de programa \ Java \ jre |
Si aún no sabe cómo inspeccionar estas variables, consulte este tutorial .
Ejecutar desde archivo por lotes
Con Java instalado, abre la carpeta bin . Se puede encontrar directamente en la carpeta en la que se descomprimió todo, por lo que debería estar en c:\elasticsearch\bin . Dentro de esta carpeta hay un archivo llamado elasticsearch.bat que se puede usar para iniciar Elasticsearch en una ventana de comandos. Esto significa que la información registrada por el proceso será visible en la ventana del símbolo del sistema. Para detener el servidor, presione CTRL C o simplemente cierre la ventana.
Ejecutar como un servicio de Windows
Lo ideal es que no desee tener una ventana adicional de la que no pueda deshacerse durante el desarrollo y, por este motivo, Elasticsearch puede configurarse para que se ejecute como un servicio.
Antes de poder instalar Elasticsearch como un servicio, necesitamos agregar una línea al archivo C:\elasticsearch\config\jvm.options :
El instalador del servicio requiere que la configuración de tamaño de pila de subprocesos esté configurada en
jvm.optionsantes de instalar el servicio. En Windows de 32 bits, debe agregar-Xss320k[...] y en Windows de 64 bits, debe agregar-Xss1mal archivojvm.options. [fuente]
Una vez que haya realizado ese cambio, abra un símbolo del sistema y navegue hasta el directorio bin ejecutando el siguiente comando:
C:\Users\user> cd c:\elasticsearch\bin
La gestión del servicio es manejada por elasticsearch-service.bat . En versiones anteriores, este archivo podría llamarse simplemente service.bat . Para ver todos los argumentos disponibles, ejecútalo sin ninguna:
C:\elasticsearch\bin> elasticsearch-service.bat
Usage: elasticsearch-service.bat install|remove|start|stop|manager [SERVICE_ID]
La salida también nos dice que hay un argumento SERVICE_ID opcional, pero podemos ignorarlo por ahora. Para instalar el servicio, simplemente ejecute:
C:\elasticsearch\bin> elasticsearch-service.bat install
Después de instalar el servicio, puede iniciarlo y detenerlo con los argumentos correspondientes. Para iniciar el servicio, ejecute
C:\elasticsearch\bin> elasticsearch-service.bat start
y para detenerlo, correr
C:\elasticsearch\bin> elasticsearch-service.bat stop
Si prefiere una GUI para administrar el servicio, puede usar el siguiente comando:
C:\elasticsearch\bin> elasticsearch-service.bat manager
Esto abrirá Elastic Service Manager, que le permite personalizar algunas configuraciones relacionadas con el servicio, así como detener / iniciar el servicio utilizando los botones que se encuentran en la parte inferior de la primera pestaña.
Indexación y recuperación de un documento
Se accede a Elasticsearch a través de una API REST HTTP, generalmente utilizando la biblioteca cURL. Los mensajes entre el servidor de búsqueda y el cliente (su o su aplicación) se envían en forma de cadenas JSON. Por defecto, Elasticsearch se ejecuta en el puerto 9200.
En los ejemplos a continuación, se agrega ?pretty Pretty para decirle a Elasticsearch que pretenda la respuesta JSON. Cuando utilice estos puntos finales dentro de una aplicación, no necesita agregar este parámetro de consulta.
Indexación de documentos
Si pretendemos actualizar la información dentro de un índice más adelante, es una buena idea asignar identificaciones únicas a los documentos que indexamos. Para agregar un documento al índice llamado megacorp , con el tipo employee y la ejecución de 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" ]
}'
Respuesta:
{
"_index": "megacorp",
"_type": "employee",
"_id": "1",
"_version": 1,
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"created": true
}
El índice se crea si no existe cuando enviamos la llamada PUT.
Indexación sin identificación
POST /megacorp/employee?pretty
{
"first_name" : "Jane",
"last_name" : "Smith",
"age" : 32,
"about" : "I like to collect rock albums",
"interests": [ "music" ]
}
Respuesta:
{
"_index": "megacorp",
"_type": "employee",
"_id": "AVYg2mBJYy9ijdngfeGa",
"_version": 1,
"_shards": {
"total": 2,
"successful": 2,
"failed": 0
},
"created": true
}
Recuperando documentos
curl -XGET "http://localhost:9200/megacorp/employee/1?pretty"
Respuesta:
{
"_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"
]
}
}
Obtenga 10 documentos del índice de megacorp con el employee tipo:
curl -XGET "http://localhost:9200/megacorp/employee/_search?pretty"
Respuesta:
{
"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"
]
}
}
]
}
}
Búsqueda simple utilizando la consulta de match , que busca coincidencias exactas en el campo provisto:
curl -XGET "http://localhost:9200/megacorp/employee/_search" -d'
{
"query" : {
"match" : {
"last_name" : "Smith"
}
}
}'
Respuesta:
{
"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"
]
}
}
]
}
}
Parámetros básicos de búsqueda con ejemplos:
De forma predeterminada, el documento indexado completo se devuelve como parte de todas las búsquedas. Esto se conoce como la fuente (campo _source en los resultados de búsqueda). Si no queremos que se devuelva todo el documento de origen, podemos solicitar que solo se devuelvan algunos campos dentro de la fuente, o podemos establecer _source en falso para omitir el campo por completo.
Este ejemplo muestra cómo devolver dos campos, account_number y balance (dentro de _source ), de la búsqueda:
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match_all": {} },
"_source": ["account_number", "balance"]
}'
Tenga en cuenta que el ejemplo anterior simplemente reduce la información devuelta en el campo _source . Todavía devolverá solo un campo llamado _source pero solo se account_number los campos account_number y balance .
Si proviene de un fondo SQL, el concepto anterior es algo similar a la consulta SQL
SELECT account_number, balance FROM bank;
Ahora vamos a pasar a la parte de consulta. Anteriormente, hemos visto cómo se match_all consulta match_all para hacer coincidir todos los documentos. Ahora introduzcamos una nueva consulta llamada consulta de coincidencia, que se puede considerar como una consulta de búsqueda de campo básica (es decir, una búsqueda realizada en un campo específico o conjunto de campos).
Este ejemplo devuelve la cuenta con el account_number establecido en 20 :
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match": { "account_number": 20 } }
}'
Este ejemplo devuelve todas las cuentas que contienen el término "molino" en la address :
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match": { "address": "mill" } }
}'
Este ejemplo devuelve todas las cuentas que contienen el término "molino" o "carril" en la address :
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match": { "address": "mill lane" } }
}'
Este ejemplo es una variante de match ( match_phrase ) que divide la consulta en términos y solo devuelve documentos que contienen todos los términos en la address en las mismas posiciones entre sí [1] .
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": { "match_phrase": { "address": "mill lane" } }
}'
Ahora vamos a introducir la consulta bool (ean). La consulta bool nos permite componer consultas más pequeñas en consultas más grandes usando la lógica booleana.
Este ejemplo compone dos consultas de coincidencia y devuelve todas las cuentas que contienen "mill" y "lane" en la dirección:
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": {
"bool": {
"must": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}'
En el ejemplo anterior, la cláusula bool must especificar todas las consultas que deben ser verdaderas para que un documento se considere una coincidencia.
En contraste, este ejemplo compone dos consultas de coincidencia y devuelve todas las cuentas que contienen "mill" o "carril" en la address :
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": {
"bool": {
"should": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}'
En el ejemplo anterior, la cláusula bool should especificar una lista de consultas, cualquiera de las cuales debe ser cierta para que un documento se considere una coincidencia.
Este ejemplo compone dos consultas de coincidencia y devuelve todas las cuentas que no contienen "mill" ni "lane" en la address :
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": {
"bool": {
"must_not": [
{ "match": { "address": "mill" } },
{ "match": { "address": "lane" } }
]
}
}
}'
En el ejemplo anterior, la cláusula bool must_not especifica una lista de consultas, ninguna de las cuales debe ser cierta para que un documento se considere una coincidencia.
Podemos combinar las cláusulas must, should y must_not simultáneamente en una consulta bool. Además, podemos componer consultas bool dentro de cualquiera de estas cláusulas bool para imitar cualquier lógica booleana multinivel compleja.
Este ejemplo devuelve todas las cuentas que pertenecen a personas que tienen exactamente 40 años y no viven en Washington ( WA para abreviar):
curl -XPOST 'localhost:9200/bank/_search?pretty' -d '
{
"query": {
"bool": {
"must": [
{ "match": { "age": "40" } }
],
"must_not": [
{ "match": { "state": "WA" } }
]
}
}
}'
Instalando Elasticsearch y Kibana en CentOS 7
Para ejecutar Elasticsearch, se requiere un Java Runtime Environment (JRE) en la máquina. Elasticsearch requiere Java 7 o superior y recomienda Oracle JDK version 1.8.0_73 .
Por lo tanto, asegúrese de tener Java en su sistema. Si no, siga el procedimiento:
# 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 ya debería estar instalado en su sistema centOS. Puedes comprobarlo con:
java -version
Descargar e instalar 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
Ejecutando elasticsearch como un servicio sistemático en el inicio
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch
sudo systemctl start elasticsearch
# check the current status to ensure everything is okay.
systemctl status elasticsearch
Instalando Kibana
Primero importar GPG-key en rpm
sudo rpm --import http://packages.elastic.co/GPG-KEY-elasticsearch
Luego crea un repositorio local kibana.repo
sudo vi /etc/yum.repos.d/kibana.repo
Y añade el siguiente contenido:
[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
Ahora instala la kibana siguiendo el comando:
yum -y install kibana
Comience con:
systemctl start kibana
Verificar el estado con:
systemctl status kibana
Puede ejecutarlo como un servicio de inicio.
systemctl enable kibana