Elasticsearch SQL Translate API

Elasticsearch Sql Translate Api



U ovom postu naučit ćemo kako prevesti SQL pretraživanje u važeći API zahtjev za Elasticsearch pretraživanje koji sadrži puni Query Domain Specific Language temeljen na JSON-u.

Iako je ovo mali API, vrlo je koristan alat, posebno za programere koji dolaze iz SQL baza podataka. Također može smanjiti krivulju učenja brzim povezivanjem SQL upita s odgovarajućim upitima za pretraživanje.

Zatim možete istražiti sve mogućnosti Elasticsearch API-ja za pretraživanje i podržane jezike upita.







Treba imati na umu da, iako Elasticsearch podržava SQL, sadrži različita ograničenja.



Sintaksa upita

Sljedeće prikazuje sintaksu API-ja za prevođenje:



NABAVITE _sql/translate

{

tijelo_zahtjeva

}

Također možete poslati zahtjev za objavu API-ju za prevođenje kao što je prikazano u sljedećoj sintaksi:





POST _sql/translate

{

tijelo_zahtjeva

}

Ovisno o vašoj konfiguraciji klastera, API može zahtijevati povlastice čitanja na indeksu čijim podacima želite postaviti upit. Također možete navesti ciljni resurs kao alias indeksa ili tok podataka.

U request_body možete navesti sve parametre tijela zahtjeva SQL Search API-ja. Istražite dokumente navedene u sljedećem izvoru da biste saznali više:



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

Kao odgovor, upit bi trebao vratiti rezultat koji odgovara API-ju pretraživanja s traženim podacima.

Primjer

Da bismo najbolje ilustrirali kako koristiti ovaj API, pretpostavit ćemo da imamo indeks pod nazivom 'netflix' koji sadrži sve podatke o Netflixovim filmovima i TV emisijama.

Pretpostavimo da želimo dohvatiti pet najboljih filmova iz Netflix indeksa koje smo objavili 2020. godine i novije:

Ekvivalentni SQL upit može se izraziti kao što je prikazano u nastavku:

SELECT naslov, trajanje, ocjena, tip FROM netflix WHERE tip = 'Film' I godina_izlaska >= 2020

Da bismo izvršili gore navedeno SQL pretraživanje u Elasticsearchu, možemo ga staviti u SQL Search API kao što je prikazano u nastavku:

kovrčati -XGET “http://localhost:9200/_sql?format=txt” -H 'kbn-xsrf: izvješćivanje' -H 'Content-Type: application/json' -d '

{

'upit': ' \n SELECT naslov, trajanje, ocjena, tip FROM 'netflix' WHERE type = '
\ '' Film ' \' ' I godina_izlaska >= 2020 \n ',

'
dohvati_veličinu ': 5

}'

Prethodni zahtjev trebao bi postaviti upit indeksu i dohvatiti podudarne zapise. Povratni izlaz je u tekstualnom formatu kako je navedeno u nastavku:

Kao što vidimo, Elasticsearch vraća očekivani rezultat.

Da bismo vratili izlaz kao JSON, možemo postaviti format na JSON kao što je prikazano u nastavku:

kovrčati -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf: izvješćivanje' -H 'Content-Type: application/json' -d '

{

'upit': ' \n SELECT naslov, trajanje, ocjena, tip FROM 'netflix' WHERE type = '
\ '' Film ' \' ' I godina_izlaska >= 2020 \n ',

'
dohvati_veličinu ': 5

}'

Izlaz:

Pretvorite SQL upit u zahtjev za pretraživanje

Za pretvaranje prethodnog SQL upita za pretraživanje u Elasticsearch zahtjev, možemo ga proslijediti u API za prevođenje kao što je prikazano u nastavku:

kovrčati -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf: izvješćivanje' -H 'Content-Type: application/json' -d '

{

'upit': ' \n SELECT naslov, trajanje, ocjena, tip FROM 'netflix' WHERE type = '
\ '' Film ' \' ' I godina_izlaska >= 2020 \n ',

'
dohvati_veličinu ': 5

}'

API bi trebao analizirati ulazni SQL unos i pretvoriti ga u važeći zahtjev za pretraživanje, kao što je prikazano u sljedećem izlazu:

{
'veličina' : 5 ,
'upit' : {
'bool' : {
'mora' : [
{
'termin' : {
'tip' : {
'vrijednost' : 'Film'
}
}
},
{
'raspon' : {
'godina_izlaska' : {
'gte' : 2020 ,
'pojačati' : 1
}
}
}
],
'pojačati' : 1
}
},
'_izvor' : lažno,
'polja' : [
{
'polje' : 'titula'
},
{
'polje' : 'trajanje'
},
{
'polje' : 'ocjena'
},
{
'polje' : 'tip'
}
],
'vrsta' : [
{
'_doc' : {
'narudžba' : 'uzlazno'
}
}
]
}

Zatim možete upotrijebiti ovaj format zahtjeva za slanje API-ju pretraživanja Elasticsearch kao što je prikazano u nastavku:

kovrča -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: izvješćivanje' -H 'Content-Type: application/json' -d '
{
'veličina': 5,
'upit': {
'bool': {
'mora': [
{
'term': {
'tip': {
'value': 'Film'
}
}
},
{
'raspon': {
'godina_izlaska': {
'gte': 2020.,
'pojačanje': 1
}
}
}
],
'pojačanje': 1
}
},
'_izvor': netočno,
'polja': [
{
'polje': 'naslov'
},
{
'polje': 'trajanje'
},
{
'polje': 'ocjena'
},
{
'polje': 'tip'
}
],
'sort': [
{
'_doc': {
'poredak': 'uzlazno'
}
}
]
}'

Slično, zahtjev bi trebao vratiti slične podatke kao što je prikazano u nastavku:

Zaključak

Kroz ovaj ste post otkrili kako možete koristiti SQL upite za dohvaćanje podataka iz postojećeg Elasticsearch indeksa. Također ste naučili kako koristiti prevoditeljski SQL API za pretvaranje važećeg SQL upita u Elasticsearch zahtjev.