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

ElasticSearch: hacer un Google es una papa

ElasticSearch: hacer un Google es una papa

BarCamp BA 2012

Avatar for Mariano Iglesias

Mariano Iglesias

November 04, 2012
Tweet

More Decks by Mariano Iglesias

Other Decks in Programming

Transcript

  1. ¿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á.
  2. Te empieza a gustar • Montado sobre Lucene • “Schema­free”

    • REST – ¡Hasta la configuración! • Múltiples índices (y poder buscar en 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)
  3. <3 curl -XPUT 'http://localhost:9200/articulos/articulo/1' -d '{ "titulo": "Buenas cervezas", "contenido":

    "Todas. Menos Budweiser.", "tags": ["cerveza", "budweiser"] }' curl -XGET 'http://localhost:9200/articulos/articulo/_search?q=cerveza&pretty' REST Le pasás JSON Te devuelve JSON Índice Tipo Índice ID API
  4. 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 }
  5. 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
  6. 0, 0, 0 curl -XDELETE '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"} }}, }} }'
  7. 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
  8. Super requete­recontra escalable • Shards: parte de los documentos (cada

    uno es un índice Lucene). Se shardea por _id • Cada shard puede tener réplicas (que se pueden crear dinamicamente!)