Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Elasticsearch Intro

Elasticsearch Intro

B9bb6644da1e2eb10c80c3e5dac23ab7?s=128

Agustín Azzinnari

August 19, 2015
Tweet

Transcript

  1. Elasticsearch Introducción Agustín Azzinnari @ganitsu

  2. Introducción - Motor de búsqueda distribuido que trabaja a nivel

    de documentos JSON. - Búsquedas en texto libre o en campos estructurados. Document Store Search Engine Distribuido Apache Lucene Filters Queries Aggregations API RESTful Tipo Documento JSON Índice Cluster Shard Nodo
  3. Datos (I) - Elasticsearch almacena Documentos JSON. - Unidad básica

    de dato. - Puede verse (un poco) como una fila en un RDBMS. - Tienen un ID y un tipo asociado. - Un tipo es (un poco) como una tabla. - Se almacenan en un índice. - Un índice es (un poco!) como una base de datos. - Schema-free (casi).
  4. Datos (II) { "title": "'Doctor Who' Versus 'Sherlock'? Keep Dreaming,

    Comic-Con", "keywords": ["doctor-who", "sherlock-holmes", "comic-con"], "pub_date": "2015-07-09T21:56:18Z", "print_page": 7, "section_name": { "display_name": "U.S.", "content": "us", "url": "http://www.nytimes.com/pages/national/index.html" }, "web_url": "http://www.nytimes.com/aponline/2015/07/09/us/ap-us-comic-con-doctor-who-sherlock.html", "content": "..." }
  5. Indexando - API RESTful (HTTP) para meter y sacar datos.

    - Bien estándar: POST para crear, DELETE para borrar, GET para obtener, PUT para actualizar. $ curl -XPOST 'localhost:9200/newyork/article' -d '{ "title": "''Doctor Who'' Versus ''Sherlock''? Keep Dreaming, Comic-Con", "keywords": ["doctor-who", "sherlock-holmes", "comic-con"], "pub_date": "2015-07-09T21:56:18Z", "print_page": 7, "section_name": { "display_name": "U.S.", "content": "us", "url": "http://www.nytimes.com/pages/national/index.html" }, "web_url": "http://www.nytimes.com/aponline/2015/07/09/us/ap-us-comic-con-doctor-who- sherlock.html", "content": "..." }'
  6. Indexando - API RESTful (HTTP) para meter y sacar datos.

    - Bien estándar: POST para crear, DELETE para borrar, GET para obtener, PUT para actualizar. $ curl -XPOST 'localhost:9200/newyork/article' -d '{ "title": "''Doctor Who'' Versus ''Sherlock''? Keep Dreaming, Comic-Con", "keywords": ["doctor-who", "sherlock-holmes", "comic-con"], "pub_date": "2015-07-09T21:56:18Z", "print_page": 7, "section_name": { "display_name": "U.S.", "content": "us", "url": "http://www.nytimes.com/pages/national/index.html" }, "web_url": "http://www.nytimes.com/aponline/2015/07/09/us/ap-us-comic-con-doctor-who- sherlock.html", "content": "..." }' Ubicación de Elasticsearch Nombre del Índice Nombre del Tipo
  7. Schema - En el documento anterior, ¿qué tipo tenía pub_date?

    - ¿Y si hago esto? POST /newyork/article/ { "title": "\'Doctor Who\' Versus \'Sherlock\'? Keep Dreaming, Comic-Con", "pub_date": "nueve de julio de dos mil quince", "print_page": 7, "content": "..." } MapperParsingException[failed to parse [pub_date]] failed to parse date field Invalid format: \"nueve de julio de dos mil quince\"]
  8. Mapping - Internamente mantiene un registro del tipo de cada

    campo. - Elasticsearch no es exactamente schema-free. - Esta información se guarda en el mapping asociado al tipo. - Para consultarlo, API: - Se puede crear manual: - No se puede modificar. GET /newyork/article/_mapping POST /newyork/article/_mapping
  9. Consultas (I) - Queremos realizar consultas más complejas sobre los

    datos almacenados. - Las consultas sobre los datos se hacen (también) con una API REST, donde la consulta es un JSON. - Se realiza un GET al endpoint /<index>/<tipo>/_search. - Ejemplo: GET /newyork/article/_search { "query": { "match_all": {} } }
  10. Consultas (II) - Tres tipos de consultas: - Queries, o

    consultas no estructuradas. - Filtros, o consultas estructuradas. - Agregaciones.
  11. Queries (I) - Se basan en buscar palabras o frases

    en campos de texto libre. - Utilizan la librería - Almacena los campos de texto en un índice invertido. - Para hacer una búsqueda, se fija en qué documentos aparece la palabra y le calcula un puntaje (relevancia o score).
  12. Queries (II) - Para almacenar texto en el índice invertido

    hay que procesarlo antes. - Esta tarea se llama text analysis. - Qué se hace exactamente depende del caso de uso. - Se especifica en el mapping. Stopwords: el, la, los Lowercasing: Gato vs. gato Stemming: jugando vs. jugó Synonyms: saltar vs. brincar "content": { "type": "string", "analyzer": "standard" }
  13. Filters - Se utilizan cuando queremos filtrar documentos. - Para

    cada documento del índice, un filtro se cumple o no (no afecta al score). - Se usan en conjunto con queries, para restringir dominio de búsqueda.
  14. Algunos Ejemplos - Buena documentación de queries y filtros. -

    Para empezar: https://www.elastic. co/guide/en/elasticsearch/guide/current/_most_important_quer ies_and_filters.html https://gist.github.com/nagitsu/b8e22c58f3d5965878f1
  15. Agregaciones - Las consultas anteriores devuelven documentos individuales. - Las

    aggregations permiten obtener datos derivados de los documentos. - Mucha variedad, muy potentes, rápidos. - Resultados aproximados.
  16. Modelo Distribuido (I) - Nodo: instancia de Elasticsearch. - Cluster:

    conjunto de nodos coordinados. - Brindan una única vista lógica de los datos. - Shard: subdivisión de un índice. - Ayudan a escalar horizontalmente. - Ayudan a distribuir la carga, paralelizando tareas. - Ayudan a brindar redundancia.
  17. Modelo Distribuido (II) - Redundancia a través de la replicación

    de shards. - Todo esto se realiza de forma transparente al usuario. - La cantidad de shards se elige a priori para cada índice. El nivel de replicación se puede cambiar en cualquier momento. - Shard como unidad de distribución.
  18. Modelo Distribuido (III) - Las consultas se pueden hacer a

    cualquier nodo del cluster. - Consultar a los nodos necesarios, acumula el resultado, y lo devuelve al usuario. Puede elegir una réplica en lugar de un shard primario. Tiene que juntar los resultados de cada shard.
  19. Fin!