Elasticsearch es un servidor de búsqueda basado en Lucene. Provee un motor de búsqueda de texto completo, distribuido y con capacidad de multitenencia 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.

Elasticsearch
Información general
Tipo de programa Búsqueda e index
Autor Shay Banon
Desarrollador Shay Banon
Licencia Apache License 2.0
Estado actual Activo
Información técnica
Programado en Java
Plataformas admitidas máquina virtual Java
Versiones
Última versión estable 8.2.3 ( 14 de junio de 2022 (1 año, 10 meses y 19 días))
Enlaces
Elasticsearch BV
Creador Shay Banon
Tipo base de datos documental, Distributed database management system, buscador, software disponible en el código fuente y empresa de capital abierto
Industria Software Development
Servicios Elasticsearch commercial solutions
Sitio web www.elastic.co
Shay Banon hablando sobre Elasticsearch en Berlín Buzzwords 2010

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 antigua, sin servicio técnico: 0.4 2010-02-08 0.4.0 2010-02-08 No soportado
Versión antigua, sin servicio técnico: 0.5 2010-03-05[5] 0.5.1 2010-03-09 No soportado
Versión antigua, sin servicio técnico: 0.6 2010-04-09[6] 0.6.0 2010-04-09 No soportado
Versión antigua, sin servicio técnico: 0.7 2010-05-14[7] 0.7.1 2010-05-17[8] No soportado
Versión antigua, sin servicio técnico: 0.8 2010-05-27[9] 0.8.0 2010-05-27 No soportado
Versión antigua, sin servicio técnico: 0.9 2010-07-26[10] 0.9.0 2010-07-26 No soportado
Versión antigua, sin servicio técnico: 0.10 2010-08-27[11] 0.10.0 2010-08-27 No soportado
Versión antigua, sin servicio técnico: 0.11 2010-09-29[12] 0.11.0 2010-09-29 No soportado
Versión antigua, sin servicio técnico: 0.12 2010-10-18[13] 0.12.1 2010-10-27 No soportado
Versión antigua, sin servicio técnico: 0.13 2010-11-18[14] 0.13.1 2010-12-03 No soportado
Versión antigua, sin servicio técnico: 0.14 2010-12-27[15] 0.14.4 2011-01-31 No soportado
Versión antigua, sin servicio técnico: 0.15 2011-02-18[16] 0.15.2 2011-03-07 No soportado
Versión antigua, sin servicio técnico: 0.16 2011-04-23[17] 0.16.5 2011-07-26 No soportado
Versión antigua, sin servicio técnico: 0.17 2011-07-19[18] 0.17.10 2011-11-16 No soportado
Versión antigua, sin servicio técnico: 0.18 2011-10-26[19] 0.18.7 2012-01-10[20] No soportado
Versión antigua, sin servicio técnico: 0.19 2012-03-01[21] 0.19.12 2012-12-04[22] No soportado
Versión antigua, sin servicio técnico: 0.20 2012-12-07[23] 0.20.6 2013-03-25[24] No soportado
Versión antigua, sin servicio técnico: 0.90 2013-04-29[25] 0.90.13 2014-03-25[26] No soportado
Versión antigua, sin servicio técnico: 1.0 2014-02-12[27] 1.0.3 2014-04-16[28] No soportado
Versión antigua, sin servicio técnico: 1.1 2014-03-25[26] 1.1.2 2014-05-22[29] No soportado
Versión antigua, sin servicio técnico: 1.2 2014-05-22[29] 1.2.4 2014-08-13[30] No soportado
Versión antigua, sin servicio técnico: 1.3 2014-07-23[31] 1.3.9 2015-02-19[32] No soportado
Versión antigua, sin servicio técnico: 1.4 2014-11-05[33] 1.4.5 2015-04-27[34] No soportado
Versión antigua, sin servicio técnico: 1.5 2015-03-23[35] 1.5.2 2015-04-27[34] No soportado
Versión antigua, sin servicio técnico: 1.6 2015-06-09[36] 1.6.2 2015-07-29[37] No soportado
Versión antigua, sin servicio técnico: 1.7 2015-07-16[38] 1.7.5 2016-02-02[39] No soportado
Versión antigua, sin servicio técnico: 2.0 2015-10-28[40] 2.0.2 2015-12-17[41] No soportado
Versión antigua, sin servicio técnico: 2.1 2015-11-24[42] 2.1.2 2016-02-02[39] No soportado
Versión antigua, con servicio técnico: 2.2 2016-02-02[39] 2.2.2 2016-03-30[43] Soportado
Versión antigua, con servicio técnico: 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
Versión antigua, con servicio técnico: 5.0 2016-09-26[47] 5.0.2 2016-11-29[48] Soportado
Versión antigua, con servicio técnico: 5.1 2016-12-08[49] 5.1.2 2017-01-12[50] Soportado
Versión antigua, con servicio técnico: 5.2 2017-01-31[51] 5.2.2 2017-02-28[52] Soportado
Versión antigua, con servicio técnico: 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 antigua
Versión antigua, con soporte técnico
Última versión
Última versión previa
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 de gran alcance, además de simple, que permite conocer y explorar los datos de la mejor manera. Al ser utilizado a través de una interfaz de tipo JSON, las consultas son muy sencillas de leer y, lo más importante, de depurar.

Sobre la base de su estructura y componentes, las consultas 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 específico solicitado. Las segundas se podría decir que son una combinación de la primera, una manera de realizar consultas "conjuntas" para obtener información más compleja y detallada.

Tipos de consultas editar

Una consulta comienza con la palabra "query" seguida de unas 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:

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

Match query editar

Este tipo de consulta se utiliza para realizar una búsqueda donde se busca igualar determinados valores 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 utilizan cuando se trabaja con datos como números 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 o igual a determinado valor, "gt": mayor a determinado valor, "lte": menor o igual , "lt": menor):

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

Estos son algunos de los ejemplos de consulta 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 compatible en todas las plataformas donde Java lo sea.
  • Tiene una gran velocidad de respuesta.
  • Es distribuido, lo que lo hace fácilmente escalable y adaptable a las distintas situaciones.
  • Simple realización de respaldos de los datos almacenados.
  • Utiliza objetos JSON como respuesta, por lo que es fácil de invocar desde varios lenguajes de programación.

Desventajas editar

Como todo, ElasticSearch posee algunas desventajas:

  • Sólo soporta como tipos de respuesta JSON, lo que lo limita al no soportar otros lenguajes, como CSV o XML.
  • Algunas situaciones pueden generar casos de split-brain.

Resumen editar

Elasticsearch puede ser usado para buscar todo tipo de documentos. La búsqueda es escalable y casi en tiempo real, soportando tenencia múltiple.[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 peticiones GET 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]​ También es el corazón del proyecto europeo de centralización de memorias de traducción para administraciones públicas europeas NEC-TM liderado por Pangeanic dentro del programa "Connectar Europa".

Interacción con otras herramientas de software editar

Elasticsearch forma parte de los sistemas de gestión de eventos e información de seguridad, específicamente en la Plataforma ELK (siglas de ElasticSearch-LogStash-Kibana). Elasticsearch también acepta de manera nativa otras herramientas de visualización y exploración, pudiéndose utilizar Grafana y/o Kibana para tales propósitos.[75]

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 27 de abril de 2016. 
  5. «0.5.0 Released». Consultado el 29 de noviembre de 2015. 
  6. «0.6.0 Released». Consultado el 29 de noviembre de 2015. 
  7. «0.7.0 Released». Consultado el 29 de noviembre de 2015. 
  8. «0.7.1 Released». Consultado el 29 de noviembre de 2015. 
  9. «0.8.0 Released». Consultado el 29 de noviembre de 2015. 
  10. «0.9.0 Released». Consultado el 29 de noviembre de 2015. 
  11. «0.10.0 Released». Consultado el 29 de noviembre de 2015. 
  12. «0.11.0 Released». Consultado el 29 de noviembre de 2015. 
  13. «0.12.0 Released». Consultado el 29 de noviembre de 2015. 
  14. «0.13.0 Released». Consultado el 29 de noviembre de 2015. 
  15. «0.14.0 Released». Consultado el 29 de noviembre de 2015. 
  16. «0.15.0 Released». Consultado el 29 de noviembre de 2015. 
  17. «0.16.0 Released». Consultado el 29 de noviembre de 2015. 
  18. «0.17.0 Released». Consultado el 29 de noviembre de 2015. 
  19. «0.18.0 Released». Consultado el 29 de noviembre de 2015. 
  20. «0.18.7 Released». Consultado el 29 de noviembre de 2015. 
  21. «0.19.0 Released». Consultado el 29 de noviembre de 2015. 
  22. «0.19.12 Released». Consultado el 29 de noviembre de 2015. 
  23. «0.20.0 Released». Consultado el 29 de noviembre de 2015. 
  24. «0.20.6 Released». Consultado el 29 de noviembre de 2015. 
  25. «0.90.0 Released». Consultado el 29 de noviembre de 2015. 
  26. a b «Elasticsearch 1.1.0, 1.0.2 and 0.90.13 released». Consultado el 29 de noviembre de 2015. 
  27. «1.0.0 Released». Consultado el 29 de noviembre de 2015. 
  28. «Elasticsearch 1.1.1 and 1.0.3 Released». Consultado el 29 de noviembre de 2015. 
  29. a b «Elasticsearch 1.2.0 and 1.1.2 released». Consultado el 29 de noviembre de 2015. 
  30. «Elasticsearch 1.3.2 and 1.2.4 Released». Consultado el 29 de noviembre de 2015. 
  31. «Elasticsearch 1.3.0 And 1.2.3 Released». Consultado el 29 de noviembre de 2015. 
  32. «Elasticsearch 1.4.4 and 1.3.9 Released». Consultado el 29 de noviembre de 2015. 
  33. «Elasticsearch 1.4.0 And 1.3.5 Released». Consultado el 29 de noviembre de 2015. 
  34. a b «Elasticsearch 1.5.2 and 1.4.5 Released». Consultado el 29 de noviembre de 2015. 
  35. «Elasticsearch 1.5.0 Released». Consultado el 29 de noviembre de 2015. 
  36. «Elasticsearch 1.6.0 released». Consultado el 29 de noviembre de 2015. 
  37. «Elasticsearch 1.7.1 and 1.6.2 released». Consultado el 29 de noviembre de 2015. 
  38. «Elasticsearch 1.7.0 and 1.6.1 released». Consultado el 29 de noviembre de 2015. 
  39. a b c «Elasticsearch 2.2.0 and 2.1.2 and 1.7.5 released». Consultado el 2 de febrero de 2016. 
  40. «Elasticsearch 2.0.0 GA released». Consultado el 29 de noviembre de 2015. 
  41. «Elasticsearch 2.1.1, 2.0.2, and 1.7.4 released». Consultado el 17 de diciembre de 2015. 
  42. «Elasticsearch 2.1.0 and 2.0.1 released». Consultado el 29 de noviembre de 2015. 
  43. a b «Elasticsearch 2.3.0 and 2.2.2 released». Consultado el 30 de marzo de 2016. 
  44. «Elasticsearch 2.3.3 released». Consultado el 18 de mayo de 2016. 
  45. «Elasticsearch 2.4.0 released». Consultado el 28 de abril de 2017. 
  46. «Elasticsearch 2.4.5 released». Consultado el 18 de mayo de 2016. 
  47. «Elasticsearch 5.0.0-GA released». Consultado el 26 de septiembre de 2016. 
  48. «Elasticsearch 5.0.2 released». Consultado el 29 de noviembre de 2016. 
  49. «Elasticsearch 5.1.1 released». Consultado el 26 de septiembre de 2016. 
  50. «Elasticsearch 5.1.2 released». Consultado el 12 de enero de 2017. 
  51. «Elasticsearch 5.2.0 released». Consultado el 31 de enero de 2017. 
  52. «Elasticsearch 5.2.2 released». Consultado el 28 de febrero de 2017. 
  53. «Elasticsearch 5.3.0 released». Consultado el 28 de marzo de 2017. 
  54. «Elasticsearch 5.3.3 released». Consultado el 1 de junio de 2017. 
  55. «Elasticsearch 5.4.0 released». Consultado el 4 de mayo de 2017. 
  56. «Elasticsearch 5.4.3 released». Consultado el 27 de junio de 2017. 
  57. a b «Official Website». Elasticsearch.org. Archivado desde el original el 10 de marzo de 2015. Consultado el 4 de febrero de 2014. 
  58. «percolate at elasticsearch.org reference». Elasticsearch.org. Archivado desde el original el 2 de octubre de 2013. Consultado el 4 de febrero de 2014. 
  59. «elasticsearch Guide: Gateway». elasticsearch. Archivado desde el original el 1 de octubre de 2013. Consultado el 19 de abril de 2013. 
  60. «ElasticSearch as database». Karussell.wordpress.com. Archivado desde el original el 21 de agosto de 2018. Consultado el 4 de febrero de 2014. 
  61. «No transaction support». Elasticsearch-users.115913.n3.nabble.com. 8 de julio de 2010. Archivado desde el original el 6 de octubre de 2018. 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. «Copia archivada». Archivado desde el original el 4 de marzo de 2015. Consultado el 25 de marzo de 2015. 
  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. Archivado desde el original el 3 de diciembre de 2013. 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. 
  75. «Using Elasticsearch in Grafana» (html). Grafana Org. (en inglés). Consultado el 19 de diciembre de 2018. «Grafana ships with advanced support for Elasticsearch. You can do many types of simple or complex Elasticsearch queries to visualize logs or metrics stored in Elasticsearch. You can also annotate your graphs with log events stored in Elasticsearch.»