Elasticsearch SQL traduire API

Elasticsearch SQL traduire API
Dans cet article, nous apprendrons à traduire une recherche SQL en une demande API de recherche Elasticsearch valide contenant un langage spécifique de domaine de requête complet basé sur JSON.

Bien qu'il s'agisse d'une petite API, c'est un outil très bénéfique, en particulier pour les développeurs provenant de bases de données SQL. Il peut également réduire la courbe d'apprentissage en reliant rapidement les requêtes SQL aux requêtes de recherche correspondantes.

Vous pouvez ensuite explorer les capacités complètes de l'API de recherche Elasticsearch et des langages de requête pris en charge.

C'est pour garder à l'esprit que bien qu'Elasticsearch prenne en charge SQL, il contient diverses limites.

Syntaxe de requête

Ce qui suit montre la syntaxe de l'API Translate:

Obtenir _sql / traduire

request_body

Vous pouvez également envoyer une demande de poste à l'API Translate comme indiqué dans la syntaxe suivante:

Post _sql / traduire

request_body

Selon la configuration de votre cluster, l'API peut nécessiter des privilèges de lecture sur l'index dont vous souhaitez interroger les données. Vous pouvez également spécifier la ressource cible comme un alias d'index ou un flux de données.

Dans la request_body, vous pouvez spécifier tous les paramètres du corps de la demande de recherche de recherche SQL de recherche SQL. Explorez les documents fournis dans la ressource suivante pour en savoir plus:

https: // www.élastique.CO / GUIDE / EN / ELASTICSEARCH / RÉFÉRENCE / COURANT / SQL-SEARCH-API.HTML # SQL-SEARCH-API-request-Body

En réponse, la requête doit renvoyer le résultat correspondant à l'API de recherche avec les données interrogées.

Exemple

Pour illustrer au mieux comment utiliser cette API, nous supposerons que nous avons un index appelé "Netflix" contenant toutes les données sur les films et émissions de télévision Netflix.

Supposons que nous souhaitions récupérer les cinq meilleurs films de l'index Netflix que nous avons publié en 2020 et plus:

La requête SQL équivalente peut être exprimée comme indiqué ci-dessous:

Sélectionnez le titre, la durée, la note, le type à partir de Netflix où type = 'film' et release_year> = 2020

Pour exécuter la recherche SQL ci-dessus dans Elasticsearch, nous pouvons le mettre dans l'API de recherche SQL comme indiqué ci-dessous:

curl -xget "http: // localhost: 9200 / _sql?format = txt "-h" kbn-xsrf: reporting "-h" contenu-type: application / json "-d '

"Query": "\ n Select Title, durée, note, type à partir de" Netflix "où type = '\" film' \ '' et release_year> = 2020 \ n "",
""fetch_size"": 5
'

La demande précédente doit interroger l'index et récupérer les enregistrements correspondants. La sortie de retour est en format texte comme indiqué ci-dessous:

Comme nous pouvons le voir, Elasticsearch renvoie la sortie attendue.

Pour retourner la sortie en tant que JSON, nous pouvons définir le format sur JSON comme indiqué ci-dessous:

curl -xget ""http: // localhost: 9200 / _sql?format = json ""-h"" kbn-xsrf: reporting ""-h"" contenu-type: application / json ""-d '

""Query"": ""\ n Select Title, durée, note, type à partir de"" Netflix ""où type = '\"" film' \ '' et release_year> = 2020 \ n "",
""fetch_size"": 5
'

Sortir:

Convertir la requête SQL en demande de recherche

Pour convertir la requête de recherche SQL précédente en une demande ElasticSearch, nous pouvons la transmettre en API Translate comme indiqué ci-dessous:

curl -xget ""http: // localhost: 9200 / _sql / tradlate"" -h ""kbn-xsrf: reporting"" -h ""contenu-type: application / json"" -d '

""Query"": ""\ n Select Title, durée, note, type à partir de"" Netflix ""où type = '\"" film' \ '' et release_year> = 2020 \ n "",
""fetch_size"": 5
'

L'API doit analyser l'entrée SQL d'entrée et la convertir en une demande de recherche valide, comme indiqué dans la sortie suivante:


""Taille"": 5,
""mettre en doute"":
""bool"":
""devoir"": [

""terme"":
""taper"":
""valeur"": ""film""


,

""gamme"":
""année de sortie"":
""GTE"": 2020,
""Boost"": 1



]],
""Boost"": 1

,
""_source"": faux,
""des champs"": [

""Field"": ""titre""
,

""champ"": ""durée""
,

""Field"": ""note""
,

""type de champ""

]],
""trier"": [

""_doc"":
""Ordre"": ""ASC""


]]

Vous pouvez ensuite utiliser ce format de demande pour envoyer à l'API de recherche Elasticsearch comme indiqué ci-dessous:

curl -xpost ""http: // localhost: 9200 / netflix / _search"" -h ""kbn-xsrf: reportage"" -h ""contenu-type: application / json"" -d '

""Taille"": 5,
""mettre en doute"":
""bool"":
""devoir"": [

""terme"":
""taper"":
""valeur"": ""film""


,

""gamme"":
""année de sortie"":
""GTE"": 2020,
""Boost"": 1



]],
""Boost"": 1

,
""_source"": faux,
""des champs"": [

""Field"": ""titre""
,

""champ"": ""durée""
,

""Field"": ""note""
,

""type de champ""

]],
""trier"": [

""_doc"":
""Ordre"": ""ASC""


]]
'

De même, la demande doit renvoyer des données similaires à celles indiquées ci-dessous:

Conclusion

Grâce à cet article, vous avez découvert comment vous pouvez utiliser les requêtes SQL pour récupérer les données d'un index Elasticsearch existant. Vous avez également appris à utiliser l'API SQL Translate pour convertir une requête SQL valide en une demande Elasticsearch.

"