Elasticsearch SQL Translate API

Elasticsearch Sql Translate Api



Selles postituses õpime, kuidas tõlkida SQL-otsing kehtivaks Elasticsearchi otsingu API päringuks, mis sisaldab JSON-il põhinevat täielikku päringu domeeni spetsiifilist keelt.

Kuigi see on väike API, on see väga kasulik tööriist, eriti SQL-i andmebaasidest pärit arendajatele. Samuti võib see vähendada õppimiskõverat, seostades SQL-päringud kiiresti vastavate otsingupäringutega.

Seejärel saate uurida Elasticsearch otsingu API ja toetatud päringukeelte kõiki võimalusi.







Tuleb meeles pidada, et kuigi Elasticsearch toetab SQL-i, sisaldab see erinevaid piiranguid.



Päringu süntaks

Järgmine näitab tõlke API süntaksit:



HANGI _sql/tõlge

{

request_body

}

Saate saata ka tõlke API-le postitustaotluse, nagu on näidatud järgmises süntaksis:





POSTITA _sql/tõlge

{

request_body

}

Sõltuvalt teie klastri konfiguratsioonist võib API nõuda lugemisõigusi indeksil, mille andmeid soovite pärida. Saate sihtressursi määrata ka indeksi varjunime või andmevoona.

Jaotises request_body saate määrata kõik SQL Search API päringu kehaparameetrid. Lisateabe saamiseks uurige järgmises ressursis pakutavaid dokumente:



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

Vastuseks peaks päring tagastama otsingu API-le vastava tulemuse koos päringu andmetega.

Näide

Selle API kasutamise parimaks illustreerimiseks eeldame, et meil on register nimega 'netflix', mis sisaldab kõiki andmeid Netflixi filmide ja telesaadete kohta.

Oletame, et soovime tuua Netflixi indeksist viis parimat filmi, mille avaldasime 2020. aastal ja hiljem:

Samaväärset SQL-päringut saab väljendada järgmiselt:

SELECT pealkiri, kestus, hinnang, tüüp FROM netflix WHERE tüüp = 'Film' JA väljalaskeaasta >= 2020

Ülaltoodud SQL-otsingu tegemiseks Elasticsearchis saame selle SQL Search API-sse panna, nagu allpool näidatud:

curl -XGET 'http://localhost:9200/_sql?format=txt' -H 'kbn-xsrf: aruandlus' -H 'Sisutüüp: rakendus/json' -d '

{

'päring': ' \n SELECT pealkiri, kestus, hinnang, tüüp FROM 'netflix' WHERE tüüp = '
\ '' Film ' \' ' JA väljalaskeaasta >= 2020 \n ',

'
too_suurus ': 5

}'

Eelmine päring peaks esitama päringu indeksi kohta ja tooma vastavad kirjed. Tagastusväljund on tekstivormingus, nagu allpool kirjeldatud:

Nagu näeme, tagastab Elasticsearch oodatud väljundi.

Väljundi tagastamiseks JSON-ina saame määrata vorminguks JSON, nagu allpool näidatud:

curl -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf: aruandlus' -H 'Sisutüüp: rakendus/json' -d '

{

'päring': ' \n SELECT pealkiri, kestus, hinnang, tüüp FROM 'netflix' WHERE tüüp = '
\ '' Film ' \' ' JA väljalaskeaasta >= 2020 \n ',

'
too_suurus ': 5

}'

Väljund:

Teisendage SQL-päring otsingupäringuks

Eelmise SQL-i otsingupäringu teisendamiseks Elasticsearchi päringuks saame selle edastada tõlke API-sse, nagu allpool näidatud:

curl -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf: aruandlus' -H 'Sisutüüp: rakendus/json' -d '

{

'päring': ' \n SELECT pealkiri, kestus, hinnang, tüüp FROM 'netflix' WHERE tüüp = '
\ '' Film ' \' ' JA väljalaskeaasta >= 2020 \n ',

'
too_suurus ': 5

}'

API peaks sõeluma sisestatud SQL-sisendi ja teisendama selle kehtivaks otsingupäringuks, nagu on näidatud järgmises väljundis:

{
'suurus' : 5 ,
'päring' : {
'julge' : {
'peab' : [
{
'termin' : {
'tüüp' : {
'väärtus' : 'Film'
}
}
},
{
'vahemik' : {
'väljalaske_aasta' : {
'gte' : 2020 ,
'tõuge' : 1
}
}
}
],
'tõuge' : 1
}
},
'_allikas' : vale,
'väljad' : [
{
'väli' : 'tiitel'
},
{
'väli' : 'kestus'
},
{
'väli' : 'hinnang'
},
{
'väli' : 'tüüp'
}
],
'sorteeri' : [
{
'_doc' : {
'telli' : 'asc'
}
}
]
}

Seejärel saate seda päringuvormingut kasutada Elasticsearchi otsingu API-le saatmiseks, nagu allpool näidatud:

curl -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: aruandlus' -H 'Sisutüüp: rakendus/json' -d '
{
'suurus': 5,
'päring': {
'bool': {
'peab': [
{
'termin': {
'tüüp': {
'value': 'Film'
}
}
},
{
'vahemik': {
'release_year': {
'gte': 2020,
'tõuge': 1
}
}
}
],
'tõuge': 1
}
},
'_source': vale,
'väljad': [
{
'väli': 'pealkiri'
},
{
'väli': 'kestus'
},
{
'väli': 'hinnang'
},
{
'väli': 'tüüp'
}
],
'sorteeri': [
{
'_doc': {
'tellimus': 'kasvab'
}
}
]
}'

Samamoodi peaks päring tagastama sarnased andmed, nagu allpool näidatud:

Järeldus

Selle postituse kaudu avastasite, kuidas saate SQL-päringuid kasutada olemasolevast Elasticsearchi indeksist andmete toomiseks. Samuti õppisite, kuidas kasutada SQL-i tõlke API-d, et teisendada kehtiv SQL-päring Elasticsearchi päringuks.