API Terjemahan SQL Elasticsearch

Api Terjemahan Sql Elasticsearch



Dalam siaran ini, kita akan belajar cara menterjemah carian SQL ke dalam permintaan API carian Elasticsearch yang sah yang mengandungi Bahasa Khusus Domain Pertanyaan penuh berdasarkan JSON.

Walaupun ini adalah API kecil, ia adalah alat yang sangat bermanfaat, terutamanya untuk pembangun yang datang dari pangkalan data SQL. Ia juga boleh mengurangkan keluk pembelajaran dengan mengaitkan pertanyaan SQL dengan cepat kepada pertanyaan carian yang sepadan.

Anda kemudiannya boleh meneroka keupayaan penuh API carian Elasticsearch dan bahasa pertanyaan yang disokong.







Perlu diingat bahawa walaupun Elasticsearch menyokong SQL, ia mengandungi pelbagai batasan.



Sintaks Pertanyaan

Berikut menunjukkan sintaks API terjemahan:



DAPATKAN _sql/terjemah

{

badan_permintaan

}

Anda juga boleh menghantar permintaan siaran ke API terjemah seperti yang ditunjukkan dalam sintaks berikut:





POST _sql/terjemah

{

badan_permintaan

}

Bergantung pada konfigurasi kluster anda, API mungkin memerlukan keistimewaan membaca pada indeks yang datanya ingin anda tanyakan. Anda juga boleh menentukan sumber sasaran sebagai alias indeks atau aliran data.

Dalam request_body, anda boleh menentukan semua parameter badan permintaan SQL Search API. Terokai dokumen yang disediakan dalam sumber berikut untuk mengetahui lebih lanjut:



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

Sebagai balasan, pertanyaan harus mengembalikan hasil yang sepadan dengan API carian dengan data yang ditanya.

Contoh

Untuk menggambarkan cara terbaik untuk menggunakan API ini, kami akan menganggap kami mempunyai indeks yang dipanggil 'netflix' yang mengandungi semua data tentang filem dan Rancangan TV Netflix.

Katakan kami ingin mengambil lima filem teratas daripada indeks Netflix yang kami keluarkan pada tahun 2020 dan ke atas:

Pertanyaan SQL yang setara boleh dinyatakan seperti yang ditunjukkan di bawah:

PILIH tajuk, tempoh, rating, jenis DARI netflix WHERE jenis = 'Filem' DAN tahun_keluaran >= 2020

Untuk melaksanakan carian SQL di atas dalam Elasticsearch, kami boleh memasukkannya ke dalam SQL Search API seperti yang ditunjukkan di bawah:

curl -XGET “http://localhost:9200/_sql?format=txt” -H 'kbn-xsrf: pelaporan' -H 'Jenis Kandungan: aplikasi/json' -d '

{

'pertanyaan': ' \n PILIH tajuk, tempoh, penilaian, taip DARI 'netflix' WHERE jenis = '
\ '' Filem ' \' ' DAN tahun_keluaran >= 2020 \n ',

'
ambil_saiz ': 5

}'

Permintaan sebelumnya harus menanyakan indeks dan mengambil rekod yang sepadan. Output pulangan adalah dalam format teks seperti yang disediakan di bawah:

Seperti yang dapat kita lihat, Elasticsearch mengembalikan output yang dijangkakan.

Untuk mengembalikan output sebagai JSON, kami boleh menetapkan format kepada JSON seperti yang ditunjukkan di bawah:

curl -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf: pelaporan' -H 'Jenis Kandungan: aplikasi/json' -d '

{

'pertanyaan': ' \n PILIH tajuk, tempoh, penilaian, taip DARI 'netflix' WHERE jenis = '
\ '' Filem ' \' ' DAN tahun_keluaran >= 2020 \n ',

'
ambil_saiz ': 5

}'

Pengeluaran:

Tukar SQL Query Kepada Permintaan Carian

Untuk menukar pertanyaan carian SQL sebelumnya kepada permintaan Elasticsearch, kami boleh menghantarnya ke dalam API terjemahan seperti yang ditunjukkan di bawah:

curl -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf: pelaporan' -H 'Jenis Kandungan: aplikasi/json' -d '

{

'pertanyaan': ' \n PILIH tajuk, tempoh, penilaian, taip DARI 'netflix' WHERE jenis = '
\ '' Filem ' \' ' DAN tahun_keluaran >= 2020 \n ',

'
ambil_saiz ': 5

}'

API harus menghuraikan input SQL input dan menukarnya menjadi permintaan carian yang sah, seperti yang ditunjukkan dalam output berikut:

{
'saiz' : 5 ,
'pertanyaan' : {
'bool' : {
'mesti' : [
{
'istilah' : {
'jenis' : {
'nilai' : 'Filem'
}
}
},
{
'julat' : {
'release_year' : {
'gte' : 2020 ,
'galakan' : 1
}
}
}
],
'galakan' : 1
}
},
'_sumber' : salah,
'padang' : [
{
'padang' : 'tajuk'
},
{
'padang' : 'tempoh'
},
{
'padang' : 'penilaian'
},
{
'padang' : 'jenis'
}
],
'isih' : [
{
'_doc' : {
'pesanan' : 'asc'
}
}
]
}

Anda kemudian boleh menggunakan format permintaan ini untuk menghantar ke API carian Elasticsearch seperti yang ditunjukkan di bawah:

curl -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: pelaporan' -H 'Jenis Kandungan: aplikasi/json' -d '
{
'saiz': 5,
'pertanyaan': {
'bool': {
'mesti': [
{
'istilah': {
'jenis': {
'value': 'Filem'
}
}
},
{
'julat': {
'release_year': {
'gte': 2020,
'meningkatkan': 1
}
}
}
],
'meningkatkan': 1
}
},
'_source': palsu,
'medan': [
{
'medan': 'tajuk'
},
{
'medan': 'tempoh'
},
{
'field': 'rating'
},
{
'medan': 'jenis'
}
],
'sort': [
{
'_doc': {
'pesanan': 'asc'
}
}
]
}'

Begitu juga, permintaan harus mengembalikan data yang serupa seperti yang ditunjukkan di bawah:

Kesimpulan

Melalui siaran ini, anda menemui cara anda boleh menggunakan pertanyaan SQL untuk mengambil data daripada indeks Elasticsearch sedia ada. Anda juga mempelajari cara menggunakan terjemahan SQL API untuk menukar pertanyaan SQL yang sah kepada permintaan Elasticsearch.