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 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 especifico 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[editar]

{
   "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 utiizan 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 ó 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 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 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 o 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. La búsqueda es escalable y casi en tiempo real, soportando 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 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. 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. «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. 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.