Articles

Elasticsearch – DSL de requête

Publicités

Dans Elasticsearch, la recherche est effectuée en utilisant une requête basée sur JSON. Une requête est composée de deux clauses –

  • Clauses de requête feuilles – Ces clauses sont de type match, term ou range, qui recherchent une valeur spécifique dans un champ spécifique.

  • Clauses de requête composées – Ces requêtes sont une combinaison de clauses de requête feuilles et d’autres requêtes composées pour extraire les informations souhaitées.

Elasticsearch prend en charge un grand nombre de requêtes. Une requête commence par un mot clé de requête, puis a des conditions et des filtres à l’intérieur sous la forme d’un objet JSON. Les différents types de requêtes ont été décrits ci-dessous.

Match All Query

C’est la requête la plus basique ; elle renvoie tout le contenu et avec le score de 1,0 pour chaque objet.

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

En exécutant le code ci-dessus, nous obtenons le résultat suivant –

{ "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" } } ] }}

Requêtes de texte complet

Ces requêtes sont utilisées pour rechercher un corps de texte complet comme un chapitre ou un article de presse. Cette requête fonctionne selon l’analyseur associé à cet index ou document particulier. Dans cette section, nous allons aborder les différents types de requêtes plein texte.

Requête de correspondance

Cette requête fait correspondre un texte ou une phrase avec les valeurs d’un ou plusieurs champs.

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

Lors de l’exécution du code ci-dessus, nous obtenons la réponse indiquée ci-dessous –

{ "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" } } ] }}

Multi Match Query

Cette requête fait correspondre un texte ou une phrase avec plus d’un champ.

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

Lors de l’exécution du code ci-dessus, nous obtenons la réponse indiquée ci-dessous –

{ "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" } } ] }}

Query String Query

Cette requête utilise un analyseur de requête et le mot-clé query_string.

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

Lors de l’exécution du code ci-dessus, nous obtenons la réponse comme indiqué ci-dessous –

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

Requêtes de niveau terminologique

Ces requêtes traitent principalement des données structurées comme les nombres, les dates et les enums.

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

Lors de l’exécution du code ci-dessus, nous obtenons la réponse présentée ci-dessous –

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

Range Query

Cette requête est utilisée pour trouver les objets ayant des valeurs comprises entre les plages de valeurs données. Pour cela, nous devons utiliser des opérateurs tels que –

  • gte – supérieur à égal à
  • gt – supérieur à
  • lte – inférieur à égal à
  • lt – inférieur à

Par exemple, observez le code donné ci-dessous –

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

Lors de l’exécution du code ci-dessus, nous obtenons la réponse comme indiqué ci-dessous –

{ "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" } } ] }}

Il existe d’autres types de requêtes de niveau de terme également comme –

  • La requête Exists – Si un certain champ a une valeur non nulle.

  • Requête manquante – C’est complètement opposé à la requête exists, cette requête recherche les objets sans champs spécifiques ou les champs ayant une valeur nulle.

  • Recherche de caractères génériques ou regexp – Cette requête utilise des expressions régulières pour trouver des motifs dans les objets.

Requêtes composées

Ces requêtes sont un ensemble de différentes requêtes fusionnées entre elles en utilisant des opérateurs booléens comme et, ou, pas ou pour différents indices ou en ayant des appels de fonction, etc.

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

Lors de l’exécution du code ci-dessus, nous obtenons la réponse indiquée ci-dessous –

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

Les requêtes géographiques

Ces requêtes traitent des emplacements géographiques et des points géographiques. Ces requêtes permettent de trouver des écoles ou tout autre objet géographique à proximité de n’importe quel endroit. Vous devez utiliser le type de données point géo.

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

Lors de l’exécution du code ci-dessus, nous obtenons la réponse comme indiqué ci-dessous –

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

Maintenant nous postons les données dans l’index créé ci-dessus.

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

Lors de l’exécution du code ci-dessus, nous obtenons la réponse comme indiqué ci-dessous –

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *