Elasticsearch SQL Translate API

Elasticsearch Sql Translate Api



V tej objavi se bomo naučili, kako prevesti iskanje SQL v veljavno zahtevo API-ja za iskanje Elasticsearch, ki vsebuje celoten jezik, specifičen za domeno poizvedbe, ki temelji na JSON.

Čeprav je to majhen API, je zelo koristno orodje, zlasti za razvijalce, ki prihajajo iz baz podatkov SQL. Prav tako lahko zmanjša krivuljo učenja s hitrim povezovanjem poizvedb SQL z ustreznimi iskalnimi poizvedbami.

Nato lahko raziščete vse zmožnosti iskalnega API-ja Elasticsearch in podprtih poizvedovalnih jezikov.







Upoštevati je treba, da čeprav Elasticsearch podpira SQL, vsebuje različne omejitve.



Sintaksa poizvedbe

Spodaj je prikazana sintaksa API-ja za prevajanje:



GET _sql/translate

{

telo_zahteve

}

Prav tako lahko pošljete zahtevo za objavo API-ju za prevajanje, kot je prikazano v naslednji sintaksi:





OBJAVI _sql/translate

{

telo_zahteve

}

Odvisno od vaše konfiguracije gruče lahko API zahteva bralne privilegije za indeks, katerega podatke želite poizvedovati. Ciljni vir lahko podate tudi kot vzdevek indeksa ali podatkovni tok.

V request_body lahko podate vse parametre telesa zahteve SQL Search API. Raziščite dokumente v tem viru, če želite izvedeti več:



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

Kot odgovor mora poizvedba vrniti rezultat, ki ustreza iskalnemu API-ju z zahtevanimi podatki.

Primer

Za najboljšo ponazoritev uporabe tega API-ja bomo predpostavili, da imamo indeks z imenom »netflix«, ki vsebuje vse podatke o filmih in TV-oddajah Netflix.

Recimo, da želimo pridobiti pet najboljših filmov iz Netflixovega indeksa, ki smo jih objavili leta 2020 in pozneje:

Enakovredno poizvedbo SQL je mogoče izraziti, kot je prikazano spodaj:

IZBERITE naslov, trajanje, oceno, vrsto FROM netflix WHERE tip = 'Film' IN leto_izdaje >= 2020

Če želite izvesti zgornje iskanje SQL v Elasticsearch, ga lahko vstavite v API za iskanje SQL, kot je prikazano spodaj:

curl -XGET “http://localhost:9200/_sql?format=txt” -H 'kbn-xsrf: poročanje' -H 'Vrsta vsebine: aplikacija/json' -d '

{

'poizvedba': ' \n IZBERITE naslov, trajanje, oceno, vrsto FROM 'netflix' WHERE type = '
\ '' Film ' \' ' IN leto_izdaje >= 2020 \n ',

'
pridobi_velikost ': 5

}'

Prejšnja zahteva bi morala poizvedovati po indeksu in pridobiti ustrezne zapise. Povratni rezultat je v besedilni obliki, kot je navedeno spodaj:

Kot lahko vidimo, Elasticsearch vrne pričakovan rezultat.

Če želite izhod vrniti kot JSON, lahko format nastavimo na JSON, kot je prikazano spodaj:

curl -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf: poročanje' -H 'Vrsta vsebine: aplikacija/json' -d '

{

'poizvedba': ' \n IZBERITE naslov, trajanje, oceno, vrsto FROM 'netflix' WHERE type = '
\ '' Film ' \' ' IN leto_izdaje >= 2020 \n ',

'
pridobi_velikost ': 5

}'

Izhod:

Pretvori poizvedbo SQL v iskalno zahtevo

Če želite prejšnjo iskalno poizvedbo SQL pretvoriti v zahtevo Elasticsearch, jo lahko posredujemo v API za prevajanje, kot je prikazano spodaj:

curl -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf: poročanje' -H 'Vrsta vsebine: aplikacija/json' -d '

{

'poizvedba': ' \n IZBERITE naslov, trajanje, oceno, vrsto FROM 'netflix' WHERE type = '
\ '' Film ' \' ' IN leto_izdaje >= 2020 \n ',

'
pridobi_velikost ': 5

}'

API bi moral razčleniti vhodni vnos SQL in ga pretvoriti v veljavno iskalno zahtevo, kot je prikazano v naslednjem izhodu:

{
'velikost' : 5 ,
'povpraševanje' : {
'bool' : {
'moram' : [
{
'termin' : {
'tip' : {
'vrednost' : 'Film'
}
}
},
{
'razpon' : {
'leto_izdaje' : {
'gte' : 2020 ,
'pospešek' : 1
}
}
}
],
'pospešek' : 1
}
},
'_vir' : napačno,
'polja' : [
{
'polje' : 'naslov'
},
{
'polje' : 'trajanje'
},
{
'polje' : 'ocena'
},
{
'polje' : 'tip'
}
],
'vrsta' : [
{
'_doc' : {
'naročilo' : 'asc'
}
}
]
}

Nato lahko uporabite to obliko zahteve za pošiljanje API-ju za iskanje Elasticsearch, kot je prikazano spodaj:

curl -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: poročanje' -H 'Vrsta vsebine: aplikacija/json' -d '
{
'velikost': 5,
'poizvedba': {
'bool': {
'moram': [
{
'term': {
'vrsta': {
'value': 'Film'
}
}
},
{
'razpon': {
'leto_izdaje': {
'gte': 2020,
'povečanje': 1
}
}
}
],
'povečanje': 1
}
},
'_vir': napačno,
'polja': [
{
'polje': 'naslov'
},
{
'polje': 'trajanje'
},
{
'field': 'ocena'
},
{
'polje': 'vrsta'
}
],
'razvrsti': [
{
'_doc': {
'vrstni red': 'naraščajoče'
}
}
]
}'

Podobno mora zahteva vrniti podobne podatke, kot je prikazano spodaj:

Zaključek

V tej objavi ste odkrili, kako lahko uporabite poizvedbe SQL za pridobivanje podatkov iz obstoječega indeksa Elasticsearch. Naučili ste se tudi, kako uporabiti API za prevajanje SQL za pretvorbo veljavne poizvedbe SQL v zahtevo Elasticsearch.