SlideShare ist ein Scribd-Unternehmen logo
1 von 25
Downloaden Sie, um offline zu lesen
BarCamp BA 2012                    @mgiglesias




          ElasticSearch
         La tenés atroden Google
$ who am i
●   @mgiglesias
●   C++, Node.js, Python, PHP
●   Open source
●   NodoJS y GrupoPHP
●   WORKANA → www.workana.com
En tu cara Google
¿Me ponés un buscadorcito?
● Los que merecen ser exterminados
   – Usá LIKE. Es fácil.
● Los que te odian


   – MySQL FULL TEXT
● Los que piensan que The Matrix está basada en hechos

  reales
   – Creá tu propio indexador
● Los que te quieren. Un poquito nomás.


   – Sphinx
● Los que te quieren ver destronar a Zuckerberg. Y te ayudan


  a hacerlo.
   – ElasticSearch papá.
¿¿¿¿Java == Diversión????
Te empieza a gustar
●   Montado sobre Lucene
●   “Schema-free”
●   REST
    –   ¡Hasta la configuración!
●   Múltiples índices (y poder buscar a través)
●   Casi super requete-recontra real time
●   Super requete-recontra distribuido
●   Una papa de instalar, integrar, y escalar
●   El tipo que lo creó es un loco de la guerra (@kimchy)
Conceptos
●   Nodos
●   Índices
●   Tipos
●   Documentos
<3
           REST
                                         Índice            ID
curl -XPUT 'http://localhost:9200/articulos/articulo/1' -d '{
    "titulo": "Buenas cervezas",               Tipo
    "contenido": "Todas. Menos Budweiser.",
    "tags": ["cerveza", "budweiser"]
}'

           Le pasás JSON


curl -XGET
 'http://localhost:9200/articulos/articulo/_search?q=cerveza&pretty'
                                                  API
                      Te devuelve JSON
Obtener documento

curl -XGET 'http://localhost:9200/articulos/articulo/1?pretty'




          {
              "_index" : "articulos",
              "_type" : "articulo",
              "_id" : "1",
              "_version" : 1,
              "exists" : true,
              "_source" : {
                "titulo":"Buenas cervezas",
                "contenido":"Todas. Menos Budweiser."
          }
Actualizar documento

curl -XPUT 'http://localhost:9200/articulos/articulo/1' -d '{
    "titulo": "Buenas cervezas",
    "contenido": "Todas. Menos Budweiser. Tampoco Schneider.",
    "tags" ["cerveza", "budweiser", "schneider"]
}'




                   {
                       "ok":true,
                       "_index":"articulos",
                       "_type":"articulo",
                       "_id":"1",
                       "_version":2
                   }
¿Simplemente un buscador?


curl -XGET 'http://localhost:9200/_all/articulo/_search?q=cerveza'


                                 Busco todos los índices




curl -XGET
  'http://localhost:9200/articulos/articulo,autor/_search?q=name:X'


                       Busco varios tipos de datos
Tipos de datos
●   Quiero tener algunos elementos del documento
    no indexables
●   Quiero poder buscar, agregar filtros, y ordenar
●   Datos simples: string, integer, long, float, double,
    boolean, null
●   Datos compuestos: array, object
●   boost
●   include_in_all
0, 0, 0

curl -XDELETE 'http://localhost:9200/articulos'

curl -XPUT 'http://localhost:9200/articulos'

curl -XPUT 'http://localhost:9200/articulos/articulo/_mapping' -d '{
    "articulo": { "properties": {
        "titulo": {"type":"string"},
        "pais": {"type":"string", "include_in_all":false},
        "contenido": {"type":"string"},
        "publicado": {"type":"date", "format": "yyyy-MM-dd HH:mm:ss"},
        "tags": {"type":"string"},
        "rating": {"type":"object", "properties":{
            "promedio": {"type": "float"},
            "total": {"type": "long"}
        }}
    }}
}'
Filtros

curl -XPUT 'http://localhost:9200/articulos/articulo/1' -d '{
    "titulo": "Buenas cervezas",
    "contenido": "Todas. Menos Budweiser.",
    "publicado": "2012-11-04 06:43:00",
    "tags": ["cerveza", "budweiser"],
    "rating": {"promedio": 8.7, "total": 15}
}'

curl -XGET 'http://localhost:9200/articulos/articulo/_search?q=cerveza' -d '{
    "filter": {
        "range": {"rating.total": {"from": 10}}
    }
}'
Filtros
●   limit
●   and, or, not
●   exists
●   geo_distance, geo_distance_range,
    geo_bbox, geo_shape, …
●   range, numeric_range
●   has_parent, has_child
Mejorando la búsqueda
●   Query en el POST
●   query_string
●   field
●   bool: must, must_not
●   fuzzy
●   wildcard
Facets
Rivers
●   Consume datos (los trae o los recibe) y los mete en ES
●   Rivers
    –   CouchDB
    –   RabbitMQ
    –   Twitter
    –   Wikipedia
●   Community
    –   MongoDB
    –   JDBC
Percolator
●   Almaceno una query (en un índice)
●   Ejecuto esa query (_percolate) sobre un documento
    –   ¡No almacena el documento en el índice!
●   Me dice que queries matchearon
●   Ejemplo: tweets que matcheen una búsqueda, a
    medida que vienen
●   Como almaceno queries, puedo filtrar que queries
    se ejecutan (wow)
Super requete-recontra escalable
●   Shards: parte de los documentos (cada uno es un
    índice Lucene). Se shardea por _id
    –   En cuantas “partes” queremos dividir los datos
    –   Si un nodo se cae, todavía tenemos parte de los datos
    –   Más shards, mejor indexing
●   Cada shard puede tener réplicas (que se pueden crear
    dinamicamente!)
    –   Copias. Si se caen varios shards, aun podemos tener toda
        la data
    –   Más replicas, mejor búsqueda
Super requete-recontra escalable


     Shard 1                Replica 1              Shard 2       Replica 2

Articulo 1              Articulo 1            Articulo 2     Articulo 2
Articulo 3              Articulo 3            Articulo 4     Articulo 4




               Query para artículos 1, 2, 4
Una tormenta de magia
●   Discovery: identificar nodos, y seleccionar nodo
    master
●   El master mantiene el estado del cluster, y
    reasigna shards si nodos entran / se van
●   Los nodos responden a los requests (no van a
    master)
●   Un nodo sabe si puede responder un request, y si
    no lo delega
●   Auto-discovery por Zen o EC2
Persistent storage
●   La info sobre un nodo es temporaria
    –   JVM heap (ojo!)
●   Persistent: para estado del cluster e indices
●   Permite un full recovery si se restartea el cluster
●   Gateways soportados:
    –   FS local o compartido
    –   Hadoop via HDFS
    –   S3
API
●   _search: errr... buscar :)
●   _status: te da información sobre un índice
●   _refresh: refrescar indices
●   _optimize: optimizar en Lucene
●   _mapping: crear un tipo de datos
BarCamp BA 2012          @mgiglesias




           ¿Preguntas?

Weitere ähnliche Inhalte

Was ist angesagt?

Open source analysis
Open source analysisOpen source analysis
Open source analysisTensor
 
Open source analysis
Open source analysisOpen source analysis
Open source analysisTensor
 
Jorge lopez web_apps
Jorge lopez web_appsJorge lopez web_apps
Jorge lopez web_appseccutpl
 
1.Búsqueda de información en internet
1.Búsqueda de información en internet1.Búsqueda de información en internet
1.Búsqueda de información en internetRaquelMG1994
 
MongoDB (Conceptos Básicos) - Junio 2010
MongoDB (Conceptos Básicos) - Junio 2010MongoDB (Conceptos Básicos) - Junio 2010
MongoDB (Conceptos Básicos) - Junio 2010Rafael Hernamperez
 
MongoDb (BcnDevCon Nov 2011)
MongoDb (BcnDevCon Nov 2011)MongoDb (BcnDevCon Nov 2011)
MongoDb (BcnDevCon Nov 2011)Eduard Tomàs
 
Tarde Técnica Abirtone. MongoDB. Un pequeño sorbo.
Tarde Técnica Abirtone. MongoDB. Un pequeño sorbo.Tarde Técnica Abirtone. MongoDB. Un pequeño sorbo.
Tarde Técnica Abirtone. MongoDB. Un pequeño sorbo.Victor Cuervo
 
Operadores para json en pg 9.2
Operadores para json en pg 9.2Operadores para json en pg 9.2
Operadores para json en pg 9.2Anthony Sotolongo
 
mongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y ComponentesmongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y Componentesomenar
 

Was ist angesagt? (10)

Open source analysis
Open source analysisOpen source analysis
Open source analysis
 
Open source analysis
Open source analysisOpen source analysis
Open source analysis
 
Jorge lopez web_apps
Jorge lopez web_appsJorge lopez web_apps
Jorge lopez web_apps
 
1.Búsqueda de información en internet
1.Búsqueda de información en internet1.Búsqueda de información en internet
1.Búsqueda de información en internet
 
MongoDB (Conceptos Básicos) - Junio 2010
MongoDB (Conceptos Básicos) - Junio 2010MongoDB (Conceptos Básicos) - Junio 2010
MongoDB (Conceptos Básicos) - Junio 2010
 
Nodos e taxonomia en Drupal
Nodos e taxonomia en DrupalNodos e taxonomia en Drupal
Nodos e taxonomia en Drupal
 
MongoDb (BcnDevCon Nov 2011)
MongoDb (BcnDevCon Nov 2011)MongoDb (BcnDevCon Nov 2011)
MongoDb (BcnDevCon Nov 2011)
 
Tarde Técnica Abirtone. MongoDB. Un pequeño sorbo.
Tarde Técnica Abirtone. MongoDB. Un pequeño sorbo.Tarde Técnica Abirtone. MongoDB. Un pequeño sorbo.
Tarde Técnica Abirtone. MongoDB. Un pequeño sorbo.
 
Operadores para json en pg 9.2
Operadores para json en pg 9.2Operadores para json en pg 9.2
Operadores para json en pg 9.2
 
mongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y ComponentesmongoDB - Arquitectura y Componentes
mongoDB - Arquitectura y Componentes
 

Andere mochten auch

Managing Your Content with Elasticsearch
Managing Your Content with ElasticsearchManaging Your Content with Elasticsearch
Managing Your Content with ElasticsearchSamantha Quiñones
 
Elasticsearch - Introduction
Elasticsearch - IntroductionElasticsearch - Introduction
Elasticsearch - IntroductionAlexander Reelsen
 
Data Exploration with Elasticsearch
Data Exploration with ElasticsearchData Exploration with Elasticsearch
Data Exploration with ElasticsearchAleksander Stensby
 
Warhorse pride vol 2 issue 11 20140523
Warhorse pride vol 2 issue 11 20140523Warhorse pride vol 2 issue 11 20140523
Warhorse pride vol 2 issue 11 20140523warhorsepao
 
Terms of endearment - the ElasticSearch Query DSL explained
Terms of endearment - the ElasticSearch Query DSL explainedTerms of endearment - the ElasticSearch Query DSL explained
Terms of endearment - the ElasticSearch Query DSL explainedclintongormley
 
Log -Analytics with Apache-Flume Elasticsearch HDFS Kibana
Log -Analytics with Apache-Flume  Elasticsearch HDFS KibanaLog -Analytics with Apache-Flume  Elasticsearch HDFS Kibana
Log -Analytics with Apache-Flume Elasticsearch HDFS KibanaFelix Rodriguez
 
Aplicando elasticidad en la búsqueda con Grails
Aplicando elasticidad en la búsqueda con GrailsAplicando elasticidad en la búsqueda con Grails
Aplicando elasticidad en la búsqueda con GrailsEnrique Medina Montenegro
 
[131] packetbeat과 elasticsearch
[131] packetbeat과 elasticsearch[131] packetbeat과 elasticsearch
[131] packetbeat과 elasticsearchNAVER D2
 
ElasticSearch Basic Introduction
ElasticSearch Basic IntroductionElasticSearch Basic Introduction
ElasticSearch Basic IntroductionMayur Rathod
 
An Introduction to Elastic Search.
An Introduction to Elastic Search.An Introduction to Elastic Search.
An Introduction to Elastic Search.Jurriaan Persyn
 

Andere mochten auch (13)

Managing Your Content with Elasticsearch
Managing Your Content with ElasticsearchManaging Your Content with Elasticsearch
Managing Your Content with Elasticsearch
 
Elasticsearch - Introduction
Elasticsearch - IntroductionElasticsearch - Introduction
Elasticsearch - Introduction
 
Data Exploration with Elasticsearch
Data Exploration with ElasticsearchData Exploration with Elasticsearch
Data Exploration with Elasticsearch
 
Warhorse pride vol 2 issue 11 20140523
Warhorse pride vol 2 issue 11 20140523Warhorse pride vol 2 issue 11 20140523
Warhorse pride vol 2 issue 11 20140523
 
Elasticsearch Introduction
Elasticsearch IntroductionElasticsearch Introduction
Elasticsearch Introduction
 
Terms of endearment - the ElasticSearch Query DSL explained
Terms of endearment - the ElasticSearch Query DSL explainedTerms of endearment - the ElasticSearch Query DSL explained
Terms of endearment - the ElasticSearch Query DSL explained
 
Log -Analytics with Apache-Flume Elasticsearch HDFS Kibana
Log -Analytics with Apache-Flume  Elasticsearch HDFS KibanaLog -Analytics with Apache-Flume  Elasticsearch HDFS Kibana
Log -Analytics with Apache-Flume Elasticsearch HDFS Kibana
 
Aplicando elasticidad en la búsqueda con Grails
Aplicando elasticidad en la búsqueda con GrailsAplicando elasticidad en la búsqueda con Grails
Aplicando elasticidad en la búsqueda con Grails
 
Introduction to Elasticsearch
Introduction to ElasticsearchIntroduction to Elasticsearch
Introduction to Elasticsearch
 
[131] packetbeat과 elasticsearch
[131] packetbeat과 elasticsearch[131] packetbeat과 elasticsearch
[131] packetbeat과 elasticsearch
 
ElasticSearch Basic Introduction
ElasticSearch Basic IntroductionElasticSearch Basic Introduction
ElasticSearch Basic Introduction
 
Log Management
Log ManagementLog Management
Log Management
 
An Introduction to Elastic Search.
An Introduction to Elastic Search.An Introduction to Elastic Search.
An Introduction to Elastic Search.
 

Ähnlich wie ElasticSearch: la tenés atroden Google

Greach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DBGreach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DBgreach_es
 
Cloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de PersistenciaCloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de PersistenciaDavid J. Brenes
 
NOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDBNOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDBVictor Cuervo
 
Mongodb: Un pequeño sorbo
Mongodb: Un pequeño sorboMongodb: Un pequeño sorbo
Mongodb: Un pequeño sorboAbirtone S.L.
 
Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAlberto Gimeno
 
Caso de éxito Drupal - Procomún - DrupalCamp Spain 2016
Caso de éxito Drupal - Procomún - DrupalCamp Spain 2016Caso de éxito Drupal - Procomún - DrupalCamp Spain 2016
Caso de éxito Drupal - Procomún - DrupalCamp Spain 2016La Drupalera
 
Generalidades de manejo de logs
Generalidades de manejo de logsGeneralidades de manejo de logs
Generalidades de manejo de logsMarvin Xuya
 
Redis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valorRedis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valorAlberto Gimeno
 
Análisis de Datos con MongoDB
Análisis de Datos con MongoDBAnálisis de Datos con MongoDB
Análisis de Datos con MongoDBAlejandro Mancilla
 
Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)Ronald Cuello
 
03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQueryDanae Aguilar Guzmán
 
Persistencia de objetos con Hibernate
Persistencia de objetos con HibernatePersistencia de objetos con Hibernate
Persistencia de objetos con HibernateMauro Gomez Mejia
 
Jean piere sarumo mongodb
Jean piere sarumo mongodbJean piere sarumo mongodb
Jean piere sarumo mongodbJean Sarumo
 

Ähnlich wie ElasticSearch: la tenés atroden Google (20)

Mongo Mapper
Mongo MapperMongo Mapper
Mongo Mapper
 
Greach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DBGreach 2011 - Engrandeciendo Grails con Mongo DB
Greach 2011 - Engrandeciendo Grails con Mongo DB
 
Pgpymongo y pgpycouch
Pgpymongo y pgpycouchPgpymongo y pgpycouch
Pgpymongo y pgpycouch
 
16 Alternativas XML
16 Alternativas XML16 Alternativas XML
16 Alternativas XML
 
Curso integración Web Semántica
Curso integración Web Semántica Curso integración Web Semántica
Curso integración Web Semántica
 
Cloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de PersistenciaCloud Computing: las nuevas Capas de Persistencia
Cloud Computing: las nuevas Capas de Persistencia
 
NOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDBNOSQL: Primeros Pasos en MongoDB
NOSQL: Primeros Pasos en MongoDB
 
Mongodb: Un pequeño sorbo
Mongodb: Un pequeño sorboMongodb: Un pequeño sorbo
Mongodb: Un pequeño sorbo
 
Aplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con RedisAplicaciones web altamente escalables con Redis
Aplicaciones web altamente escalables con Redis
 
Introduccion mongodb
Introduccion mongodbIntroduccion mongodb
Introduccion mongodb
 
NoSQL - MongoDB
NoSQL - MongoDBNoSQL - MongoDB
NoSQL - MongoDB
 
Caso de éxito Drupal - Procomún - DrupalCamp Spain 2016
Caso de éxito Drupal - Procomún - DrupalCamp Spain 2016Caso de éxito Drupal - Procomún - DrupalCamp Spain 2016
Caso de éxito Drupal - Procomún - DrupalCamp Spain 2016
 
Generalidades de manejo de logs
Generalidades de manejo de logsGeneralidades de manejo de logs
Generalidades de manejo de logs
 
Redis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valorRedis, base de datos NoSQL clave-valor
Redis, base de datos NoSQL clave-valor
 
Análisis de Datos con MongoDB
Análisis de Datos con MongoDBAnálisis de Datos con MongoDB
Análisis de Datos con MongoDB
 
Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)Persistencia De Objetos(Hibernate)
Persistencia De Objetos(Hibernate)
 
03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery03. Introduccion a JavaScript y JQuery
03. Introduccion a JavaScript y JQuery
 
Javascript
JavascriptJavascript
Javascript
 
Persistencia de objetos con Hibernate
Persistencia de objetos con HibernatePersistencia de objetos con Hibernate
Persistencia de objetos con Hibernate
 
Jean piere sarumo mongodb
Jean piere sarumo mongodbJean piere sarumo mongodb
Jean piere sarumo mongodb
 

Mehr von Mariano Iglesias

Workana: work in your underwear and still get paid
Workana: work in your underwear and still get paidWorkana: work in your underwear and still get paid
Workana: work in your underwear and still get paidMariano Iglesias
 
Random tips that will save your project's life
Random tips that will save your project's lifeRandom tips that will save your project's life
Random tips that will save your project's lifeMariano Iglesias
 
node-db: La excusa perfecta para hablar de C++ y Node.js
node-db: La excusa perfecta para hablar de C++ y Node.jsnode-db: La excusa perfecta para hablar de C++ y Node.js
node-db: La excusa perfecta para hablar de C++ y Node.jsMariano Iglesias
 
ONGs como Extreme Startups
ONGs como Extreme StartupsONGs como Extreme Startups
ONGs como Extreme StartupsMariano Iglesias
 
Node.js - Eventos para Todos
Node.js - Eventos para TodosNode.js - Eventos para Todos
Node.js - Eventos para TodosMariano Iglesias
 
Things that suck... and some that don't
Things that suck... and some that don'tThings that suck... and some that don't
Things that suck... and some that don'tMariano Iglesias
 
Going crazy with Node.JS and CakePHP
Going crazy with Node.JS and CakePHPGoing crazy with Node.JS and CakePHP
Going crazy with Node.JS and CakePHPMariano Iglesias
 

Mehr von Mariano Iglesias (8)

Go nuts with Go and PHP
Go nuts with Go and PHPGo nuts with Go and PHP
Go nuts with Go and PHP
 
Workana: work in your underwear and still get paid
Workana: work in your underwear and still get paidWorkana: work in your underwear and still get paid
Workana: work in your underwear and still get paid
 
Random tips that will save your project's life
Random tips that will save your project's lifeRandom tips that will save your project's life
Random tips that will save your project's life
 
node-db: La excusa perfecta para hablar de C++ y Node.js
node-db: La excusa perfecta para hablar de C++ y Node.jsnode-db: La excusa perfecta para hablar de C++ y Node.js
node-db: La excusa perfecta para hablar de C++ y Node.js
 
ONGs como Extreme Startups
ONGs como Extreme StartupsONGs como Extreme Startups
ONGs como Extreme Startups
 
Node.js - Eventos para Todos
Node.js - Eventos para TodosNode.js - Eventos para Todos
Node.js - Eventos para Todos
 
Things that suck... and some that don't
Things that suck... and some that don'tThings that suck... and some that don't
Things that suck... and some that don't
 
Going crazy with Node.JS and CakePHP
Going crazy with Node.JS and CakePHPGoing crazy with Node.JS and CakePHP
Going crazy with Node.JS and CakePHP
 

ElasticSearch: la tenés atroden Google

  • 1. BarCamp BA 2012 @mgiglesias ElasticSearch La tenés atroden Google
  • 2. $ who am i ● @mgiglesias ● C++, Node.js, Python, PHP ● Open source ● NodoJS y GrupoPHP ● WORKANA → www.workana.com
  • 3. En tu cara Google
  • 4. ¿Me ponés un buscadorcito? ● Los que merecen ser exterminados – Usá LIKE. Es fácil. ● Los que te odian – MySQL FULL TEXT ● Los que piensan que The Matrix está basada en hechos reales – Creá tu propio indexador ● Los que te quieren. Un poquito nomás. – Sphinx ● Los que te quieren ver destronar a Zuckerberg. Y te ayudan a hacerlo. – ElasticSearch papá.
  • 6. Te empieza a gustar ● Montado sobre Lucene ● “Schema-free” ● REST – ¡Hasta la configuración! ● Múltiples índices (y poder buscar a través) ● Casi super requete-recontra real time ● Super requete-recontra distribuido ● Una papa de instalar, integrar, y escalar ● El tipo que lo creó es un loco de la guerra (@kimchy)
  • 7. Conceptos ● Nodos ● Índices ● Tipos ● Documentos
  • 8. <3 REST Índice ID curl -XPUT 'http://localhost:9200/articulos/articulo/1' -d '{ "titulo": "Buenas cervezas", Tipo "contenido": "Todas. Menos Budweiser.", "tags": ["cerveza", "budweiser"] }' Le pasás JSON curl -XGET 'http://localhost:9200/articulos/articulo/_search?q=cerveza&pretty' API Te devuelve JSON
  • 9. Obtener documento curl -XGET 'http://localhost:9200/articulos/articulo/1?pretty' { "_index" : "articulos", "_type" : "articulo", "_id" : "1", "_version" : 1, "exists" : true, "_source" : { "titulo":"Buenas cervezas", "contenido":"Todas. Menos Budweiser." }
  • 10. Actualizar documento curl -XPUT 'http://localhost:9200/articulos/articulo/1' -d '{ "titulo": "Buenas cervezas", "contenido": "Todas. Menos Budweiser. Tampoco Schneider.", "tags" ["cerveza", "budweiser", "schneider"] }' { "ok":true, "_index":"articulos", "_type":"articulo", "_id":"1", "_version":2 }
  • 11. ¿Simplemente un buscador? curl -XGET 'http://localhost:9200/_all/articulo/_search?q=cerveza' Busco todos los índices curl -XGET 'http://localhost:9200/articulos/articulo,autor/_search?q=name:X' Busco varios tipos de datos
  • 12. Tipos de datos ● Quiero tener algunos elementos del documento no indexables ● Quiero poder buscar, agregar filtros, y ordenar ● Datos simples: string, integer, long, float, double, boolean, null ● Datos compuestos: array, object ● boost ● include_in_all
  • 13. 0, 0, 0 curl -XDELETE 'http://localhost:9200/articulos' curl -XPUT 'http://localhost:9200/articulos' curl -XPUT 'http://localhost:9200/articulos/articulo/_mapping' -d '{ "articulo": { "properties": { "titulo": {"type":"string"}, "pais": {"type":"string", "include_in_all":false}, "contenido": {"type":"string"}, "publicado": {"type":"date", "format": "yyyy-MM-dd HH:mm:ss"}, "tags": {"type":"string"}, "rating": {"type":"object", "properties":{ "promedio": {"type": "float"}, "total": {"type": "long"} }} }} }'
  • 14. Filtros curl -XPUT 'http://localhost:9200/articulos/articulo/1' -d '{ "titulo": "Buenas cervezas", "contenido": "Todas. Menos Budweiser.", "publicado": "2012-11-04 06:43:00", "tags": ["cerveza", "budweiser"], "rating": {"promedio": 8.7, "total": 15} }' curl -XGET 'http://localhost:9200/articulos/articulo/_search?q=cerveza' -d '{ "filter": { "range": {"rating.total": {"from": 10}} } }'
  • 15. Filtros ● limit ● and, or, not ● exists ● geo_distance, geo_distance_range, geo_bbox, geo_shape, … ● range, numeric_range ● has_parent, has_child
  • 16. Mejorando la búsqueda ● Query en el POST ● query_string ● field ● bool: must, must_not ● fuzzy ● wildcard
  • 18. Rivers ● Consume datos (los trae o los recibe) y los mete en ES ● Rivers – CouchDB – RabbitMQ – Twitter – Wikipedia ● Community – MongoDB – JDBC
  • 19. Percolator ● Almaceno una query (en un índice) ● Ejecuto esa query (_percolate) sobre un documento – ¡No almacena el documento en el índice! ● Me dice que queries matchearon ● Ejemplo: tweets que matcheen una búsqueda, a medida que vienen ● Como almaceno queries, puedo filtrar que queries se ejecutan (wow)
  • 20. Super requete-recontra escalable ● Shards: parte de los documentos (cada uno es un índice Lucene). Se shardea por _id – En cuantas “partes” queremos dividir los datos – Si un nodo se cae, todavía tenemos parte de los datos – Más shards, mejor indexing ● Cada shard puede tener réplicas (que se pueden crear dinamicamente!) – Copias. Si se caen varios shards, aun podemos tener toda la data – Más replicas, mejor búsqueda
  • 21. Super requete-recontra escalable Shard 1 Replica 1 Shard 2 Replica 2 Articulo 1 Articulo 1 Articulo 2 Articulo 2 Articulo 3 Articulo 3 Articulo 4 Articulo 4 Query para artículos 1, 2, 4
  • 22. Una tormenta de magia ● Discovery: identificar nodos, y seleccionar nodo master ● El master mantiene el estado del cluster, y reasigna shards si nodos entran / se van ● Los nodos responden a los requests (no van a master) ● Un nodo sabe si puede responder un request, y si no lo delega ● Auto-discovery por Zen o EC2
  • 23. Persistent storage ● La info sobre un nodo es temporaria – JVM heap (ojo!) ● Persistent: para estado del cluster e indices ● Permite un full recovery si se restartea el cluster ● Gateways soportados: – FS local o compartido – Hadoop via HDFS – S3
  • 24. API ● _search: errr... buscar :) ● _status: te da información sobre un índice ● _refresh: refrescar indices ● _optimize: optimizar en Lucene ● _mapping: crear un tipo de datos
  • 25. BarCamp BA 2012 @mgiglesias ¿Preguntas?

Hinweis der Redaktion

  1. * REAL TIME: depende del indice. Refresh de un segundo por defecto
  2. * Nodos: concepto similar a DB engine * Indices: concepto similar a bases de datos * Tipos: concepto similar a tabla * Documento: concepto similar a registro
  3. * REST: PUT versus POST: POST puedo no especificar ID, y me genera uno. PUT si o si tengo que tener ID. * REST: si pongo -XDELETE, borro el documento
  4. * Porque? Porque puedo meter data complicada en el documento
  5. * Como seria borrar? -XDELETE
  6. * boost: levantar relevancia de un campo. Ejemplo: skills en Workana
  7. * Se puede definir index_analyzer y search_analyzer para cambiar como se analiza el texto en el momento de indexar o buscar * Se puede deshabilitar el indexado sobre campos
  8. * Es un documento, no tengo porque especificar todos los campos
  9. * limit: limito cantidad de registros * exists: que un campo existe * numeric_range: mas rapido que range porque pre-carga datos en memoria * has_parent / has_child: para documentos embebidos
  10. * query_string: se puede usar OR, AND * field: como query_string pero para un field especifico * fuzzy: Levenshtein, se puede poner un minimo de similaridad. Para numericos, se transforma en un range
  11. * Counts agregados junto con la consulta
  12. * Replicas: se usan para query en paralelo
  13. ** EL CLUSTER se puede manejar via API! * Zen: default, provee unicast y multicast discovery * EC2: similar a multicast, justamente porque EC2 no es multi-cast friendly
  14. * _status: cantidad de operaciones, numero de documentos, de todo * _refresh: refrescar explicitamente uno o más indices. Las capacidades real time dependen del tipo de engine usado en el índice: por ejemplo robin requiere llamada a refresh (se llama periodicamente)