Descargar como pdf o txt
Descargar como pdf o txt
Está en la página 1de 182

Elasticsearch

Implementando bsquedas de
datos eficientes y escalables

Cool... bonsai cool

Curso de capacitacin - Mercadolibre SRL Julio 2014


Quines somos?

Fernando A. Rodriguez
(Desarrolador Sr, SYI)

Federico A. Ocampo
(Supervisor, Buyingflow)

Curso de Capacitacin - Julio 2014


Objetivos

Introducir al mundo de los motores de bsquedas y


sus desafos.
Aprender las caractersticas centrales de
Elasticsearch (y Lucene)...
...y cmo utilizarlas para encarar estos desafos.
Todo esto teniendo en cuenta los requerimientos de
performance y escalabilidad de Mercadolibre

Curso de Capacitacin - Julio 2014


Agenda
Da 1 Da 2
Introduccin Mapping
Capa distribuida Relevancia (Scoring)
E/S de datos Aggregations
Bsquedas bsicas Integracin
Lucene Puesta en Produccin
Bsquedas avanzadas Funcionalidades
Analyzers avanzadas

Curso de Capacitacin - Julio 2014


Bsquedas
Las bsquedas son la principal interfaz
para la obtencin de informacin en la
actualidad.

Curso de Capacitacin - Julio 2014


Bsquedas: Motores conocidos

Curso de Capacitacin - Julio 2014


Bsquedas: Motores conocidos

Curso de Capacitacin - Julio 2014


Bsquedas: Motores conocidos

Curso de Capacitacin - Julio 2014


Bsquedas: desafos

Pero las bsquedas tienen sus


desafos...

Curso de Capacitacin - Julio 2014


Bsquedas: desafos

Curso de Capacitacin - Julio 2014


Bsquedas: desafos

Curso de Capacitacin - Julio 2014


Bsquedas: desafos

Curso de Capacitacin - Julio 2014


Bsquedas: herramientas

Existen muchos productos y herramientas para


implementar bsquedas de texto...
Bases de datos relacionales (SQL)
Bases No relacionales (MongoDB)
Soluciones Ad-Hoc ("te lo hago en bash")
Motores de bsqueda full-text-search (Solr)

... y Elasticsearch

Curso de Capacitacin - Julio 2014


Introduccin a
Elasticsearch

Curso de Capacitacin - Julio 2014


Qu es Elasticsearch?

Es un motor de bsqueda, orientado a


documentos, basado en Apache Lucene

Curso de Capacitacin - Julio 2014


Breve resea histrica

Creado por Shay Kimchy Banon en el 2010:


...ElasticSearch itself was born out of my frustration with the fact that there isnt really
a good, open source, solution for distributed search engine out there

Mantenido por l hasta la creacin de Elasticsearch.com


(http://elasticsearch.com/) en 2012

Actualmente desarrollado por la empresa, bajo licencia


Apache 2 (muy flexible).

La ltima versin a la fecha es la 1.3.2 (Requiere Java 7.x)

Curso de Capacitacin - Julio 2014


Qu caractersticas tiene?

Orientado a documentos
JSON's, Basado en Apache Lucene

Libre de schemas
Aunque permite definirlos de ser necesario

Distribuido
Escala dinmicamente, implementa HA

Multi-Tenant
Permite operar sobre mltiples ndices a la vez

Centrado en API's
Expone casi todas sus funcionalidades va APIs REST

Curso de Capacitacin - Julio 2014


Y qu puede hacer?

Bsquedas no estructuradas
Todos los items que contengan la palabra curso.

Bsquedas estructuradas
Items oro vendidos por el user X en Marzo.

Aggregations / Facetas
Promedio de precios de los items de la categora C.

Combinaciones de todo lo anterior


Promedio de precios de los items vendidos en Abril de

los usuarios X e Y en la categora C.


y todo en tiempo casi real!

Curso de Capacitacin - Julio 2014


Una muestra gratis :)

# Crear un documento
curl -XPOST "http://localhost:9200/items/item/MLA1" -d '{
"title" : "Condensador de flujo XT-2000"
}'

# Obtener un documento por ID


curl -XGET "http://localhost:9200/items/item/1

# Buscar un documento por texto


curl -XGET "http://localhost:9200/items/_search?q=Condensador"

# Borrar por ID
curl -XDELETE "http://localhost:9200/items/1"

Curso de Capacitacin - Julio 2014


Todo muy lindo pero.. quin lo usa?

Curso de Capacitacin - Julio 2014


Componentes principales

Elasticsearch se compone de dos capas principales


bien definidas y desacopladas:
Sistema distribuido
Implementa la lgica de coordinacin de los nodos
de un cluster y el mantenimiento de sus datos
Motor de bsqueda
Proporciona las funcionalidades de indexacin y
bsqueda de documentos.

... veamos como funciona la primera

Curso de Capacitacin - Julio 2014


Sistema
distribuido

Curso de Capacitacin - Julio 2014


Sistema distribuido: introduccin

Qu esperamos en Meli de un sistema distribuido?

Performance
Escalabilidad
Alta disponibilidad
Tolerancia a fallos

Curso de Capacitacin - Julio 2014


Sistema distribuido: glosario

Cluster Nodos Indices Tipos


Conjunto de Instancia de Coleccin de varios Coleccin de varios
instancias de ES Elasticsearch documentos documentos de
que comparten (objeto JSON), no similar estructura
mismo nombre necesariamente de
(cluster.name)
igual estructura. Comparable a
tablas de bases de
Comparable a datos
esquemas de bases
de datos

No confundir con
ndices de bases de
datos

Curso de Capacitacin - Julio 2014


Sistema distribuido: Ejemplo

Preguntas

Compras

USUARIO

NODO
NODO1 ES
Cluster: springfield USUARIO
preguntas
Indice: usuario {...}
compras
Tipo: preguntas {...}

Curso de Capacitacin - Julio 2014


Sistema distribuido: ms sobre shards

Particin de la informacin.

Puede ser Primario (read/write) o Rplica (read-only).

Un nodo puede administrar 1 o ms shards.

La cantidad de shards primarios son definidos al crear el


ndice y luego no se puede modificar

Proveen alta disponibilidad y performance.

Instancias de lucene independientes entre s .

Curso de Capacitacin - Julio 2014


Sistema distribuido: Ejemplo shard

2 shards
1 shard
NODO 1
Usuario Pregunta
Usuario
NODO 1 Pregunta
homero p1
homero p1
homero p2
homero p2
lisa p3
lisa p3
moe p4
moe p4
bart p5
bart p6
bart p7 Usuario Pregunta
bart p8 bart p5
bart p6
bart p7
bart p8

Curso de Capacitacin - Julio 2014


Sistema distribuido: shards y rplicas

NODO 1 NODO 2

Shard 0 Shard 1
(primario) (primario)

Shard 1 Shard 0
(replica) (replica)

curl -XPUT localhost:9200/test -d '{


"index" : {
"number_of_shards" : 2,
"number_of_replicas" : 1
}
}'

Curso de Capacitacin - Julio 2014


Sistema distribuido: shards y rplicas

Agregando un nodo...

NODO 1 NODO 2 NODO 3

Shard 0 Shard 1
(primario) (primario)

Shard 1 Shard 0
(replica) (replica)

Curso de Capacitacin - Julio 2014


Sistema distribuido: shards y rplicas

...se balancea el cluster automticamente.

NODO 1 NODO 2 NODO 3

Shard 0 Shard 1
(primario) (primario)

Shard 1 Shard 0 Shard 0


(replica) (replica) (replica)

Curso de Capacitacin - Julio 2014


Sistema distribuido: shards y rplicas

...se balancea el cluster automticamente.

NODO 1 NODO 2 NODO 3

Shard 0 Shard 1
(primario) (primario)

Shard 1 Shard 0
(replica) (replica)

Curso de Capacitacin - Julio 2014


Sistema distribuido: shards y rplicas

Ante la caida de un nodo...

NODO 1 NODO 2 NODO 3

Shard 0 Shard 1
(primario) (primario)

Shard 1 Shard 0
(replica) (replica)

Curso de Capacitacin - Julio 2014


Sistema distribuido: shards y rplicas

... se regeneran los shard faltantes

NODO 1 NODO 2 NODO 3

Shard 1 Shard 0
(primario) (primario)

Shard 0 Shard 1
(replica) (replica)

Curso de Capacitacin - Julio 2014


Sistema distribuido: simulacin

NODO 1 NODO 2

Vamos a experimentar un poco


con los shards...

Curso de Capacitacin - Julio 2014


Data In / Out

Curso de Capacitacin - Julio 2014


Estructura de datos

Los documentos se representan en formato JSON


Cada campo contiene informacin de cierto tipo.
{
"id": "MLA464468956",
"title": "Departamento 3 Ambientes En Alquiler - Claypole R",
"price": 5000,
"geolocation": {
"latitude": -34.56854,
"longitude": -58.4678583,
},
"pictures": [
{"url": "http://img2.mlstatic.com/s_MLA_v_O_f_447_062013.jpg"},
{"url": "http://img2.mlstatic.com/s_MLA_v_O_f_534_062014.jpg"}
],
"date_created": "2013-06-12T18:46:00.000Z",
}

Curso de Capacitacin - Julio 2014


Estructura de datos

ES agrega su propia Metadata a los documentos

Campo Default Descripcin


_id ID interno del documento
_type Tipo de documento
_source enabled Guarda el doc original indexado
_all enabled Indexa todos los valores de todos los campos
del documento.
_timestamp disabled timestamp asociado al documento
_ttl disabled define una fecha de expiracin (opcional)
_size disabled almacena el tamao del _source
descomprimido

Curso de Capacitacin - Julio 2014


Tipos de datos

ES soporta los tipos de datos propios de JSON y otros


tipos derivados, propios del sistema:

Tipos bsicos
String, number, boolean

Tipos complejos
Array, Object

Tipos extendidos
Datetime, binary (base 64), ip, geo_point, multi-filed...

...ms detalles cuando veamos Mapping

Curso de Capacitacin - Julio 2014


Insertando datos: Index API

Primero necesitamos un ndice...


Nombre del ndice

curl -XPUT localhost:9200/items -d '{


"settings" : {
...
},
"mappings" : {
...
}
}' Configuraciones opcionales

... aunque si no lo creamos, ES lo hace por nosotros usando


una configuracin por defecto.

Curso de Capacitacin - Julio 2014


Insertando datos: Index API

Luego agregamos la informacin...

nombre
operacin nombre tipo
ndice ID documento
HTTP REST

curl -XPUT 'localhost:9200/items/item/MLA123' -d '{


"id" : "MLA-123"
"title" : "Delorean modelo '85, joya nunca taxi",
"kmts" : 325000
"seller": "MACFLY_1980"
}'
documento JSON
a indexar

Curso de Capacitacin - Julio 2014


Insertando datos: Index API

Podemos dejar que ES defina el ID automticamente...

nombre
operacin nombre tipo
HTTP REST ndice

curl -XPOST 'localhost:9200/items/item' -d '{


"id" : "MLA-123"
"title" : "Delorean modelo '85, joya nunca taxi",
"kmts" : 325000
"seller": "MACFLY_1980"
}'
documento JSON
a indexar

Curso de Capacitacin - Julio 2014


Insertando datos: Index API

... obteniendo como respuesta:


201 (CREATED): Se cre un nuevo documento
200 (OK): Se actualiz un documento existente

nombre del ndice {


"ok" : true,
nombre del tipo
"_index" : "items",
id del documento "_type" : "item",
"_id" : "MLA123",
versin del cocumento "_version" : 1
}

Curso de Capacitacin - Julio 2014


Insertando datos: Index API

Ejecucin distribuida:

1. Se genera el request a un NODO 1 NODO 2


nodo dado. 3.
Shard 1 Shard 1
2. El server lee el valor de (primario) (replica)

routing (por defecto el


Shard 0 Shard 0
_id) y determina en cul (replica) (primario)
shard primario (Shard 1) 2.
se indexa el documento

3. Una vez indexado el


documento en el shard 1.
primario, se propaga a $curl -XPUT ... Cliente
las rplicas

Curso de Capacitacin - Julio 2014


Obteniendo datos: Get API

Permite obtener un documento dado su tipo y ID

nombre
operacin nombre tipo
ndice ID documento
HTTP REST

curl -XGET 'localhost:9200/items/item/MLA1234'

La operacin GET se realiza en tiempo real


En el momento en que se indexa un documento, est

inmediatamente disponible para ser obtenido va GET

Curso de Capacitacin - Julio 2014


Obteniendo datos: Get API

... obteniendo como respuesta:

200 (CREATED): Si el documento existe


404 (NOT FOUND): Si no existe

nombre del ndice {


"exists" : true,
nombre del tipo "_index" : "items",
"_type" : "item",
id del documento "_id" : "MLA1234",
"_version" : 1
versin del cocumento "_source" : {
"id" : "MLA1234"
contenido del "title" : "Delorean...",
"kmts" : 325000,
documento
"seller": "MACFLY_1980"
}
}

Curso de Capacitacin - Julio 2014


Obteniendo datos: Get API

Tambin pueden obtenerse ciertos campos especficos.


Permitir reducir trfico de red en GETs de documentos grandes.

curl -XGET 'localhost:9200/items/item/MLA1234?


_source_include=*id&_source_exclude=*picture

{
contenido del ...
campo "_id" : "MLA1234",
"_fields" : {
"seller_id": 123136,
"item_id": MLA1234,
...
}
}

Curso de Capacitacin - Julio 2014


Obteniendo datos: Get API

Ejecucin distribuida:

1. Se genera el request NODO 1 NODO 2

2. El server lee el valor de Shard 1 Shard 1


(primario) (replica)
routing (por defecto el _id)
3
y determina en qu shard Shard 0 Shard 0.
se encuentra el documento (replica) (primario)
(Shard 1).
2.
Luego el nodo receptor
realizar un round-robin
entre todos los shards 1.
primarios y rplicas
$curl -XGET ... Cliente

3. Se accede finalmente al
shard y se obtiene el
documento.

Curso de Capacitacin - Julio 2014


Obteniendo datos: Get API

Si solamente se quiere saber si existe el documento


Evita el overhead de transferir el JSON.

curl -XHEAD 'localhost:9200/items/item/MLA1234'

Si solamente quiere obtenerse el _source


Sin metadatos extra

curl -XGET 'localhost:9200/items/item/MLA1234/_source'

Curso de Capacitacin - Julio 2014


Eliminando datos: Delete API

Elimina un documento dado del ndice


La operacin consiste en un borrado lgico. Cuando Elasticsearch lo
determina, procede a borrar los datos fsicamente del sistema.

curl -XDELETE 'localhost:9200/items/item/MLA1234'

Respuestas:
200 (CREATED): Si se borr el documento

404 (NOT_FOUND): Si no se encontr el documento

Curso de Capacitacin - Julio 2014


Eliminando datos: Delete API

Ejecucin distribuida:

1. Se genera el request NODO 1 NODO 2


3.
Shard 1 Shard 1
2. El server lee el valor de (primario) (replica)
routing (por defecto el
_id) y determina en qu Shard 0 Shard 0
shard primario (Shard 1) (replica)
2. (primario)
se encuenta el documento

3. Una vez borrado el


documento en el shard 1.
primario, se propaga la $curl -XDELETE
Cliente
operacin en las rplicas ...

Curso de Capacitacin - Julio 2014


Versionado de documentos

Implementando Optimistic Locking...

Todo documento est versionado


Se utiliza para controlar la concurrencia de forma "optimista",
permitiendo ejecutar de forma transaccional las operaciones
Ejemplo: read-then-write o write-then-read.

La versin se asigna al crearse un documento (_version)


Por defecto tiene un valor '1' pero puede definirse explcitamente.
Por ejemplo si dicho valor viniese desde una base de datos.

Cada operacin de escritura incrementa el valor en 1.


Incluye PUT, POST, DELETE

Curso de Capacitacin - Julio 2014


Versionado de documentos

Todas las escrituras retornan una nueva versin


La versin del documento luego de ser modificado

Toda escritura puede recibir una versin


Esta es la versin sobre la cual se espera operar.
Si este valor no es igual a la versin actual del documento, la
operacin falla.

curl -XPUT 'localhost:9200/items/item/MLB2?version=1'

curl -XDELETE 'localhost:9200/items/item/MLB2?version=1'

Curso de Capacitacin - Julio 2014


Otras operaciones: Update

Es posible actualizar solo una parte de un documento


Internamente ejecuta un get-and-put (reduce el trfico entre nodos).
Reintenta si hubo un conflicto de versiones entre el GET y el PUT.

curl -XPUT 'localhost:9200/items/item/MLA2/_update' -d {


"doc": {
"title": "Dolar blue",
"price": 13.45
}
}

Los campos que no son objetos se sobreescriben


Los campos de tipo objeto se mergean recursivamente

Curso de Capacitacin - Julio 2014


Otras operaciones: Multi-get

Se pueden obtener N documentos juntos por ID


Esto evita mltiples rountrips al server
Puede hacerse a cualquier nivel (base, ndice, tipo)

curl -XPUT 'localhost:9200/documentos/_mget' -d {


"docs": {
{
"_type": "Item",
"_id": "MLA1234"
},{
"_type": "Question",
"_id": 35246
}
}
}

Curso de Capacitacin - Julio 2014


Otras operaciones: Bulk

Permite realizar mltiples operaciones en un solo request


Esto evita mltiples rountrips al server
El cluster conoce a qu shards debe acceder en casa operacin.
El end-point REST es /_bulk

Operacin a realizar

{ "delete" : { "_index" : "items", "_type" : "item", "_id" : "MLA1" } }\n


{ "index" : { "_index" : "items", "_type" : "item", "_id" : "MLA2" } }\n
{ "id" : "MLA2", "title" : "La pierna izquierda de Messi" , price: 100000}\n
.
.
{ "create" : { "_index" : "items", "_type" : "item", "_id" : "MLA3" } }\n
{ "id" : "MLA3", "title" : "La mano izquierda de Ginobili", price: 20000 }\n

Cuerpo del documento Todas las lneas deben terminar


(opcional) en un "retorno de carro"

Curso de Capacitacin - Julio 2014


Otras operaciones: Bulk

Formato de respuesta:
Contiene una respuesta individual para cada operacin.
Se garantiza el orden entre operaciones y respuestas
la respuesta de la 3era operacin est en 3er lugar
Si falla una operacin, el resto no se ve afectado.
A tener en cuenta en caso de consumir mensajes de una cola.
Cada respuesta incluye los conocidos datos de _index,
_type y _id y por supuesto el contenido del documento o
un descriptor de "error".

es mucho ms rpido que request individuales!

Curso de Capacitacin - Julio 2014


Search API
(Bsquedas bsicas)

Curso de Capacitacin - Julio 2014


Bsquedas de texto: Search API

Hasta ahora no dijimos nada de bsquedas en ES....

Elasticsearch provee una API muy poderosa para todo lo


que es el proceso de bsqueda: Search API

Permite realizar desde simples bsquedas de texto hasta


implementar muchas de las funcionalidades que proveen
los grandes buscadores (Google, Mercadolibre... :)

...y qu funcionalidades son esas?

Curso de Capacitacin - Julio 2014


Bsquedas de texto: Search API

Curso de Capacitacin - Julio 2014


Bsquedas de texto: Search API

Curso de Capacitacin - Julio 2014


Bsquedas de texto: Search API

Algunas funcionalidades importantes:

Relevancia (Scoring)
Define qu tan importante es un documento en un conjunto de resultados
Spellchecker
Permite interpretar una bsqueda aunque tenga errores ortogrficos
Soporte multi-lenguaje
Permite interpretar bsquedas en diferentes idiomas
Autocomplete
Predice la bsqueda en base a las primeras palabras ingresadas y ofrece
posibles alternativas comunes.

...y todo de manera eficiente, por supuesto

Curso de Capacitacin - Julio 2014


Bsquedas de texto: Search API

Ejecutando una bsqueda simple (todo los campos):

curl -XGET 'localhost:9200/items/_search?q=sony'

Header de la respuesta:
tiempo insumido (ms) {
"took" : 5,
'true' si di timeout "timed_out" : false,
"_shards" : {
"total" : 5,
shards involucrados "successful" : 5,
(exitosos y fallidos) "failed" : 0
},
...
}

Curso de Capacitacin - Julio 2014


Bsquedas de texto: Search API

Cuerpo de la respuesta:

total de resultados "hits":{


"total":1,
"max_score":0.3125,
"hits":[
los resultados de la {
primer "pgina" "_index":"items",
"_type":"item",
"_id":"MLA123",
"_score":0.3125,
fuente del "_source":{
documento "id":"MLA123",
"title":"Cmara Sony HD"
}
}
]

Curso de Capacitacin - Julio 2014


Bsquedas de texto: Search API

Ejecucin distribuida:

1. Se genera el request NODO 1 NODO 2

Shard 1 Shard 1
2. El server determina en (primario) (replica)
qu shards (primario o
rplica) se encuentran los Shard 0 2. Shard 0
(replica) (primario)
documentos (search)

3. Finalmente reunen los 3.


datos de los shards
1.
correspondientes (reduce)
Cliente

Curso de Capacitacin - Julio 2014


Bsquedas de texto: Search API

Tambin permite bsquedas complejas


Bsquedas booleanas
curl -XGET 'localhost:9200/items/_search?q=sony+OR+nikon'

Bsquedas por rango


curl -XGET 'localhost:9200/items/_search?q=price:[10+TO+*]'

...y mas (bsquedas difusas, expansin de frases, filtros, etc)

pero queremos todo en una lnea?

Curso de Capacitacin - Julio 2014


Search+Routing
(Ruteando datos)

Curso de Capacitacin - Julio 2014


Redireccionando datos: Routing

Por defecto, los documentos se distribuyen


uniformemente entre todos los shards.
Luego las bsquedas se ejecutan en todos los shards
relevantes (y posiblemente nodos).
Index

Shard 1 Shard 2 Shard 3

Shard 4 ... Shard N

Cliente

curl -XGET localhost:9200/users/user/_search -d '{...}'

Curso de Capacitacin - Julio 2014


Redireccionando datos: Routing

Al indexar podemos indicar un valor de _routing el cual


determina a qu shard acceder directamente.

Index

Shard 1 Shard 2 Shard 3

Shard 4 ... Shard N

Cliente

curl -XPUT localhost:9200/users/user/1?routing=MLB -d '{...}'

Curso de Capacitacin - Julio 2014


Redireccionando datos: Routing

Al buscar, si aplicamos routing accedemos slo a l shard


(primario o rplica) que contiene la informacin relevante

Index

Shard 1 Shard 2 Shard 3

Shard 4 ... Shard N

Cliente

curl -XGET localhost:9200/users/user/_search?routing=MLB -d '{...}'

Curso de Capacitacin - Julio 2014


Bsquedas de texto: Search API

Esto mejora notablemente la performance de las


bsquedas e indexaciones.

Curso de Capacitacin - Julio 2014


Query DSL
(Bsquedas complejas)

Curso de Capacitacin - Julio 2014


Bsquedas complejas: Query DSL

Permite la creacin de Queries complejas.

Se basa en la composicin de queries.

Curso de Capacitacin - Julio 2014


Bsquedas complejas: Query DSL

Formato: {
"query": {
"filtered": {
Queries "query": {
"match": {"title":"iphone 4s"}
Filtros },
"filter": {
"term": {"status": "active"}
}
}
}
}

Curso de Capacitacin - Julio 2014


Bsquedas complejas: Match Query

Es l trmino utilizado para la bsqueda de texto

{
match : {titulo : Star Wars 25}
}

Maneja correctamente los tipos de datos (nmero, boolean, etc) y el


anlisis de strings, si se requiere (lo veremos ms adelante)

Curso de Capacitacin - Julio 2014


Bsquedas complejas: Match Query

Porcentaje mnimo de "matcheo"


Cada token es "concatenado" por una bool query

{
match : {
text : {
type : boolean,
query : lannister saludos,
min_should_match : 30%
}
}
}

Curso de Capacitacin - Julio 2014


Bsquedas complejas: Match Query

Buscando frases...
Bsquedas de frases dentro de un string

Parmetro opcional: slop

Cantidad de palabras entre dos trminos que e

permiten no matchear
{
match : {
text : {
type : phrase,
query : Argentina sali campen,
slop : 1
}
}
}

Curso de Capacitacin - Julio 2014


Bsquedas complejas: Match Query

Buscando frases por prefijo


Igual a bsqueda por frase pero utilizando prefijos para
el ltimo trmino.
Parmetro opcional: max_expansion
Especifica cantidad de trminos a expandir.

{
match : {
text : {
type : phrase_prefix,
query : Argentina sali,
"max_expansion" : 100
}
}
}

Curso de Capacitacin - Julio 2014


Bsquedas complejas: Match Query

Permite buscar en varios campos


Admite expresiones regulares en los nombres de campos

{
"multi_match" : {
"fields" : ["titulo","descripcion","atributo.*"],
"query" : Item de testeo,
}
}

Curso de Capacitacin - Julio 2014


Bsquedas complejas: Bool Query

Implementa operaciones booleanas entre resultados.

Compone queries y es compuesta a su vez


Tipos
should, must y must_not
Parmetros opcionales
minimun_shoud_match
disable_coord

Curso de Capacitacin - Julio 2014


Bsquedas complejas: Bool Query

{
"bool" : {
"must" : [
{"match" : {"tipo" : "cerveza"}},
{"match" : {"tamao" : 250}}
],
"must_not" : [
{"match" : {"marca" : "quilmes"}}
]
}
}

Curso de Capacitacin - Julio 2014


Bsquedas complejas: Range Query

Bsquedas por rangos {


"range" : {
Nmericos / Fechas
"precio" : {
Strings (por orden lexicogrfico) "gte": 100,
Parmetros "lt": 150
}
gt (mayor) / gte (mayor o igual)
}
lt (menor) / lte (menor o igual) }

Curso de Capacitacin - Julio 2014


Bsquedas complejas: Match_all Query

Devuelve todos los documentos


Generalmente en combinacin con otros filtros

{
"match_all" : { }
}

Curso de Capacitacin - Julio 2014


Bsquedas complejas: otras queries

Term query
Bsqueda sobre campo sin parsear

Similar match, debe usarse este ltimo

Prefix/Wildcard query
Bsqueda parcial sobre campo sin parsear

Fuzzy query
Bsqueda difusa sobre campo sin parsear

Bastante lento y consume muchos recursos

Regexp query
Poco performante

Curso de Capacitacin - Julio 2014


Query Filters
(Optimizando bsquedas)

Curso de Capacitacin - Julio 2014


Bsquedas complejas: Filtros

Varios tipos
term,bool,and,or,not,range,geo_distance,...
Pueden usarse en
filtered query
constant_score query
aggregations
Cacheable! (super rpido)

Curso de Capacitacin - Julio 2014


Queries vs Filters

Queries Filters
Bsquedas por texto y trminos Slo trminos (responde a la
pregunta si/no)
Con relevancias Sin relevancia
Rpido (segn query) Muy Rpido
Sin caching Cacheable

Siempre debera usarse "Filters" excepto cuando


se precisa relevancia.

Curso de Capacitacin - Julio 2014


Queries vs Filters

"filtered":{
"query":{ ...query de bsqueda... },

"filter":{
Composicin de
"and":[
{"term": {"listing":"silver"}},
query y filters...
{"term": {"seller": 76060303}}
]
}
}

Curso de Capacitacin - Julio 2014


Ordenamiento y paginado

{
"from" : 10, "size" : 30,
paginado "query" : {
"filtered" : {
"filter" : {
"term" : {
"seller_id" : "76060303"
}
}
}
},
Ordenamiento "sort" : [ {
"start_time" : {
"order" : "desc",
"missing" : "_last"
}
}]
}

Curso de Capacitacin - Julio 2014


Lucene
(Muy breve introduccin)

Curso de Capacitacin - Julio 2014


Breve introduccin a Lucene

En qu captulos de la serie Game of Thrones se


menciona al personaje Jon "Snow"?

Fcil! Busco en todos los dilogos de todos los captulos


hasta encontrar el texto buscado (Grep).

El tiempo total es lineal a la cantidad de palabras

La cantidad de palabras puede ser gigante.

...y entonces?

Curso de Capacitacin - Julio 2014


Breve introduccin a Lucene

ndices invertidos!

Se toma palabra por palabra de todos los dilogos y se


arma un diccionario de tipo <palabra, [captulos]>

Se ordenan las claves alfabticamente

Luego para buscar basta con hacer bsqueda binaria en la


cantidad de claves (muchas menos operaciones)

Curso de Capacitacin - Julio 2014


Breve introduccin a Lucene

ndices invertidos:

Trminos Frecuencia Documentos (ids)

Rob 3 1,2,3

John 1 5

Arya 2 1,4

Ned 1 3

Implementa una estructura muy eficiente.


Permite definir relevancia en base a la frecuencia
de aparicin de un trmino (entre e intra docs.)

Curso de Capacitacin - Julio 2014


Breve introduccin a Lucene

Apache Lucene implementa estos ndices.

"Apache Lucene is a free/open source information


retrieval software library"

Cada shard de Elasticsearch es una instancia de Lucene


Por tanto un ndice invertido de los datos indexados
Es sta librera la que provee las funcionalidades de
anlisis y bsqueda de texto libre que ya veremos.

Curso de Capacitacin - Julio 2014


Analyzers
(Anlisis y procesamiento de texto)

Curso de Capacitacin - Julio 2014


Anlisis de texto: Analyzers

Qu hace Google con mi texto de bsqueda?

No todo lo que buscamos se usa en los resultados.


"Haciendo un buscador" busca "haciendo" y "buscador" (sin "un")

Ni todo es igual de importante


"Elasticsearch, el mejor de todos" prioriza "Elasticsearch" y "mejor"

Ni tienen que ser las mismas palabras las que se buscan.


"Haciendo un buscador" puede buscar "hacer" y "buscador"

...para determinar qu se busca y qu no


existen diversas tcnicas

Curso de Capacitacin - Julio 2014


Anlisis de texto: Analyzers

Curso de Capacitacin - Julio 2014


Anlisis de texto: Analyzers

Curso de Capacitacin - Julio 2014


Anlisis de texto: Analyzers

Tcnicas generales de procesamiento de texto:

Tokenizing
Dividir el texto en trminos significativos ("la casa" => ["la", "casa"])
Stopwords
Ignorar los trminos comunes de cada lenguaje (Ej: artculos)
Ignorar 'capitalizacin'
No diferenciar maysculas de minsculas.
Ignorar caracteres especiales
No diferenciar caracteres especiales de su versin original (Ej: => a)
Stemming
Transformar una palabra a su "raz" (Ej: jugando => jugar).
Sinnimos
Incluir en una bsqueda a los sinnimos (Ej: triunfar => ganar).

Curso de Capacitacin - Julio 2014


Anlisis de texto: Analyzers

"A la grande le puse Cca"

Tokenizing

A la grande le puse Cca

ignore-case filters

a la grande le puse cca

stopwords filters

grande puse cca

ignore special chars filters

grande puse cuca

Curso de Capacitacin - Julio 2014


Anlisis con ES: anatoma de un Analyzer

Un Analyzer est compuesto de:

Tokenizer
Divide el texto en trminos (tokens) en base a reglas definidas,
generando una cadena de tokens (token stream).
Por ejemplo: keyword, whitespace, standard, regex, etc...
Token Filter
Actua sobre un token stream modificndolo y/o creando nuevos tokens.
Por ejemplo: asciifolding, lowercase, stopword, ngram, etc...
Opera en cadena (pipelining): la salida de un filter es la entrada de otro.

...Elasticsearch provee tokenizers prearmados y


permite generar nuevos personalizados

Curso de Capacitacin - Julio 2014


Anlisis con ES: anatoma de un Analyzer

Anlisis en la indexacin:

Texto Tokenizer Filter


Filter
Filter
Tokens Index
entrada salida

Anlisis en la bsqueda:

query query
Tokenizer Filter
Filter
Filter Search
"match":"la ola" "match":"ola"

Curso de Capacitacin - Julio 2014


Anlisis con ES: anatoma de un Analyzer

Tokenizers: "Masche te quita-lo-bailado"

Tokenizer Descripcin Ejemplo

keyword genera un solo token "Masche te quita-lo-bailado"

whitespace separa por espacios [Masche, te,quita-lo-bailado]

standard basado en gramtica [Masche, te,quita, lo,


bailado]

URL / email diferencia urls y emails ["Mail", "[email protected]"]

Custom plug-in ...

Curso de Capacitacin - Julio 2014


Anlisis con ES: anatoma de un Analyzer

Filters: "Elstico"

Filter Descripcin Ejemplo

lowercase Ignora capitalizacin "elstico"

asciifolding reemplaza caracteres especiales "Elastico"

NGrams Genera N-Gramas del token. ["El", "la", "as", "st"...]


til para mutilenguaje y
autcomplete. (ej: n=2)

stemmer / Filtros algortmicos. Especializados ["elastico"," elast"]


snowball en un lenguaje

hspell stemming basado en diccionarios ["elastico"," elastica"]

Curso de Capacitacin - Julio 2014


Agenda
Da 1 Da 2
Introduccin Mapping
Capa distribuida Relevancia (Scoring)
E/S de datos Aggregations
Bsquedas bsicas Integracin
Lucene Puesta en Produccin
Bsquedas avanzadas Funcionalidades
Analyzers avanzadas

Curso de Capacitacin - Julio 2014


Mapping
(Configurando los tipos de datos)

Curso de Capacitacin - Julio 2014


Mapping: Qu es?

Los datos indexados son obtenidos de documentos y campos

El mapeo define como sern manipulados esos documentos


Cmo deben ser indexados?
Cules son los tipos de datos de los campos?
Cmo manejar los tipos de datos objeto?
Qu relacin hay entre los diferentes tipos de documentos?
Cmo manipular la metadata?
Definir la relevancia de los campos / documentos

Curso de Capacitacin - Julio 2014


Mapping: mapeo dinmico

Es el mapeo que Elasticsearch aplica por defecto

Principio de "Schema-less"
Slo configurar cuando es necesario

Tipos de datos
Los infiere de los tipos de datos bsicos de JSON (boolean, string, etc.)

Curso de Capacitacin - Julio 2014


Mapping: configuracin

Cuando debera definir un mapeo?

Tipos de datos que lo requieren (no-nativos de Json)


Fechas
Geolocalizacin
Boosting
Cuando deseo realizar boosting de un documento / campo
Anlisis de texto
Bsquedas especficas
Adaptaciones de idioma
Funcionalidades que lo requieren
Aggregations (Facets)
Highlighting

Curso de Capacitacin - Julio 2014


Mapping: configuracin

Los mapeos pueden definirse de dos formas:


En la creacin del indice...

$curl -XPOST localhost:9200/test -d '{


"settings" : { },
"mappings" : {
"item" : {
"properties" : {
"listing_type" : {
"type" : "string",
"index" : "not_analyzed"
}
}
}
}
}'

Curso de Capacitacin - Julio 2014


Mapping: configuracin

Los mapeos pueden definirse de dos formas:


Mediante PUT a API de Mapping

$ curl -XPUT 'http://localhost:9200/users/item/_mapping' -d '


{
"item" : {
"properties" : {
"listing_type" : {
"type" : "string",
"index" : "not_analyzed"
}
}
}
}'

Cuidado: los cambios en un mapping existente no se aplican hacia atrs

Curso de Capacitacin - Julio 2014


Mapping: configuracin

Tipos de datos (pueden ser de un nico tipo o array)


Tipo Descripcin

string, integer, long, float, double, Los clsicos...


date, boolean

root-object / object Objeto padre

nested Similar a object, difiere en la forma que se


almacena internamente

multi_field Permite configurar un campo de mltiples tipos

ip Direccin ipv4

geo_point Representa un punto de geo localizacin (lat,long)

attachment Archivo binario parseable

Curso de Capacitacin - Julio 2014


Mapping: configuracin

Parametros extras

Tipo Descripcin

boost Grado de relevancia

include_in_all Si el campo ser incluido en el campo _all

null_value Valor por defecto del campo

store Si el valor del campo ser almacenado (adems del


indexado)

index_name Nombre con el que ser indexado el campo

Curso de Capacitacin - Julio 2014


Mapping: campos de tipo texto

Utilizar Strings como tipo de dato para campos de texto

Tipo Descripcin

index Define si el campo ser buscable:


analyzed: buscable y analizado
not_analyzed: buscable, pero no analizado
no: No buscable

analyzer, search_analyzer, Define analyzer a utilizarse al buscar/indexar


index_analyzer

Curso de Capacitacin - Julio 2014


Mapping: campos de tipo numrico

Puede ser float, double, integer, long, short o byte

Tipo Descripcin

ignore_malformed Ignora mal formateados. Por defecto en "false"

Curso de Capacitacin - Julio 2014


Mapping: campos de tipo fecha

Representados por Strings con formato especfico

Tipo Descripcin

Define el formato de la fecha. Existen varios predefinidos


format (por defecto ISO8601) pero tambien soporta
personalizados

ignore_malformed Ignora mal formateados. Por defecto en "false"

Curso de Capacitacin - Julio 2014


Mapeos: Campos de tipo objeto

Permite crear campos de tipos de datos compuestos

Tipo Descripcin

Atributo(s) del objeto, puede ser del tipo "core" o a su vez


properties
otro objeto

Por defecto en "true". Permite agregar dinmicamente


dynamic
nuevos atributos al objeto (principio de "schema-less")

enabled Ignora el campo (no se indexa)

path Especifica cmo se guardar (y se acceder) el documento.

include_in_all Los atributos heredan la configuracin de este objeto

Curso de Capacitacin - Julio 2014


Mapping: campos de tipo objeto

{
"mensaje" : {
"type" : "object",
"properties" : {
"usuario" : {
"type" : "object",
"dynamic" : false,
"properties" : {
"nombre" : {"type" : "string"},
"apellido" : {"type" : "string"}
"id" : {"type" : "string", "index" : "not_analyzed"}
}
},
"texto" : {"type" : "string"}
}
}
}

Curso de Capacitacin - Julio 2014


Mapping: Multi-fields

Permite indexar un mismo campo de diferentes formas

Generalmente utilizado para parsear un mismo campo


"string" con diferentes analyzers

til para realizar facetado / clasificacin diferenciandolo


de las queries comunes

Tambin para soporte multi-lenguaje


Permite aplicar analyzers especficos para distintos lenguajes.

Curso de Capacitacin - Julio 2014


Mapping: Multi-fields

"item" : {
"properties" : {
"titulo" : {
"type" : "multi_field"
"fields" : {
"titulo" : { "type" : "string",
"index" : "not_analyzed" }
"espanol" : { "type" : "string",
"analyzer" : "custom_es" },
"portugues" : { "type" : "string",
"analyzer" : "custom_pt" }
}
}
}
}

Curso de Capacitacin - Julio 2014


Scoring
(Dando relevancia a los resultados)

Curso de Capacitacin - Julio 2014


Scoring: introduccin

Qu tan importante es dar relevancia a los


resultados de las bsquedas?...

Curso de Capacitacin - Julio 2014


Scoring: introduccin

...bsicamente determina qu queremos mostrar primero


a los usuarios, en base a sus preferencias...

Curso de Capacitacin - Julio 2014


Scoring: introduccin

... o las nuestras

Curso de Capacitacin - Julio 2014


Scoring: introduccin

Cmo se determina la posicin de un resultado?

Algoritmos
Procesan informacin de la frecuencia de aparicin de los trminos
buscados en los documentos encontrados.

Boosting
Operacin para dar "peso" a ciertos documentos o campos, en base a
requerimientos funcionales que los algoritmos no tienen en cuenta:
temporalidad, tipos de documentos, etc.

Curso de Capacitacin - Julio 2014


Scoring: algoritmos

Term Frequency (TF)


Frecuencia de aparicin de un trmino (token) en un documento.
Mayor frecuencia => mayor relevancia

Inverted Document Frequency (IDF)


Frecuencia de aparicin de un trmino en toda la coleccin de docs.
Mayor frecuencia => menor relevancia.

Algoritmo TF-IDF
Por cada trmino se calcula el TF. Luego este valor se pondera con la
relevancia IDF.

...veamos como lo implementa Elasticsearch

Curso de Capacitacin - Julio 2014


Scoring: algoritmos

Lucene Similarity:
"hits":{
Algoritmo implementado por "total":1,
Lucene para scoring. "max_score":0.3125,
"hits":[
{
Implementacin de TF-IDF. "_index":"items",
"_type":"item",
Incorpora normalizacin y "_id":"MLA123",
"_score":0.3125,
boosting.
"_source":{
"id":"MLA123",
Se ejecuta en cada bsqueda de "title":"Cmara Sony HD"
texto libre (match) }
}
]

Curso de Capacitacin - Julio 2014


Scoring: Lucene Similarity

A mayor cantidad de ocurrencias de un trmino en un


documento, mayor relevancia (score).

Ejemplo: buscando "API":

Documento 1: Documento 2:

"...MercadoLibre realiz su primera "...Hace mucho tiempo que se peda


Developer Conference basadas en que MercadoLibre desarrolle una API
sus APIs donde se presentaron.... para realizar consultas a la pagina de
MercadoLibre anunci hoy que los > manera mas sencilla, a que hasta
desarrolladores de software podrn hace un tiempo solo tenamos XML y
tener acceso a las APIs..." dolor de cabeza..."

Curso de Capacitacin - Julio 2014


Scoring: Lucene Similarity

Trminos poco frecuentes entre los documentos aportan


mayor peso a la relevancia total.

Ejemplo: buscando "Mercadolibre APIs Conference":

Documento 1: Documento 2: Documento N:

"...MercadoLibre realiz "...Hace mucho tiempo "...Las APIs de


su primera Developer que se peda que MercadoLibre son
Conference donde se
> MercadoLibre ,.., una plataforma ideal
presentaron las desarrolle unas APIs para desarrollar
novedades sobre.... para realizar..." aplicaciones..."

Curso de Capacitacin - Julio 2014


Scoring: Lucene Similarity

A mayor cantidad de trminos de bsqueda en un


documento, mayor relevancia.

Ejemplo: buscando "Mercadolibre API":

Documento 1: Documento 2:

"...MercadoLibre realiz su primera "...Las oportunidades ahora son


Developer Conference basadas en ilimitadas, podremos integrar
sus APIs donde se presentaron.... grandes retailers a MercadoLibre,
La empresa anunci hoy que los > desarrollar soluciones logsticas,
entre otras opciones. En definitiva,
desarrolladores de software podrn seguiremos trabajando para..."
tener acceso.."

Curso de Capacitacin - Julio 2014


Scoring: Lucene Similarity

Campos "cortos" tienen ms relevancia que los "largos".

Ejemplo: buscando "Mercadolibre":

Ttulo de Documento 1: Cuerpo de Documento 2:

"Podremos integrar grandes


"MercadoLibre realiz su retailers a MercadoLibre,
desarrollar soluciones logsticas,
primera Developer > entre otras opciones. En
Conference en San Pablo" definitiva, seguiremos trabajando
para..."

Curso de Capacitacin - Julio 2014


Scoring: boosting

Por qu aplicar boosting?

Si bien Lucene hace un excelente trabajo de scoring, hay


variables que estos algoritmos no contemplan.
Los aspectos de lgica de negocio que determinan la
relevancia de un documento, requieren que sta se
modifique mediante el boosting.
Ejemplos de esto son:
distintos tipos de documentos (ej: videos, imgenes).
relevancia afectada por variables de dominio (ej: ventas)

Curso de Capacitacin - Julio 2014


Scoring: boosting

Cundo y cmo se aplica el boosting?

En tiempo de indexacin:
Cuando consideramos que cierto documento ser siempre ms
importante que otros (Ej: la home-page de un sitio).
Es ms performante ya que no requiere clculos extra.
Si se quiere modificar, requiere reindexar el documento.

En tiempo de bsqueda (recomendado):


Permite variar la relevancia de un documento segn variables del
dominio (ej: fecha de bsqueda vs fecha de publicacin)
Requiere calcular el score en el momento.
Puede variarse con solo modificar la bsqueda.

Curso de Capacitacin - Julio 2014


Scoring: boosting en indexacin

A nivel de documento utilizando _boost


curl -XPOST 'localhost:9200/users/user/dakota' -d '{
"_boost" : 5.0
...
}'

A nivel de campo mediante mapping


curl -XPOST 'localhost:9200/users/user/_mapping -d '{
"user": {
"properties":{
"nickname": {"type":"string","boost": 2.0},
"email": {"type":"string","boost": 1.5},
...
}
}
}'

Curso de Capacitacin - Julio 2014


Scoring: boosting en bsqueda

Toda query permite modificar la relevancia de sus


resultados mediante el parmetro boost

"bool" : {
"should" : [
{
"match": {
"site": {
"query": "Alamaula"
}
}
},
{
"match": {
"site": {
"query": "Mercadolibre"
"boost": 1.5
}
}
}
]
}

Curso de Capacitacin - Julio 2014


Scoring: boosting en bsqueda

Tambin es posible definir un clculo de scoring


personalizado utilizando Scripts
El lenguaje utilizado es MVEL (muy eficiente)

"custom_score": {
"query": { ...bsqueda de empleados... },
"script":
"_score * (doc['puesto'].value == 'capo'? 1.2 : 1)"
}

score calculado por Lucene atributo del documento


para la query ejecutada

Curso de Capacitacin - Julio 2014


Scoring: boosting

Ejemplos de boosting: blog de reviews

Se tiene un blog de tecnologa, donde se publican peridicamente reviews de


productos. Las reviews pueden ser artculos de texto (largos), con ttulo y
contenido, o videos, con una descripcin (corta) asociada.

El buscador del site debe priorizar los artculos por sobre los videos. Si un texto se
encuentra en el ttulo de un artculo, ste es ms importante que si se encontrase
en el cuerpo del mismo.

Los artculos ms recientes deben ser ms relevantes que otros ms viejos.

As mismo, al listarse todos los productos evaluados, se debe priorizar aquellos


sobre los cuales se hayan generado mayor cantidad de artculos y/o videos.

Curso de Capacitacin - Julio 2014


Scoring: boosting

Ejemplos de boosting: blog de reviews

1. Las descripciones de los videos tendrn mayor scoring que los artculos de
texto por ser ms cortas: boost a los artculos.

2. Entre los artculos, los ttulos tendrn ms relevancia por ser ms cortos.

3. Para dar importancia a los artculos ms recientes se debe verificar la fecha


de publicacin: boost por script en base a "cercana" con fecha actual.

4. Si un producto es muy referenciado entre todos los documentos baja su


relevancia: boost por cantidad de referencias.

Curso de Capacitacin - Julio 2014


Scoring: custom_filters_score

Si el boost depende de valores exactos, podemos


aprovechar la eficiencia de los filtros.

"custom_filters_score": {
"query": { ...bsqueda realizada... },
"filters": [
{
"filter": {
"term": {
"puesto": "capo"
}
},
"boost": 1.2
}
]
}

Curso de Capacitacin - Julio 2014


Aggregations
(estadsticas de los resultados)

Curso de Capacitacin - Julio 2014


Aggregations: introduccin

Para qu sirve?
Proveen contadores con resultados de las bsquedas

Proveen informacin para anlisis estadstico

Guan al usuario hacia filtros ms especficos

Curso de Capacitacin - Julio 2014


Aggregations: introduccin

Curso de Capacitacin - Julio 2014


Aggregations: introduccin

Usado para realizar herramientas de anlisis y dashboards

http://demo.kibana.org/

Curso de Capacitacin - Julio 2014


Aggregations: introduccin

2da republicacin Cambio precio Upgrade a envios gratis


arrastra ventas y de 200 a 150 gold_premium
visitas Evento x da

Curso de Capacitacin - Julio 2014


Aggregations: elementos

Buckets
Documentos que cumplen una determinada condicin
Equivalente a GROUP BY de SQL
Ej: Artculos agrupados por categora

Metrics
Funciones matemticas aplicadas sobre los buckets
Equivalente en SQL: COUNT, AVG, SUM, MAX, etc
Ej: Precio promedio

Curso de Capacitacin - Julio 2014


Aggregations: aadiendo complejidad

Combinacin de ambos
Un caso comn es utilizar una combinacin entre buckets y metrics
Ej: Calcular el precio promedio por categora

Composicin de buckets
Es posible definir buckets dentro de buckets permitiendo agrupar por
ms de un crterio
Ej: Calcular el precio promedio por categora, listing type y si tiene free
shipping

Curso de Capacitacin - Julio 2014


Aggregations: ejemplo

Request:
{
"aggs": {
Nombre "categoria": {
"terms": { "field": "category_id" },
"aggs": {
Buckets "tipo_publicacion" : {
"terms" : { "field" : "listing_type_id"},
"aggs" : {
"prom_precio" : { "avg": { "field": "price"} },
Metrics
"min_precio" : { "min": { "field": "price"} },
"max_precio" : { "max": { "field": "price"} }
}
}
}
}
}
}

Curso de Capacitacin - Julio 2014


Aggregations: ejemplo

Response
aggregations: {
categoria: {
buckets: [
{
key: MLA34370
doc_count: 19
tipo_publicacion: {
buckets: [
{
key: bronze
doc_count: 16
prom_precio: {value: 175.125}
min_precio: {value: 49}
max_precio: {value: 350}
},

}

Curso de Capacitacin - Julio 2014


Aggregations: scope

Mismo scope que la query (defecto)


Las aggregations se aplican sobre los resultados de la bsqueda

Global
Las aggregations se aplican sobre el total los datos (no de la bsqueda)

Filter bucket
Las aggregations se aplican sobre los resultados de la bsqueda + filtro
especifico dado

Curso de Capacitacin - Julio 2014


Aggregations: tipos

Term
Devuelve los n trminos ms frecuentes
Stats
Informacin estdistica de los resultados (mximo, mnimo, media,
variancia, desviacin estandard, etc)
Percentiles
Genera los percentiles sobre un campo numrico y calcula la frecuencia
Range / Date / histogram
Permite definir rangos y devuelve la frecuencia
geo distance
Dado un punto y rangos de distancia dados, devuelve la cantidad de
ocurrencias

Curso de Capacitacin - Julio 2014


Integracin
(Conectando sistemas externos)

Curso de Capacitacin - Julio 2014


Integracin: clientes

Aparte del protocolo HTTP se pueden implementar


clientes nativos de Elasticsearch

Se comunican mediante el protocolo propio del sistema


Protocolo binario va TCP, mas eficiente que JSON/HTTP.

"Conocen" el cluster y actan como un nodo ms.


No almacenan informacin.

... existen dos categoras de clientes

Curso de Capacitacin - Julio 2014


Integracin: clientes

Transport Client

Cliente "liviano"
No se integra con el cluster (no se ejecuta node_discovery)
Se crea y destruye rpidamente. Ideal para mltiples threads
Ejecuta requests en modo round-robin
Requiere que se defina una lista de nodos con los que comunicarse.
Si algn nodo se diese de baja, da timeout y contina con otro.

Nodo 1 Nodo 2 Nodo 3

Nodo 4 ... Nodo N

Cliente

Curso de Capacitacin - Julio 2014


Integracin: clientes

Node Client

Nodo del cluster


No almacena informacin, pero a todo efecto es un nodo ms.
Al crearse el cluster lo reconoce y asigna un nombre (node discovery)
Conoce tablas de ruteo y estado del cluster
Accede directamente a los shards que tienen la info (si se hace routing)
Permite ejecutar acciones ante la cada de nodos o prdida de info.
Cluster

Nodo 1 Nodo 2 Nodo 3

Nodo 4 ... Nodo N

Cliente

Curso de Capacitacin - Julio 2014


Integracin: Rivers
Que son?
Complementos que ejecutan pulling de informacin (o

reciben un push) y la indexan en el cluster.


Automatizan las operaciones de toma de datos + bulk

Algunos ejemplos
Wikipedia
Twitter
RabbitMQ
Dropbox

Curso de Capacitacin - Julio 2014


Produccin
(Configuracin y recomendaciones)

Curso de Capacitacin - Julio 2014


Produccin: instalacin

Manual
Bajar, descomprimir y configurar.

Automatizado
Cheff (http://www.opscode.com/chef)
Puppet (http://www.puppetlabs.com/)
Paquetes Debian

... a la Melicloud
Incluir ES como parte del repositorio con sus configuraciones base.
Cada nuevo deploy sobreescribe las configuraciones
Los cambios aplican a todos los servers por igual.

... vamos a centrarnos en el ltimo

Curso de Capacitacin - Julio 2014


Produccin: instalacin

Archivos de la distribucin
LICENSE.txt
NOTICE.txt
README.textile
bin
elasticsearch
elasticsearch.in.sh
plugin
config
elasticsearch.yml
logging.yml
data
elasticsearch
lib
elasticsearch-x.y.z.jar
...

logs
elasticsearch.log
elasticsearch_index_search_slowlog.log

Curso de Capacitacin - Julio 2014


Produccin: instalacin

Directorios principales

Nombre Descripcin

bin binarios de ejecucin. Contiene el archivo


"elasticsearch.in.sh" donde puede definirse el
Heap.

config archivos de configuracin (ES y logging)

data datos almacenados por cluster

lib libreras utilizadas, incluyendo ES.

logs Logs de la aplicacin. Incluye detalle de operaciones


"lentas"

Curso de Capacitacin - Julio 2014


Produccin: configuracin

Algunas premisas importantes sobre configuracin

No cambiar, a menos que sea necesario


La configuracin por defecto est pensada para un buen rendimiento.
Misma configuracin para todos los nodos
No configurar servers por separado para uso diario.
Puede ser necesario para mantenimiento.
Preferir configuracin por API por sobre archivo.
Mantener en archivo la configuracin que aplica siempre.

... ante la duda, consulte a su experto en


Elasticsearch ms cercano

Curso de Capacitacin - Julio 2014


Produccin: configuracin

Configuracin principal de un cluster/nodo

Nombre Descripcin

Nombre del cluster. En base a l se unen los nodos, con


cluster.name
lo que debe ser nico.

node.name Nombre del nodo. ES asigna valores por defecto

Ubicacin de los datos. Configurar siempre fuera del


path.data
directorio de instalacin de ES.

path.logs Ubicacin de los logs (ej: /usr/local/log)

Curso de Capacitacin - Julio 2014


Produccin: configuracin

Sistema distribuido: deteccin de nodos

Nombre Descripcin

discovery.zen. Mnima cantidad de Masters. Conviene definir


minimum_master_nodes N/2+1 donde N es la cantidad de masters elegibles.

discovery.zen.ping. Descubrimiento de nodos va multicast. En


multicast.enabled produccin debe estar deshabilitado (false).

Lista de posibles masters a consultar para descubrir


discovery.zen.ping.
el cluster. Basta con que uno de los nodos
unicast.hosts
pertenezca al cluster para integrarse.

Curso de Capacitacin - Julio 2014


Produccin: configuracin

Sistema distribuido: recupero

Nombre Descripcin

Cantidad mnima de nodos necesaria para


gateway. recuperar el cluster luego de reinicio de todos los
recover_after_nodes nodos. Mayor nmero implica reuso de datos
locales y menor transferencias de shards

gateway. Cantidad de minutos a esperar otros nodos una vez


recover_after_time que se levantaron los N nodos anteriores.

Curso de Capacitacin - Julio 2014


Produccin: memoria

Definiendo el tamao del Heap


Definir la variable de ambiente ES_HEAP_SIZE
Define el tamao mximo y mnimo (iguales) de la memoria reservada
para ejecutar Elasticsearch.
Idealmente definirla como 1/2 de la memoria total.
La otra mitad tambin es aprovechada por ES, ya que se utiliza para
cache del filesystem
Nunca reservar ms de 30GB de espacio
La JVM realiza compresin de punteros (64 a 32 bits)
Definir configuraciones extra para evitar swapping
Ver comentarios en elasticsearch.yml

Curso de Capacitacin - Julio 2014


Produccin: memoria

Principales "usuarios" de la memoria

Aggregations
Cargan en memoria los valores de los campos referenciados.
No facetar por campos analized o con muchos valores posibles.
Filtros y Ordenamiento
Cargan en memoria los valores de los campos referenciados.
Puede monitorearse con la API de Stats.
Lucene
Aunque muy optimizado, carga diccionario invertido en memoria.
Afecta slo cuando hay muchos shards ejecutando en un mismo nodo.

Curso de Capacitacin - Julio 2014


Produccin: memoria

En caso de una OutOfMemoryException

Surge cuando la JVM no tiene ms memoria disponible


Puede generar inestabilidad en el clusters
Las APIs de monitoreo pueden no informar problemas.
Algunas operaciones pueden seguir ejecutndose normalmente.

Es necesario tomar medidas


Ver logs. Elasticsearch informa cuando ocurri un error de este tipo.
Ampliar memoria (siempre bajo las recomendaciones previas).
Agregar nodos.

Curso de Capacitacin - Julio 2014


Produccin: file descriptors

Cantidad de descriptores de archivos (y sockets)


abiertos por el proceso, permitidos por el SO

Puede ser necesario aumentar este valor.


El valor por defecto de los SO's suele ser muy bajo.
Setear en 64K, o 32K si est restringido.
Las instancias del Melicloud ya vienen con un nmero elevado.
Para monitorear este valor:
curl 'localhost:9200/_nodes/process?pretty'

Curso de Capacitacin - Julio 2014


Produccin: dimensionamiento

Cmo dimensionar un cluster?

No hay recetas mgicas.


Cada instalacin es diferente.
Depende de la infraestructura, los datos y las queries.

Es posible determinar el mximo tamao de un shard


a. Comenzar con 1 nodo y 1 shard (sin rplicas).
b. Indexar informacin y mirar mtricas.
c. Cuando el nodo est sobrecargado (aumento de tiempos, GC, etc),
obtener la cantidad total de documentos indexados.
d. Asumir el 50~60% de esa cantidad como capacidad del nodo.

Curso de Capacitacin - Julio 2014


Produccin: configuraciones extras

Algunos tips importantes a tener en cuenta

Deshabilitar creacin de ndices automtica.


Obliga a que todo ndice sea creado va la API correspondiente
Setear action.auto_create_index en false
Deshabilitar borrado de ndices masivo.
Evita que pueda ejecutarse un DELETE sobre la raz de ndices.
Setear action.disable_delete_all_indices en true
Deshabilitar sharding reallocation al reiniciar cluster
cluster.routing.allocation.disable_allocation
cluster.routing.allocation.disable_replica_allocation

Curso de Capacitacin - Julio 2014


Produccin: hardware

Qu infraestructura se recomienda?

Nodos "large" o "medium" sobre "small"


Preferible tener menos nodos ms potentes que muchos poco potentes
Toda la memoria que sea posible
En especial si se hace uso intensivo de facetado y ordenamiento
La memoria que no use ES, ser aprovechada por el file system cache
Los filtros tambin podrn cachear ms documentos.
CPU y Cores: Ms es mejor.
Una instancia utiliza concurrencia intensivamente
Puede ocupar todos los cores disponibles.
Mayor velocidad de CPU ayuda a indexacin y bsqueda.

Curso de Capacitacin - Julio 2014


Produccin: monitoreo

Todo en ES puede monitorearse va APIs...


... y debe monitorearse!

Cluster Health:
Semforo indicador del estado del cluster
Verde: los shards primarios y las rplicas estn inicializadas.
Amarillo: todos los shards primarios estn iniciados pero faltan rplicas.
Rojo: faltan shards primarios y rplicas (falta informacin)
Cluster Info/Stats:
Info: informacin esttica del cluster que no vara.
Stats: informacin del cluster que vara con el tiempo.
Cubren todos los aspectos de SO, JVM, Red, etc.

...existen plugins para todas estas APIs

Curso de Capacitacin - Julio 2014


Produccin: monitoreo

Los plugins ms recomendados:

BigDesk
Permite monitorear todos los aspectos de ejecucin de cada nodo.
Elasticsearch-Head
Permite visualizar la topologa y el comportamiento de los shards.
Permite navegar la informacin y generar queries libres o prearmadas.
Paramedic:
Monitor de ejecucin de todo el cluster en una sola pantalla.
Elasticsearch HQ
Monitor y administrador del sistema (excelente interfaz)

... y hay muchos ms en el site

Curso de Capacitacin - Julio 2014


Produccin: monitoreo

Y si quiero/necesito usar curl? CAT API!

curl -XGET localhost:9200/_cat/master


3oPXD3WEQJulGc4OYkGZeQ mac-host 10.10.32.237 The Angel

curl -XGET localhost:9200/_cat/indices?h=h,i,p,dc,fm,ss


yellow brasil_2014 5 20 0b 102.7kb

curl -XGET localhost:9200/_cat/


=^.^=
/_cat/allocation
/_cat/shards
...

Curso de Capacitacin - Julio 2014


Bonus Track
(algunas funcionalidades avanzadas)

Curso de Capacitacin - Julio 2014


Bonus Track: percolation

Bscando bsquedas... lo qu?

En lugar de indexar documentos y buscarlos con queries...


... almacenamos queries y las "filtramos" con documentos.

curl -XPUT localhost:9200/users/.percolator/usuario-trucho -d '{


"query" : {
"boolean" : {
"must" : [
{ "term" : { "reputation" : "5_red" }},
{ "range" : { "negative_calif" : { "gt" : "3" }}}
]
}
}
}'

Curso de Capacitacin - Julio 2014


Bonus Track: percolation
Luego percolamos los documentos
Sin indexarlos

curl -X POST localhost:9200/user/user/_percolate -d '{


"doc": {"reputation" : "5_red","negative_calif" : 23}
}'

Al indexarlos
curl -X POST localhost:9200/user/user/?percolate=* -d '{
"reputation" : "5_red","negative_calif" : 23
}'

Resultado
{ "ok" : true, "matches" : ["usuario-trucho"]}

Curso de Capacitacin - Julio 2014


Bonus Track: snapshots

Desde ES 1.x es posible salvar el estado del cluster

Primero se crea un repositorio indicando el tipo.


tipo de repositorio

curl -XPUT 'localhost:9200/_snapshot/fs_backup' -d '{


"type" : "fs",
"settings": {
"location": "/es/backups",
}
}'

nombre del repo

Curso de Capacitacin - Julio 2014


Bonus Track: snapshots

Luego se genera el snapshot (x def. para todos los ndices)

curl -XPUT localhost:9200/_snapshot/fs_backup/2014 -d '{


"indices": "indice_1, indice_n"
}'

Y luego se recupera cuando es necesario (previo cierre)

curl -XPOST "localhost:9200/_snapshot/fs_backup/2014" -d '{


"indices": "indice_*"
}'

Curso de Capacitacin - Julio 2014


Bonus Track: geo locations

Elasticsearch permite buscar zonas geogrficas

Una vez seteado el mapping correcto, indexamos la info

curl -XPUT 'localhost:9200/restaurant/desc/1' -d '{


"desc" : {
"location" : { "lat" : 41.12, "lon" : -71.34 }
}
}'

se admiten varios formatos


(ej: "lat,long")

Curso de Capacitacin - Julio 2014


Bonus Track: geo locations

Bsqueda por geo_box (regin rectangular)


geo_bbox" : {
"location" : {
"top_left" : { "lat" : 40.73, "lon" : -74.1 },
"bottom_right" : { "lat" : 40.717, "lon" : -73.99 }
}
}

Por geo_distance (regin circular)

"geo_distance" : {
"distance" : "400km"
"location" : { "lat" : 40.73, "lon" : -74.1 }
}

Curso de Capacitacin - Julio 2014


Bonus Track: scan

Para iterar sobre una gran cantidad de resultados


Permite generar un "cursor" sobre una bsqueda
Permite definir el tiempo en que permanece abierto
Y la cantidad de registros por scan a obtener
Luego ES genera un token para cada Scan iniciado.

curl -XGET 'localhost:9200/_search?search_type=scan&scroll=10m&size=50' -d '{


"query" : { "match_all" : {}}
}'

curl -XGET 'localhost:9200/scroll?scroll=10m' -d


'c2NhbjsxOjBLMzdpWEtqU2IyZHlmVURPeFJOZnc7MzowSzM3aVhLalNiMmR5ZlVET3hSTmZ3OzU
6MEszN2lYS2pTYjJkeWZVRE94Uk5mdzsyOjBLMzdpWEtqU2IyZHlmVURPeFJOZnc7NDowSzM3aVh
LalNiMmR5ZlVET3hSTmZ3Ow=='

Curso de Capacitacin - Julio 2014


?

Curso de Capacitacin - Julio 2014


Recursos

Algunas pginas interesantes:

Libro oficial de ES
http://www.elasticsearch.org/guide/en/elasticsearch/guide/current/
Advanced Scoring en ES
http://jontai.me/blog/2013/01/advanced-scoring-in-elasticsearch/
Pre-Flight checks (setup para produccin)
http://www.elasticsearch.org/webinars/elasticsearch-pre-flight-checklist
DSL Explained
http://www.slideshare.net/clintongormley/terms-of-endearment-the-
elasticsearch-query-dsl-explained
Foro de ES en espaol
https://groups.google.com/forum/#!forum/elasticsearch-es

Curso de Capacitacin - Julio 2014

También podría gustarte