Articles

Elasticsearch – Query DSL

Anuncios

En Elasticsearch, la búsqueda se realiza mediante el uso de consultas basadas en JSON. Una consulta se compone de dos cláusulas –

  • Cláusulas de consulta de hoja – Estas cláusulas son de coincidencia, término o rango, que buscan un valor específico en un campo específico.

  • Cláusulas de consulta compuesta – Estas consultas son una combinación de cláusulas de consulta de hoja y otras consultas compuestas para extraer la información deseada.

  • Elasticsearch soporta un gran número de consultas. Una consulta comienza con una palabra clave de consulta y luego tiene condiciones y filtros dentro en forma de objeto JSON. A continuación se han descrito los diferentes tipos de consultas.

    Consulta Match All

    Esta es la consulta más básica; devuelve todo el contenido y con la puntuación de 1,0 para cada objeto.

POST /schools/_search{ "query":{ "match_all":{} }}

Al ejecutar el código anterior, obtenemos el siguiente resultado –

{ "took" : 7, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 2, "relation" : "eq" }, "max_score" : 1.0, "hits" : , "fees" : 2200, "tags" : , "rating" : "3.3" } }, { "_index" : "schools", "_type" : "school", "_id" : "4", "_score" : 1.0, "_source" : { "name" : "City Best School", "description" : "ICSE", "street" : "West End", "city" : "Meerut", "state" : "UP", "zip" : "250002", "location" : , "fees" : 3500, "tags" : , "rating" : "4.5" } } ] }}

Consultas de texto completo

Estas consultas se utilizan para buscar un cuerpo de texto completo como un capítulo o un artículo de noticias. Esta consulta funciona según el analizador asociado a ese índice o documento en particular. En esta sección hablaremos de los diferentes tipos de consultas de texto completo.

Consulta de coincidencia

Esta consulta hace coincidir un texto o frase con los valores de uno o varios campos.

POST /schools*/_search{ "query":{ "match" : { "rating":"4.5" } }}

Al ejecutar el código anterior, obtenemos la respuesta que se muestra a continuación –

{ "took" : 44, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 0.47000363, "hits" : , "fees" : 3500, "tags" : , "rating" : "4.5" } } ] }}

Consulta Multi Match

Esta consulta coincide con un texto o frase con más de un campo.

POST /schools*/_search{ "query":{ "multi_match" : { "query": "paprola", "fields": } }}

Al ejecutar el código anterior, obtenemos la respuesta que se muestra a continuación –

{ "took" : 12, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 0.9808292, "hits" : , "fees" : 2200, "tags" : , "rating" : "3.3" } } ] }}

Consulta de cadena de consulta

Esta consulta utiliza el analizador de consultas y la palabra clave query_string.

POST /schools*/_search{ "query":{ "query_string":{ "query":"beautiful" } }} 

Al ejecutar el código anterior, obtenemos la respuesta que se muestra a continuación –

{ "took" : 60, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" },………………………………….

Consultas de nivel de término

Estas consultas tratan principalmente con datos estructurados como números, fechas y enums.

POST /schools*/_search{ "query":{ "term":{"zip":"176115"} }}

Al ejecutar el código anterior, obtenemos la respuesta que se muestra a continuación –

……………………………..hits" : , } }] …………………………………………..

Consulta de rango

Esta consulta se utiliza para encontrar los objetos que tienen valores entre los rangos de valores dados. Para ello, necesitamos utilizar operadores como –

  • gte – mayor que igual a
  • gt – mayor que
  • lte – menor que igual a
  • lt – menor que

Por ejemplo, observe el código dado a continuación –

POST /schools*/_search{ "query":{ "range":{ "rating":{ "gte":3.5 } } }}

Al ejecutar el código anterior, obtenemos la respuesta como se muestra a continuación –

{ "took" : 24, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 1, "relation" : "eq" }, "max_score" : 1.0, "hits" : , "fees" : 3500, "tags" : , "rating" : "4.5" } } ] }}

Existen otros tipos de consultas a nivel de término también como –

  • Consulta de existencia – Si un determinado campo tiene valor no nulo.

  • Consulta de ausencia – Esto es completamente opuesto a la consulta de existencia, esta consulta busca objetos sin campos específicos o campos que tienen valor nulo.

  • Consulta de comodines o regexp – Esta consulta utiliza expresiones regulares para encontrar patrones en los objetos.

    • Consultas compuestas

      Estas consultas son una colección de diferentes consultas fusionadas entre sí mediante el uso de booleanoperadores como and, or, not or para diferentes índices o teniendo llamadas a funciones, etc.

POST /schools/_search{ "query": { "bool" : { "must" : { "term" : { "state" : "UP" } }, "filter": { "term" : { "fees" : "2200" } }, "minimum_should_match" : 1, "boost" : 1.0 } }}

Al ejecutar el código anterior, obtenemos la respuesta que se muestra a continuación –

{ "took" : 6, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : { "value" : 0, "relation" : "eq" }, "max_score" : null, "hits" : }}

Consultas geográficas

Estas consultas tratan sobre ubicaciones y puntos geográficos. Estas consultas ayudan a encontrar escuelas o cualquier otro objeto geográfico cerca de cualquier ubicación. Es necesario utilizar el tipo de datos geo point.

PUT /geo_example{ "mappings": { "properties": { "location": { "type": "geo_shape" } } }}

Al ejecutar el código anterior, obtenemos la respuesta como se muestra a continuación –

{ "acknowledged" : true, "shards_acknowledged" : true, "index" : "geo_example"}

Ahora publicamos los datos en el índice creado anteriormente.

POST /geo_example/_doc?refresh{ "name": "Chapter One, London, UK", "location": { "type": "point", "coordinates": }}

Al ejecutar el código anterior, obtenemos la respuesta que se muestra a continuación –

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *