API de traduction SQL Elasticsearch

Api De Traduction Sql Elasticsearch



Dans cet article, nous allons apprendre à traduire une recherche SQL en une requête d'API de recherche Elasticsearch valide contenant un langage spécifique au 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 venant 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 toutes les fonctionnalités de l'API de recherche Elasticsearch et les langages de requête pris en charge.







Il convient de garder à l'esprit que bien qu'Elasticsearch prenne en charge SQL, il contient diverses limitations.



Syntaxe de la requête

Voici la syntaxe de l'API de traduction :



OBTENIR _sql/traduire

{

request_body

}

Vous pouvez également envoyer une requête de publication à l'API de traduction, comme indiqué dans la syntaxe suivante :





POST _sql/translate

{

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 en tant qu'alias d'index ou flux de données.

Dans request_body, vous pouvez spécifier tous les paramètres de corps de requête de l'API de recherche SQL. Explorez les documents fournis dans la ressource suivante pour en savoir plus :



https://www.elastic.co/guide/en/elasticsearch/reference/current/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 mieux illustrer 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és en 2020 et au-dessus :

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

SELECT titre, durée, classement, type FROM netflix WHERE type = 'Film' AND release_year >= 2020

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

boucle -XGET 'http://localhost:9200/_sql?format=txt' -H 'kbn-xsrf : création de rapports' -H 'Type de contenu : application/json' -ré '

{

'requête': ' \n SELECT titre, durée, classement, type FROM 'netflix' WHERE type = '
\ '' Film ' \' ' AND release_year >= 2020 \n ',

'
récupérer_taille ' : 5

}'

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

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

Pour renvoyer la sortie au format JSON, nous pouvons définir le format sur JSON comme indiqué ci-dessous :

boucle -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf : création de rapports' -H 'Type de contenu : application/json' -ré '

{

'requête': ' \n SELECT titre, durée, classement, type FROM 'netflix' WHERE type = '
\ '' Film ' \' ' AND release_year >= 2020 \n ',

'
récupérer_taille ' : 5

}'

Production:

Convertir une requête SQL en requête de recherche

Pour convertir la requête de recherche SQL précédente en requête Elasticsearch, nous pouvons la transmettre à l'API de traduction comme indiqué ci-dessous :

boucle -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf : création de rapports' -H 'Type de contenu : application/json' -ré '

{

'requête': ' \n SELECT titre, durée, classement, type FROM 'netflix' WHERE type = '
\ '' Film ' \' ' AND release_year >= 2020 \n ',

'
récupérer_taille ' : 5

}'

L'API doit analyser l'entrée SQL d'entrée et la convertir en une requête de recherche valide, comme indiqué dans le résultat suivant :

{
'Taille' : 5 ,
'requête' : {
'bool' : {
'devoir' : [
{
'terme' : {
'taper' : {
'évaluer' : 'Film'
}
}
},
{
'intervalle' : {
'année de sortie' : {
'gîte' : 2020 ,
'augmenter' : 1
}
}
}
],
'augmenter' : 1
}
},
'_la source' : faux,
'des champs' : [
{
'champ' : 'Titre'
},
{
'champ' : 'durée'
},
{
'champ' : 'évaluation'
},
{
'champ' : 'taper'
}
],
'trier' : [
{
'_doc' : {
'ordre' : 'asc'
}
}
]
}

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

curl -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf : création de rapports' -H 'Type de contenu : application/json' -ré '
{
'taille': 5,
'requête': {
'bool': {
'devoir': [
{
'terme': {
'taper': {
'value': 'Film'
}
}
},
{
'intervalle': {
'année de sortie': {
'gte': 2020,
'booster': 1
}
}
}
],
'booster': 1
}
},
'_source': faux,
'des champs': [
{
'champ': 'titre'
},
{
'champ': 'durée'
},
{
'champ': 'évaluation'
},
{
'type de champ'
}
],
'trier': [
{
'_doc': {
'ordre': 'asc'
}
}
]
}'

De même, la requête doit renvoyer des données similaires, comme indiqué ci-dessous :

Conclusion

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