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

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!)