Elasticsearch SQL Translate API

Elasticsearch Sql Translate Api



Šiame įraše sužinosime, kaip SQL paiešką paversti galiojančia Elasticsearch paieškos API užklausa, kurioje yra visa užklausos domeno specifinė kalba, pagrįsta JSON.

Nors tai maža API, tai labai naudingas įrankis, ypač kūrėjams iš SQL duomenų bazių. Ji taip pat gali sumažinti mokymosi kreivę, greitai susiedama SQL užklausas su atitinkamomis paieškos užklausomis.

Tada galite ištirti visas Elasticsearch paieškos API ir palaikomų užklausų kalbų galimybes.







Reikia nepamiršti, kad nors „Elasticsearch“ palaiko SQL, jame yra įvairių apribojimų.



Užklausos sintaksė

Toliau pateikiama vertimo API sintaksė:



GAUTI _sql/translate

{

request_body

}

Taip pat galite siųsti paskelbimo užklausą į vertimo API, kaip parodyta šioje sintaksėje:





POST _sql/translate

{

request_body

}

Atsižvelgiant į jūsų grupės konfigūraciją, API gali reikalauti skaitymo privilegijų indekse, kurio duomenų norite pateikti. Taip pat galite nurodyti tikslinį šaltinį kaip indekso slapyvardį arba duomenų srautą.

Skiltyje request_body galite nurodyti visus SQL Search API užklausos turinio parametrus. Norėdami sužinoti daugiau, naršykite toliau pateiktame šaltinyje pateiktus dokumentus:



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

Kaip atsakymą užklausa turėtų pateikti rezultatą, atitinkantį paieškos API su užklaustais duomenimis.

Pavyzdys

Kad geriausiai parodytume, kaip naudoti šią API, manysime, kad turime indeksą „netflix“, kuriame yra visi duomenys apie „Netflix“ filmus ir TV laidas.

Tarkime, kad norime gauti penkis geriausius filmus iš „Netflix“ indekso, kuriuos išleidome 2020 m. ir vėliau:

Lygiavertė SQL užklausa gali būti išreikšta taip, kaip parodyta toliau:

PASIRINKITE pavadinimą, trukmę, įvertinimą, tipą FROM Netflix WHERE tipas = 'Filmas' IR išleidimo_metai >= 2020 m

Norėdami atlikti aukščiau pateiktą SQL paiešką Elasticsearch, galime ją įdėti į SQL paieškos API, kaip parodyta toliau:

garbanos -XGET „http://localhost:9200/_sql?format=txt“ -H 'kbn-xsrf: ataskaitų teikimas' -H „Turinio tipas: programa/json“ -d '

{

'užklausa': ' \n PASIRINKITE pavadinimą, trukmę, įvertinimą, tipą FROM 'netflix' WHERE type = '
\ '' Filmas ' \' ' IR išleidimo_metai >= 2020 m \n ',

fetch_size “: 5

}'

Ankstesnė užklausa turėtų pateikti užklausą indeksui ir gauti atitinkamus įrašus. Grąžinama išvestis yra teksto formatu, kaip nurodyta toliau:

Kaip matome, Elasticsearch grąžina laukiamą išvestį.

Norėdami grąžinti išvestį kaip JSON, galime nustatyti formatą į JSON, kaip parodyta toliau:

garbanos -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf: ataskaitų teikimas' -H „Turinio tipas: programa/json“ -d '

{

'užklausa': ' \n PASIRINKITE pavadinimą, trukmę, įvertinimą, tipą FROM 'netflix' WHERE type = '
\ '' Filmas ' \' ' IR išleidimo_metai >= 2020 m \n ',

fetch_size “: 5

}'

Išvestis:

Konvertuokite SQL užklausą į paieškos užklausą

Norėdami konvertuoti ankstesnę SQL paieškos užklausą į Elasticsearch užklausą, galime perduoti ją į vertimo API, kaip parodyta toliau:

garbanos -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf: ataskaitų teikimas' -H „Turinio tipas: programa/json“ -d '

{

'užklausa': ' \n PASIRINKITE pavadinimą, trukmę, įvertinimą, tipą FROM 'netflix' WHERE type = '
\ '' Filmas ' \' ' IR išleidimo_metai >= 2020 m \n ',

fetch_size “: 5

}'

API turėtų išanalizuoti įvestą SQL įvestį ir konvertuoti ją į galiojančią paieškos užklausą, kaip parodyta toliau pateiktoje išvestyje:

{
'dydis' : 5 ,
'užklausa' : {
'Bool' : {
'privalo' : [
{
'terminas' : {
'tipas' : {
'vertė' : 'Filmas'
}
}
},
{
'diapazonas' : {
'išleidimo_metai' : {
'gte' : 2020 m ,
'padidinti' : 1
}
}
}
],
'padidinti' : 1
}
},
'_source' : klaidinga,
'laukai' : [
{
'laukas' : 'titulas'
},
{
'laukas' : 'trukmė'
},
{
'laukas' : 'įvertinimas'
},
{
'laukas' : 'tipas'
}
],
'rūšiuoti' : [
{
'_doc' : {
'įsakymas' : 'asc'
}
}
]
}

Tada galite naudoti šį užklausos formatą, kad išsiųstumėte į Elasticsearch paieškos API, kaip parodyta toliau:

garbanos -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: ataskaitų teikimas' -H „Turinio tipas: programa/json“ -d '
{
'dydis': 5,
'užklausa': {
'bool': {
'privalo': [
{
'terminas': {
'tipas': {
'value': 'Filmas'
}
}
},
{
'diapazonas': {
'išleidimo_metai': {
'gte': 2020 m.,
'padidinti': 1
}
}
}
],
'padidinti': 1
}
},
'_source': klaidinga,
'laukai': [
{
'laukas': 'pavadinimas'
},
{
'laukas': 'trukmė'
},
{
'laukas': 'įvertinimas'
},
{
'laukas': 'tipas'
}
],
'rūšiuoti': [
{
'_doc': {
'užsakymas': 'asc'
}
}
]
}'

Panašiai užklausoje turėtų būti pateikti panašūs duomenys, kaip parodyta toliau:

Išvada

Per šį įrašą sužinojote, kaip galite naudoti SQL užklausas, kad gautumėte duomenis iš esamo Elasticsearch indekso. Taip pat sužinojote, kaip naudoti vertimo SQL API konvertuoti galiojančią SQL užklausą į Elasticsearch užklausą.