Elasticsearch SQL Translate API

Elasticsearch Sql Translate Api



Šajā ziņojumā mēs uzzināsim, kā pārvērst SQL meklēšanu derīgā Elasticsearch meklēšanas API pieprasījumā, kas satur pilnu vaicājuma domēna specifisko valodu, pamatojoties uz JSON.

Lai gan šī ir maza API, tas ir ļoti izdevīgs rīks, īpaši izstrādātājiem, kas nāk no SQL datu bāzēm. Tas var arī samazināt mācīšanās līkni, ātri saistot SQL vaicājumus ar atbilstošajiem meklēšanas vaicājumiem.

Pēc tam varat izpētīt visas Elasticsearch meklēšanas API iespējas un atbalstītās vaicājumu valodas.







Jāpatur prātā, ka, lai gan Elasticsearch atbalsta SQL, tas satur dažādus ierobežojumus.



Vaicājuma sintakse

Tālāk ir parādīta tulkošanas API sintakse:



IEGŪT _sql/translate

{

request_body

}

Varat arī nosūtīt izlikšanas pieprasījumu uz tulkošanas API, kā parādīts šajā sintaksē:





POST _sql/translate

{

request_body

}

Atkarībā no jūsu klastera konfigurācijas API var pieprasīt lasīšanas privilēģijas indeksam, kura datus vēlaties vaicāt. Varat arī norādīt mērķa resursu kā indeksa aizstājvārdu vai datu straumi.

Sadaļā request_body varat norādīt visus SQL Search API pieprasījuma pamatteksta parametrus. Lai uzzinātu vairāk, izpētiet šajā resursā sniegtos dokumentus:



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

Kā atbilde vaicājumam ir jāatgriež rezultāts, kas atbilst meklēšanas API ar vaicātiem datiem.

Piemērs

Lai vislabāk ilustrētu, kā izmantot šo API, mēs pieņemsim, ka mums ir indekss ar nosaukumu “netflix”, kas satur visus datus par Netflix filmām un TV pārraidēm.

Pieņemsim, ka mēs vēlamies iegūt piecas labākās filmas no Netflix indeksa, kuras izlaidām 2020. gadā un vēlāk:

Līdzvērtīgu SQL vaicājumu var izteikt, kā parādīts zemāk:

SELECT virsraksts, ilgums, vērtējums, veids FROM Netflix WHERE tips = 'filma' UN izlaiduma_gads >= 2020. gads

Lai izpildītu iepriekš minēto SQL meklēšanu programmā Elasticsearch, mēs varam to ievietot SQL Search API, kā parādīts tālāk:

čokurošanās -XGET “http://localhost:9200/_sql?format=txt” -H 'kbn-xsrf: ziņošana' -H 'Satura veids: lietojumprogramma/json' -d '

{

'vaicājums': ' \n SELECT virsraksts, ilgums, vērtējums, veids FROM 'netflix', WHERE tips = '
\ '' Filma ' \' ' UN izlaiduma_gads >= 2020. gads \n ',

'
fetch_size ': 5

}'

Iepriekšējam pieprasījumam ir jājautā indeksam un jāienes atbilstošie ieraksti. Atgriešanas izvade ir teksta formātā, kā norādīts tālāk:

Kā redzam, Elasticsearch atgriež gaidīto rezultātu.

Lai atgrieztu izvadi kā JSON, mēs varam iestatīt formātu uz JSON, kā parādīts tālāk:

čokurošanās -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf: ziņošana' -H 'Satura veids: lietojumprogramma/json' -d '

{

'vaicājums': ' \n SELECT virsraksts, ilgums, vērtējums, veids FROM 'netflix', WHERE tips = '
\ '' Filma ' \' ' UN izlaiduma_gads >= 2020. gads \n ',

'
fetch_size ': 5

}'

Izvade:

Konvertējiet SQL vaicājumu par meklēšanas pieprasījumu

Lai pārvērstu iepriekšējo SQL meklēšanas vaicājumu par Elasticsearch pieprasījumu, mēs varam to nodot tulkošanas API, kā parādīts tālāk:

čokurošanās -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf: ziņošana' -H 'Satura veids: lietojumprogramma/json' -d '

{

'vaicājums': ' \n SELECT virsraksts, ilgums, vērtējums, veids FROM 'netflix', WHERE tips = '
\ '' Filma ' \' ' UN izlaiduma_gads >= 2020. gads \n ',

'
fetch_size ': 5

}'

API vajadzētu parsēt ievades SQL ievadi un pārvērst to par derīgu meklēšanas pieprasījumu, kā parādīts šajā izvadē:

{
'Izmērs' : 5 ,
'vaicājums' : {
'bols' : {
'jā' : [
{
'jēdziens' : {
'tips' : {
'vērtība' : 'Filma'
}
}
},
{
'diapazons' : {
'izlaiduma_gads' : {
'gte' : 2020. gads ,
'pastiprināt' : 1
}
}
}
],
'pastiprināt' : 1
}
},
'_avots' : viltus,
'lauki' : [
{
'lauks' : 'nosaukums'
},
{
'lauks' : 'ilgums'
},
{
'lauks' : 'vērtējums'
},
{
'lauks' : 'tips'
}
],
'šķirot' : [
{
'_doc' : {
'pasūtījums' : 'augšup'
}
}
]
}

Pēc tam varat izmantot šo pieprasījuma formātu, lai nosūtītu uz Elasticsearch meklēšanas API, kā parādīts tālāk:

čokurošanās -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: ziņošana' -H 'Satura veids: lietojumprogramma/json' -d '
{
'izmērs': 5,
'vaicājums': {
'bool': {
'jā': [
{
'jēdziens': {
'tips': {
'vērtība': 'filma'
}
}
},
{
'diapazons': {
'release_year': {
'gte': 2020,
'pastiprināt': 1
}
}
}
],
'pastiprināt': 1
}
},
'_source': nepatiess,
'lauki': [
{
'lauks': 'nosaukums'
},
{
'lauks': 'ilgums'
},
{
'lauks': 'vērtējums'
},
{
'lauks': 'tips'
}
],
'šķirot': [
{
'_doc': {
'pasūtījums': 'augšup'
}
}
]
}'

Tāpat pieprasījumam ir jāatgriež līdzīgi dati, kā parādīts tālāk:

Secinājums

Izmantojot šo ziņu, jūs atklājāt, kā varat izmantot SQL vaicājumus, lai iegūtu datus no esoša Elasticsearch indeksa. Jūs arī uzzinājāt, kā izmantot tulkošanas SQL API, lai pārvērstu derīgu SQL vaicājumu par Elasticsearch pieprasījumu.