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:
{ "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 ó 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
Se podrían enumerar varias ventajas que brinda esta herramienta. Algunas de las más destacables son las siguientes:
Desventajas
Como todo, ElasticSearch posee algunas desventajas:
Resumen
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 […]”.
Utiliza Lucene e intenta hacer todas sus funciones disponibles a través de JSON y Java API. Soporta facetado y percolación, 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, pero carece de transacciones distribuidas.