Elasticsearch SQL Translate API

Elasticsearch Sql Translate Api



Sa post na ito, matututunan natin kung paano isalin ang isang paghahanap sa SQL sa isang wastong kahilingan sa Elasticsearch search API na naglalaman ng buong Query Domain Specific Language batay sa JSON.

Kahit na ito ay isang maliit na API, ito ay isang napaka-kapaki-pakinabang na tool, lalo na para sa mga developer na nagmumula sa mga database ng SQL. Maaari din nitong bawasan ang curve ng pag-aaral sa pamamagitan ng mabilis na pag-uugnay ng mga query sa SQL sa mga kaukulang query sa paghahanap.

Pagkatapos ay maaari mong tuklasin ang buong kakayahan ng Elasticsearch search API at ang mga sinusuportahang wika ng query.







Dapat tandaan na kahit na sinusuportahan ng Elasticsearch ang SQL, naglalaman ito ng iba't ibang limitasyon.



Syntax ng Query

Ipinapakita ng sumusunod ang syntax ng translate API:



GET _sql/translate

{

request_body

}

Maaari ka ring magpadala ng kahilingan sa pag-post sa translate API tulad ng ipinapakita sa sumusunod na syntax:





POST _sql/translate

{

request_body

}

Depende sa configuration ng iyong cluster, maaaring mangailangan ang API ng mga pribilehiyo sa pagbabasa sa index na ang data ay gusto mong i-query. Maaari mo ring tukuyin ang target na mapagkukunan bilang index alias o stream ng data.

Sa request_body, maaari mong tukuyin ang lahat ng parameter ng katawan ng kahilingan sa SQL Search API. Galugarin ang mga doc na ibinigay sa sumusunod na mapagkukunan upang matuto nang higit pa:



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

Bilang tugon, dapat ibalik ng query ang resulta na naaayon sa search API kasama ang na-query na data.

Halimbawa

Upang pinakamahusay na mailarawan kung paano gamitin ang API na ito, ipagpalagay namin na mayroon kaming index na tinatawag na 'netflix' na naglalaman ng lahat ng data tungkol sa mga pelikula sa Netflix at Mga Palabas sa TV.

Ipagpalagay na gusto naming kunin ang nangungunang limang pelikula mula sa Netflix index na inilabas namin sa taong 2020 at mas mataas:

Ang katumbas na query sa SQL ay maaaring ipahayag tulad ng ipinapakita sa ibaba:

PUMILI ng pamagat, tagal, rating, uri MULA sa netflix WHERE uri = 'Pelikula' AT release_year >= 2020

Upang maisagawa ang paghahanap sa SQL sa itaas sa Elasticsearch, maaari naming ilagay ito sa SQL Search API tulad ng ipinapakita sa ibaba:

kulot -XGET “http://localhost:9200/_sql?format=txt” -H 'kbn-xsrf: pag-uulat' -H 'Uri ng Nilalaman: application/json' -d '

{

'tanong': ' \n PUMILI ng pamagat, tagal, rating, uri MULA sa 'netflix' WHERE type = '
\ '' Pelikula ' \' ' AT release_year >= 2020 \n ',

'
fetch_size ': 5

}'

Dapat i-query ng nakaraang kahilingan ang index at kunin ang mga katugmang tala. Ang return output ay nasa text format tulad ng ibinigay sa ibaba:

Gaya ng nakikita natin, ibinabalik ng Elasticsearch ang inaasahang output.

Upang ibalik ang output bilang JSON, maaari naming itakda ang format sa JSON tulad ng ipinapakita sa ibaba:

kulot -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf: pag-uulat' -H 'Uri ng Nilalaman: application/json' -d '

{

'tanong': ' \n PUMILI ng pamagat, tagal, rating, uri MULA sa 'netflix' WHERE type = '
\ '' Pelikula ' \' ' AT release_year >= 2020 \n ',

'
fetch_size ': 5

}'

Output:

I-convert ang SQL Query sa Kahilingan sa Paghahanap

Upang i-convert ang nakaraang query sa paghahanap ng SQL sa isang kahilingan sa Elasticsearch, maaari naming ipasa ito sa translate API tulad ng ipinapakita sa ibaba:

kulot -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf: pag-uulat' -H 'Uri ng Nilalaman: application/json' -d '

{

'tanong': ' \n PUMILI ng pamagat, tagal, rating, uri MULA sa 'netflix' WHERE type = '
\ '' Pelikula ' \' ' AT release_year >= 2020 \n ',

'
fetch_size ': 5

}'

Dapat i-parse ng API ang input SQL input at i-convert ito sa isang wastong kahilingan sa paghahanap, tulad ng ipinapakita sa sumusunod na output:

{
'laki' : 5 ,
'tanong' : {
'bool' : {
'dapat' : [
{
'term' : {
'uri' : {
'halaga' : 'Pelikula'
}
}
},
{
'saklaw' : {
'release_year' : {
'gte' : 2020 ,
'palakasin' : 1
}
}
}
],
'palakasin' : 1
}
},
'_source' : hindi totoo,
'mga patlang' : [
{
'patlang' : 'pamagat'
},
{
'patlang' : 'tagal'
},
{
'patlang' : 'marka'
},
{
'patlang' : 'uri'
}
],
'uri' : [
{
'_doc' : {
'order' : 'asc'
}
}
]
}

Maaari mong gamitin ang format ng kahilingang ito upang ipadala sa Elasticsearch search API tulad ng ipinapakita sa ibaba:

kulot -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: pag-uulat' -H 'Uri ng Nilalaman: application/json' -d '
{
'laki': 5,
'tanong': {
'bool': {
'dapat': [
{
'term': {
'uri': {
'value': 'Pelikula'
}
}
},
{
'saklaw': {
'release_year': {
'gte': 2020,
'palakasin': 1
}
}
}
],
'palakasin': 1
}
},
'_source': mali,
'mga patlang': [
{
'patlang': 'pamagat'
},
{
'field': 'tagal'
},
{
'field': 'rating'
},
{
'patlang': 'uri'
}
],
'uri': [
{
'_doc': {
'order': 'asc'
}
}
]
}'

Katulad nito, ang kahilingan ay dapat magbalik ng katulad na data tulad ng ipinapakita sa ibaba:

Konklusyon

Sa pamamagitan ng post na ito, natuklasan mo kung paano mo magagamit ang mga query sa SQL upang kumuha ng data mula sa isang umiiral na index ng Elasticsearch. Natutunan mo rin kung paano gamitin ang pagsasalin ng SQL API upang i-convert ang isang wastong SQL query sa isang kahilingan sa Elasticsearch.