Elasticsearch SQL Translate API

Elasticsearch Sql Translate Api



Tässä viestissä opimme kääntämään SQL-haun kelvolliseksi Elasticsearch-hakusovellusliittymäpyynnöksi, joka sisältää JSON-pohjaisen koko Query Domain Specific Language -kielen.

Vaikka tämä on pieni API, se on erittäin hyödyllinen työkalu erityisesti SQL-tietokannoista tuleville kehittäjille. Se voi myös vähentää oppimiskäyrää liittämällä SQL-kyselyt nopeasti vastaaviin hakukyselyihin.

Tämän jälkeen voit tutkia Elasticsearch-hakusovellusliittymän kaikkia ominaisuuksia ja tuettuja kyselykieliä.







On pidettävä mielessä, että vaikka Elasticsearch tukee SQL:ää, se sisältää useita rajoituksia.



Kyselyn syntaksi

Seuraavassa näkyy käännössovellusliittymän syntaksi:



HANKI _sql/translate

{

request_body

}

Voit myös lähettää lähetyspyynnön käännössovellusliittymälle seuraavan syntaksin mukaisesti:





POST _sql/translate

{

request_body

}

Riippuen klusterikokoonpanosta, API voi vaatia lukuoikeuksia indeksiltä, ​​jonka tiedoista haluat kyselyn. Voit myös määrittää kohderesurssin hakemistoaliakseksi tai tietovirraksi.

Kohdassa request_body voit määrittää kaikki SQL Search API -pyynnön runkoparametrit. Saat lisätietoja tutustumalla seuraavassa resurssissa oleviin asiakirjoihin:



https://www.elastic.co/guide/en/elasticsearch/reference/current/sql-search-api.html#sql-search-api-request-body

Vastauksena kyselyn tulee palauttaa hakusovellusliittymää vastaava tulos kyselyn tiedoilla.

Esimerkki

Havainnollistaaksemme tämän sovellusliittymän käyttöä, oletamme, että meillä on hakemisto nimeltä 'netflix', joka sisältää kaikki tiedot Netflix-elokuvista ja TV-ohjelmista.

Oletetaan, että haluamme hakea viisi parasta elokuvaa Netflix-indeksistä, jotka julkaisimme vuonna 2020 ja sitä vanhempana:

Vastaava SQL-kysely voidaan ilmaista seuraavasti:

SELECT otsikko, kesto, luokitus, tyyppi FROM Netflix WHERE tyyppi = 'Elokuva' JA julkaisuvuosi >= 2020

Suorittaaksesi yllä olevan SQL-haun Elasticsearchissa, voimme laittaa sen SQL Search API:hen alla olevan kuvan mukaisesti:

curl -XGET 'http://localhost:9200/_sql?format=txt' -H 'kbn-xsrf: raportointi' -H 'Sisältötyyppi: sovellus/json' -d '

{

'kysely': ' \n SELECT otsikko, kesto, arvosana, tyyppi FROM 'netflix' WHERE type = '
\ '' Elokuva ' \' ' JA julkaisuvuosi >= 2020 \n ',

'
hae_size ': 5

}'

Edellisen pyynnön tulee tehdä kysely hakemistosta ja hakea vastaavat tietueet. Palautustulos on tekstimuodossa alla olevan mukaisesti:

Kuten näemme, Elasticsearch palauttaa odotetun tulosteen.

Jos haluat palauttaa lähdön JSON-muodossa, voimme asettaa muodon JSONiksi alla olevan kuvan mukaisesti:

curl -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf: raportointi' -H 'Sisältötyyppi: sovellus/json' -d '

{

'kysely': ' \n SELECT otsikko, kesto, arvosana, tyyppi FROM 'netflix' WHERE type = '
\ '' Elokuva ' \' ' JA julkaisuvuosi >= 2020 \n ',

'
hae_size ': 5

}'

Lähtö:

Muunna SQL-kysely hakupyynnöksi

Muuntaaksesi edellisen SQL-hakukyselyn Elasticsearch-pyynnöksi voimme välittää sen käännössovellusliittymään alla olevan kuvan mukaisesti:

curl -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf: raportointi' -H 'Sisältötyyppi: sovellus/json' -d '

{

'kysely': ' \n SELECT otsikko, kesto, arvosana, tyyppi FROM 'netflix' WHERE type = '
\ '' Elokuva ' \' ' JA julkaisuvuosi >= 2020 \n ',

'
hae_size ': 5

}'

API:n tulee jäsentää syötetty SQL-syöte ja muuntaa se kelvolliseksi hakupyynnöksi seuraavan lähdön mukaisesti:

{
'koko' : 5 ,
'kysely' : {
'bool' : {
'on pakko' : [
{
'termi' : {
'tyyppi' : {
'arvo' : 'Elokuva'
}
}
},
{
'alue' : {
'julkaisuvuosi' : {
'gte' : 2020 ,
'vahvistus' : 1
}
}
}
],
'vahvistus' : 1
}
},
'_lähde' : väärä,
'pellot' : [
{
'ala' : 'titteli'
},
{
'ala' : 'kesto'
},
{
'ala' : 'luokitus'
},
{
'ala' : 'tyyppi'
}
],
'järjestellä' : [
{
'_doc' : {
'Tilaus' : 'nouseva'
}
}
]
}

Voit sitten käyttää tätä pyyntömuotoa lähettääksesi Elasticsearch-hakusovellusliittymään alla olevan kuvan mukaisesti:

curl -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: raportointi' -H 'Sisältötyyppi: sovellus/json' -d '
{
'koko': 5,
'kysely': {
'bool': {
'on pakko': [
{
'termi': {
'tyyppi': {
'value': 'Elokuva'
}
}
},
{
'alue': {
'julkaisuvuosi': {
'gte': 2020,
'vahvistus': 1
}
}
}
],
'vahvistus': 1
}
},
'_source': false,
'kentät': [
{
'field': 'otsikko'
},
{
'field': 'kesto'
},
{
'field': 'luokitus'
},
{
'field': 'tyyppi'
}
],
'lajitella': [
{
'_doc': {
'tilaus': 'nouseva'
}
}
]
}'

Samoin pyynnön pitäisi palauttaa samanlaiset tiedot, kuten alla on esitetty:

Johtopäätös

Tämän viestin kautta huomasit, kuinka voit käyttää SQL-kyselyitä tietojen hakemiseen olemassa olevasta Elasticsearch-hakemistosta. Opit myös käyttämään SQL-kääntämissovellusliittymää kelvollisen SQL-kyselyn muuntamiseen Elasticsearch-pyynnöksi.