Elasticsearch

De Wikipedia, la enciclopedia libre
Saltar a: navegación, búsqueda
Elasticsearch
www.elastic.co y www.elastic.co/products/elasticsearch
Información general
Desarrollador(es) Elastic
Género Búsqueda y index
Programado en Java
Sistema operativo Multiplataforma
Plataforma Máquina virtual Java
Licencia Apache License 2.0
Estado actual Activo
[editar datos en Wikidata]
Elasticsearch BV
Tipo base de datos documental, Distributed database management system y motor de búsqueda
Industria Software Development
Servicios Elasticsearch commercial solutions
Sitio web www.elastic.co y www.elastic.co/products/elasticsearch
[editar datos en Wikidata]
Shay Banon hablando sobre Elasticsearch en Berlín Buzzwords 2010

Elasticsearch es un servidor de búsqueda basado en Lucene. Provee un motor de búsqueda de texto completo, distribuido y con capacidad de multi-tenencia con una interfaz web RESTful y con documentos JSON. Elasticsearch está desarrollado en Java y está publicado como código abierto bajo las condiciones de la licencia Apache.

Historia[editar]

Shay Banon creó Compass en 2004.[1]​ Mientras pensaba en la tercera versión de Compass, llegó a la conclusión de que habría que reescribir grandes partes de su código para “crear una solución de búsqueda escalable”. Entonces creó “una solución construida para ser distribuida desde el comienzo” con la interfaz JSON sobre HTTP, muy común y adecuada para lenguajes de programación que no sean Java.[1]​ Shay Banon liberó la primera versión en febrero de 2010.[2]

En junio de 2014, la compañía anunció la recaudación de US $70 millones en una ronda de financiación Serie C, tan sólo pasando 18 meses de la creación de la misma. La ronda fue liderada por New Enterprise Associates (NEA), además de otros como Benchmark Capital e Index Ventures. Esta ronda obtuvo una financiación total de US $104 millones.[3]

Versión Fecha original de liberación Última versión Fecha de liberación Mantenimiento[4]
Versión antígua, no soportada: 0.4 2010-02-08 0.4.0 2010-02-08 No soportado
Versión antígua, no soportada: 0.5 2010-03-05[5] 0.5.1 2010-03-09 No soportado
Versión antígua, no soportada: 0.6 2010-04-09[6] 0.6.0 2010-04-09 No soportado
Versión antígua, no soportada: 0.7 2010-05-14[7] 0.7.1 2010-05-17[8] No soportado
Versión antígua, no soportada: 0.8 2010-05-27[9] 0.8.0 2010-05-27 No soportado
Versión antígua, no soportada: 0.9 2010-07-26[10] 0.9.0 2010-07-26 No soportado
Versión antígua, no soportada: 0.10 2010-08-27[11] 0.10.0 2010-08-27 No soportado
Versión antígua, no soportada: 0.11 2010-09-29[12] 0.11.0 2010-09-29 No soportado
Versión antígua, no soportada: 0.12 2010-10-18[13] 0.12.1 2010-10-27 No soportado
Versión antígua, no soportada: 0.13 2010-11-18[14] 0.13.1 2010-12-03 No soportado
Versión antígua, no soportada: 0.14 2010-12-27[15] 0.14.4 2011-01-31 No soportado
Versión antígua, no soportada: 0.15 2011-02-18[16] 0.15.2 2011-03-07 No soportado
Versión antígua, no soportada: 0.16 2011-04-23[17] 0.16.5 2011-07-26 No soportado
Versión antígua, no soportada: 0.17 2011-07-19[18] 0.17.10 2011-11-16 No soportado
Versión antígua, no soportada: 0.18 2011-10-26[19] 0.18.7 2012-01-10[20] No soportado
Versión antígua, no soportada: 0.19 2012-03-01[21] 0.19.12 2012-12-04[22] No soportado
Versión antígua, no soportada: 0.20 2012-12-07[23] 0.20.6 2013-03-25[24] No soportado
Versión antígua, no soportada: 0.90 2013-04-29[25] 0.90.13 2014-03-25[26] No soportado
Versión antígua, no soportada: 1.0 2014-02-12[27] 1.0.3 2014-04-16[28] No soportado
Versión antígua, no soportada: 1.1 2014-03-25[26] 1.1.2 2014-05-22[29] No soportado
Versión antígua, no soportada: 1.2 2014-05-22[29] 1.2.4 2014-08-13[30] No soportado
Versión antígua, no soportada: 1.3 2014-07-23[31] 1.3.9 2015-02-19[32] No soportado
Versión antígua, no soportada: 1.4 2014-11-05[33] 1.4.5 2015-04-27[34] No soportado
Versión antígua, no soportada: 1.5 2015-03-23[35] 1.5.2 2015-04-27[34] No soportado
Versión antígua, no soportada: 1.6 2015-06-09[36] 1.6.2 2015-07-29[37] No soportado
Versión antígua, no soportada: 1.7 2015-07-16[38] 1.7.5 2016-02-02[39] No soportado
Versión antígua, no soportada: 2.0 2015-10-28[40] 2.0.2 2015-12-17[41] No soportado
Versión antígua, no soportada: 2.1 2015-11-24[42] 2.1.2 2016-02-02[39] No soportado
Antígua versión, con soporte: 2.2 2016-02-02[39] 2.2.2 2016-03-30[43] Soportado
Antígua versión, con soporte: 2.3 2016-03-30[43] 2.3.3 2016-05-18[44] Soportado
Versión estable actual: 2.4 2016-04-31[45] 2.4.5 2017-04-27[46] Soportado
Antígua versión, con soporte: 5.0 2016-09-26[47] 5.0.2 2016-11-29[48] Soportado
Antígua versión, con soporte: 5.1 2016-12-08[49] 5.1.2 2017-01-12[50] Soportado
Antígua versión, con soporte: 5.2 2017-01-31[51] 5.2.2 2017-02-28[52] Soportado
Antígua versión, con soporte: 5.3 2017-03-28[53] 5.3.3 2017-06-01[54] Soportado
Versión estable actual: 5.4 2017-05-04[55] 5.4.3 2017-06-27[56] Soportado
Leyenda:
Versión antígua
Versión antígua, soportada
Última versión
Última versión prevista
Lanzamiento futuro

Para más información ingresar a https://www.elastic.co/support/eol.

Queries[editar]

Elasticsearch utiliza Query DSL (Lenguaje de dominio específico) para realizar las consultas a los documentos indexados. Es un lenguaje sumamente flexible, y abarcativo; además de simple para conocer y explorar la data de la mejor manera. Al ser utilizado a través de una interfase de tipo JSON, las consultas se convierten muy sencillas de leer, y lo más importante: de debugear.

Sobre la base de su estructura y componentes, las queries se componen de dos cláusulas: "Leaf Query Clauses" y "Compound Query Clauses". La primera hace referencia a aquellas consultas que tienen operaciones como "match", "term" o "range", que devuelven un valor especifico solicitado. Las segundas se podría decir que son una combinación de la primera, de manera de hacer consultas "conjuntas", para obtener información más compleja y detallada.

Tipos de consultas[editar]

Una query ó consulta comienza con la palabra "query" y luego tiene condiciones y filtros dentro, en la forma de un objeto JSON. Existen distintos tipo de consultas que podemos identificar, por ejemplo:

Match all query[editar]

La consulta más básica que se puede hacer. Devuelve todos los objetos que se encuentren indexados[editar]

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

Match query[editar]

Este tipo de consulta se utiliza para realizar una búsqueda donde se busca igualar determinado valor de un término, o una frase. Entonces, si buscamos por ejemplo dentro de nuestra base de datos, todos los objetos cuyo atributo color es verde; tomaría la siguiente forma:

{
   "query":{
      "match" : {
         "color":"verde"
      }
   }
}

Multi match query[editar]

Muy similar a la consulta descrita anteriormente, pero en lugar de buscar la coincidencia con un valor solo, chequea con varios campos:

{
   "query":{
      "multi_match" : {
         "query": "montevideo",
         "fields": [ "ciudad", "departamento" ]
      }
   }
}

Term queries[editar]

Este tipo de consultas se utiizan cuando se trabaja con data como numeros o fechas, para buscar el valor de un término concreto:

{
   "query":{
      "term":{"animal":"perro"}
   }
}

Range query[editar]

Otro tipo de consultas son aquellas que buscan por el rango de determinado atributo. Se utilizan distintos operadores ("gte": mayor ó igual a determinado valor, "gt": mayor a determinado valor, "lte": menor ó igual , "lt": menor:

{
   "query":{
      "range":{
         "rating":{
            "gte":4
         }
      }
   }
}

Estos son algunos de los ejemplos de queries que se pueden utilizar. Son muchas más las opciones, los operadores y los filtros que se pueden usar; sobre todo si se empieza a combinar los mismos.

Ventajas[editar]

Se podrían enumerar varias ventajas que brinda esta herramienta. Algunas de las más destacables son las siguientes:

  • Al estar desarrollado en Java, es sumamente compatible con casi todas las plataformas.
  • Tiene una gran velocidad de respuesta.
  • Esta distribuido, lo que lo hace fácilmente escalable y adaptable a las distintas situaciones.
  • Simple realizar respaldos de los datos que se tienen.
  • Utiliza objetos JSON como respuesta, por lo que es fácil de invocar a partir de varios lenguajes de programación.

Desventajas[editar]

Como todo, ElasticSearch posee algunas (pocas) desventajas:

  • Solo soporta como tipos de respuesta JSON, lo que si bien lo hace accesible, también lo limita al no involucrar otros lenguajes, como podrían ser: CSV ó XML.
  • Puede suceder que en algunas situaciones caiga en un caso de "split brain".

Resumen[editar]

Elasticsearch puede ser usado para buscar todo tipo de documentos. Provee búsqueda escalable, con búsqueda casi a tiempo real y soporta multi-tenencia.[57]​ “Es distribuido, haciendo que los índices se puedan dividir en fragmentos y cada uno teniendo cero o más réplicas. Cada nodo alberga uno o más fragmentos, actuando como un coordinador para delegar operaciones a los fragmentos correctos. El rebalanceo y ruteo se realizan automáticamente […]”.[57]

Utiliza Lucene e intenta hacer todas sus funciones disponibles a través de JSON y Java API. Soporta facetado y percolación,[58]​ que puede ser útil para notificar si nuevos documentos coinciden con consultas registradas.

Otra funcionalidad llamada "gateway" maneja la persistencia a largo plazo del índice;[59]​ por ejemplo, se puede recuperar un índice del gateway en caso de una caída del servidor. Soporta peticionesGET en tiempo real y esto lo hace válido para una solución NoSQL,[60]​ pero carece de transacciones distribuidas.[61]

Usuarios destacados[editar]

La lista de usuarios destacados de Elasticsearch[62]​ incluye a Wikimedia,[63]StumbleUpon,[64]Mozilla,[65][66]Quora,[67]Foursquare,[68]Etsy,[69]SoundCloud,[70]GitHub,[71]FDA,[72]CERN,[73]​ y Stack Exchange.[74]

Enlaces externos[editar]

Referencias[editar]

  1. a b Banon, Shay. «The Future of Compass & ElasticSearch». Archivado desde el original el 27 de agosto de 2013. 
  2. Banon, Shay (8 de febrero de 2010). «You Know, for Search». Archivado desde el original el 16 de enero de 2013. 
  3. http://techcrunch.com/2014/06/05/elasticsearch-scores-70m-in-series-c-to-fund-growth-spurt/
  4. «Elastic Product End of Life Dates». Consultado el 2016-04-27. 
  5. «0.5.0 Released». Consultado el 2015-11-29. 
  6. «0.6.0 Released». Consultado el 2015-11-29. 
  7. «0.7.0 Released». Consultado el 2015-11-29. 
  8. «0.7.1 Released». Consultado el 2015-11-29. 
  9. «0.8.0 Released». Consultado el 2015-11-29. 
  10. «0.9.0 Released». Consultado el 2015-11-29. 
  11. «0.10.0 Released». Consultado el 2015-11-29. 
  12. «0.11.0 Released». Consultado el 2015-11-29. 
  13. «0.12.0 Released». Consultado el 2015-11-29. 
  14. «0.13.0 Released». Consultado el 2015-11-29. 
  15. «0.14.0 Released». Consultado el 2015-11-29. 
  16. «0.15.0 Released». Consultado el 2015-11-29. 
  17. «0.16.0 Released». Consultado el 2015-11-29. 
  18. «0.17.0 Released». Consultado el 2015-11-29. 
  19. «0.18.0 Released». Consultado el 2015-11-29. 
  20. «0.18.7 Released». Consultado el 2015-11-29. 
  21. «0.19.0 Released». Consultado el 2015-11-29. 
  22. «0.19.12 Released». Consultado el 2015-11-29. 
  23. «0.20.0 Released». Consultado el 2015-11-29. 
  24. «0.20.6 Released». Consultado el 2015-11-29. 
  25. «0.90.0 Released». Consultado el 2015-11-29. 
  26. a b «Elasticsearch 1.1.0, 1.0.2 and 0.90.13 released». Consultado el 2015-11-29. 
  27. «1.0.0 Released». Consultado el 2015-11-29. 
  28. «Elasticsearch 1.1.1 and 1.0.3 Released». Consultado el 2015-11-29. 
  29. a b «Elasticsearch 1.2.0 and 1.1.2 released». Consultado el 2015-11-29. 
  30. «Elasticsearch 1.3.2 and 1.2.4 Released». Consultado el 2015-11-29. 
  31. «Elasticsearch 1.3.0 And 1.2.3 Released». Consultado el 2015-11-29. 
  32. «Elasticsearch 1.4.4 and 1.3.9 Released». Consultado el 2015-11-29. 
  33. «Elasticsearch 1.4.0 And 1.3.5 Released». Consultado el 2015-11-29. 
  34. a b «Elasticsearch 1.5.2 and 1.4.5 Released». Consultado el 2015-11-29. 
  35. «Elasticsearch 1.5.0 Released». Consultado el 2015-11-29. 
  36. «Elasticsearch 1.6.0 released». Consultado el 2015-11-29. 
  37. «Elasticsearch 1.7.1 and 1.6.2 released». Consultado el 2015-11-29. 
  38. «Elasticsearch 1.7.0 and 1.6.1 released». Consultado el 2015-11-29. 
  39. a b c «Elasticsearch 2.2.0 and 2.1.2 and 1.7.5 released». Consultado el 2016-02-02. 
  40. «Elasticsearch 2.0.0 GA released». Consultado el 2015-11-29. 
  41. «Elasticsearch 2.1.1, 2.0.2, and 1.7.4 released». Consultado el 2015-12-17. 
  42. «Elasticsearch 2.1.0 and 2.0.1 released». Consultado el 2015-11-29. 
  43. a b «Elasticsearch 2.3.0 and 2.2.2 released». Consultado el 2016-03-30. 
  44. «Elasticsearch 2.3.3 released». Consultado el 2016-05-18. 
  45. «Elasticsearch 2.4.0 released». Consultado el 2017-04-28. 
  46. «Elasticsearch 2.4.5 released». Consultado el 2016-05-18. 
  47. «Elasticsearch 5.0.0-GA released». Consultado el 2016-09-26. 
  48. «Elasticsearch 5.0.2 released». Consultado el 2016-11-29. 
  49. «Elasticsearch 5.1.1 released». Consultado el 2016-09-26. 
  50. «Elasticsearch 5.1.2 released». Consultado el 2017-01-12. 
  51. «Elasticsearch 5.2.0 released». Consultado el 2017-01-31. 
  52. «Elasticsearch 5.2.2 released». Consultado el 2017-02-28. 
  53. «Elasticsearch 5.3.0 released». Consultado el 2017-03-28. 
  54. «Elasticsearch 5.3.3 released». Consultado el 2017-06-01. 
  55. «Elasticsearch 5.4.0 released». Consultado el 2017-05-04. 
  56. «Elasticsearch 5.4.3 released». Consultado el 2017-06-27. 
  57. a b «Official Website». Elasticsearch.org. Consultado el 4 de febrero de 2014. 
  58. «percolate at elasticsearch.org reference». Elasticsearch.org. Consultado el 4 de febrero de 2014. 
  59. «elasticsearch Guide: Gateway». elasticsearch. Consultado el 19 de abril de 2013. 
  60. «ElasticSearch as database». Karussell.wordpress.com. Consultado el 4 de febrero de 2014. 
  61. «No transaction support». Elasticsearch-users.115913.n3.nabble.com. 8 de julio de 2010. Consultado el 4 de febrero de 2014. 
  62. «Elasticsearch.org Case Studies». Elasticsearch.org. Consultado el 3 de octubre de 2014. 
  63. Horohoe, Chad (6 de enero de 2014). «Wikimedia moving to Elasticsearch». Consultado el 21 de febrero de 2014. 
  64. «StumbleUpon | Developer Blog». StumbleUpon.com. Consultado el 21 de febrero de 2014. 
  65. [1]
  66. «ElasticSearch helps Mozilla Metrics team». Pedroalves-bi.blogspot.com. Consultado el 4 de febrero de 2014. 
  67. «Full Text Search on Quora». Quora.com. Consultado el 4 de febrero de 2014. 
  68. «foursquare now uses Elastic Search (and on a related note: Slashem also works with Elastic Search)! | Foursquare Engineering Blog». Engineering.foursquare.com. Consultado el 21 de febrero de 2014. 
  69. «Oculus: The metric correlation component of Etsy's Kale system». Github.com. Consultado el 4 de febrero de 2014. 
  70. Petar Djekic. «Architecture behind our new Search and Explore experience». Backstage.soundcloud.com. Consultado el 4 de febrero de 2014. 
  71. «A Whole New Code Search 路 GitHub». Github.com. 23 de enero de 2013. Consultado el 21 de febrero de 2014. 
  72. «openFDA - About the API». FDA.gov. 
  73. «Needle in a haystack - Using Elasticsearch to run the Large Hadron Collider of CERN». medium.com. 
  74. Craver, Nick (22 de noviembre de 2013). «What it takes to run Stack Overflow». Consultado el 2 de octubre de 2014.