Elasticsearch - Conventions API

L'interface de programmation d'application (API) dans le Web est un groupe d'appels de fonction ou d'autres instructions de programmation pour accéder au composant logiciel dans cette application Web particulière. Par exemple, l'API Facebook aide un développeur à créer des applications en accédant aux données ou à d'autres fonctionnalités de Facebook; il peut s'agir de la date de naissance ou de la mise à jour du statut.

Elasticsearch fournit une API REST, accessible par JSON via HTTP. Elasticsearch utilise certaines conventions dont nous allons discuter maintenant.

Indices multiples

La plupart des opérations, principalement les opérations de recherche et autres, dans les API concernent un ou plusieurs index. Cela aide l'utilisateur à rechercher dans plusieurs endroits ou dans toutes les données disponibles en exécutant simplement une requête une fois. De nombreuses notations différentes sont utilisées pour effectuer des opérations dans plusieurs index. Nous en discuterons quelques-uns ici dans ce chapitre.

Notation séparée par des virgules

POST /index1,index2,index3/_search

Demander le corps

{
   "query":{
      "query_string":{
         "query":"any_string"
      }
   }
}

Réponse

Objets JSON de index1, index2, index3 contenant any_string.

_all mot-clé pour tous les indices

POST /_all/_search

Demander le corps

{
   "query":{
      "query_string":{
         "query":"any_string"
      }
   }
}

Réponse

Objets JSON de tous les index et contenant any_string.

Caractères génériques (*, +, -)

POST /school*/_search

Demander le corps

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

Réponse

Objets JSON de tous les index qui commencent par l'école contenant CBSE.

Vous pouvez également utiliser le code suivant -

POST /school*,-schools_gov /_search

Demander le corps

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

Réponse

Objets JSON de tous les index qui commencent par «school» mais pas de schools_gov et qui contiennent CBSE.

Il existe également des paramètres de chaîne de requête URL -

  • ignore_unavailable- Aucune erreur ne se produira ou aucune opération ne sera arrêtée, si le ou les index (s) présents dans l'URL n'existent pas. Par exemple, l'index des écoles existe, mais book_shops n'existe pas.

POST /school*,book_shops/_search

Demander le corps

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

Demander le corps

{
   "error":{
      "root_cause":[{
         "type":"index_not_found_exception", "reason":"no such index",
         "resource.type":"index_or_alias", "resource.id":"book_shops",
         "index":"book_shops"
      }],
      "type":"index_not_found_exception", "reason":"no such index",
      "resource.type":"index_or_alias", "resource.id":"book_shops",
      "index":"book_shops"
   },"status":404
}

Considérez le code suivant -

POST /school*,book_shops/_search?ignore_unavailable = true

Demander le corps

{
   "query":{
      "query_string":{
         "query":"CBSE"
      }
   }
}

Réponse (pas d'erreur)

Objets JSON de tous les index qui commencent par l'école contenant CBSE.

allow_no_indices

trueLa valeur de ce paramètre empêchera les erreurs, si une URL avec un caractère générique ne produit aucun index. Par exemple, il n'y a pas d'index commençant par schools_pri -

POST /schools_pri*/_search?allow_no_indices = true

Demander le corps

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

Réponse (aucune erreur)

{
   "took":1,"timed_out": false, "_shards":{"total":0, "successful":0, "failed":0},
   "hits":{"total":0, "max_score":0.0, "hits":[]}
}

expand_wildcards

Ce paramètre décide si les caractères génériques doivent être développés pour ouvrir des index ou des index fermés ou effectuer les deux. La valeur de ce paramètre peut être ouverte et fermée ou aucune et toutes.

Par exemple, fermer les écoles index -

POST /schools/_close

Réponse

{"acknowledged":true}

Considérez le code suivant -

POST /school*/_search?expand_wildcards = closed

Demander le corps

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

Réponse

{
   "error":{
      "root_cause":[{
         "type":"index_closed_exception", "reason":"closed", "index":"schools"
      }],
      "type":"index_closed_exception", "reason":"closed", "index":"schools"
   }, "status":403
}

Prise en charge mathématique des dates dans les noms d'index

Elasticsearch propose une fonctionnalité de recherche d'index en fonction de la date et de l'heure. Nous devons spécifier la date et l'heure dans un format spécifique. Par exemple, accountdetail-2015.12.30, index stockera les détails du compte bancaire du 30 décembre 2015. Des opérations mathématiques peuvent être effectuées pour obtenir des détails pour une date particulière ou une plage de dates et d'heures.

Format du nom de l'index mathématique de la date -

<static_name{date_math_expr{date_format|time_zone}}>
/<accountdetail-{now-2d{YYYY.MM.dd|utc}}>/_search

static_name est une partie de l'expression qui reste la même dans chaque index mathématique de date comme le détail du compte. date_math_expr contient l'expression mathématique qui détermine la date et l'heure dynamiquement comme now-2d. date_format contient le format dans lequel la date est écrite dans un index comme AAAA.MM.dd. Si la date d'aujourd'hui est le 30 décembre 2015, <accountdetail- {now-2d {YYYY.MM.dd}}> renverra accountdetail-2015.12.28.

Expression Décide de
<accountdetail- {now-d}> accountdetail-2015.12.29
<accountdetail- {now-M}> accountdetail-2015.11.30
<accountdetail- {now {YYYY.MM}}> accountdetail-2015.12

Nous allons maintenant voir certaines des options courantes disponibles dans Elasticsearch qui peuvent être utilisées pour obtenir la réponse dans un format spécifié.

Jolis résultats

Nous pouvons obtenir une réponse dans un objet JSON bien formaté en ajoutant simplement un paramètre de requête URL, c'est-à-dire pretty = true.

POST /schools/_search?pretty = true

Demander le corps

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

Réponse

……………………..
{
   "_index" : "schools", "_type" : "school", "_id" : "1", "_score" : 1.0,
   "_source":{
      "name":"Central School", "description":"CBSE Affiliation",
      "street":"Nagan", "city":"paprola", "state":"HP", "zip":"176115",
      "location": [31.8955385, 76.8380405], "fees":2000,
      "tags":["Senior Secondary", "beautiful campus"], "rating":"3.5"
   }
}
………………….

Sortie lisible par l'homme

Cette option peut changer les réponses statistiques sous une forme lisible par l'homme (si humain = vrai) ou sous une forme lisible par ordinateur (si humain = faux). Par exemple, si human = true alors distance_kilometer = 20KM et si human = false alors distance_meter = 20000, lorsque la réponse doit être utilisée par un autre programme informatique.

Filtrage des réponses

Nous pouvons filtrer la réponse à moins de champs en les ajoutant dans le paramètre field_path. Par exemple,

POST /schools/_search?filter_path = hits.total

Demander le corps

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

Réponse

{"hits":{"total":3}}