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}}