API Terjemahan SQL Elasticsearch

Api Terjemahan Sql Elasticsearch



Dalam posting ini, kita akan belajar bagaimana menerjemahkan pencarian SQL menjadi permintaan API pencarian Elasticsearch yang valid yang berisi Bahasa Spesifik Domain Kueri lengkap berdasarkan JSON.

Meskipun ini adalah API kecil, ini adalah alat yang sangat bermanfaat, terutama bagi pengembang yang berasal dari database SQL. Ini juga dapat mengurangi kurva pembelajaran dengan menghubungkan kueri SQL dengan kueri penelusuran terkait dengan cepat.

Anda kemudian dapat menjelajahi kemampuan penuh dari API pencarian Elasticsearch dan bahasa kueri yang didukung.







Perlu diingat bahwa meskipun Elasticsearch mendukung SQL, ia mengandung berbagai batasan.



Sintaks Kueri

Berikut ini menunjukkan sintaks API terjemahan:



DAPATKAN _sql/terjemahkan

{

request_body

}

Anda juga dapat mengirim permintaan posting ke API terjemahan seperti yang ditunjukkan dalam sintaks berikut:





POST _sql/terjemahkan

{

request_body

}

Bergantung pada konfigurasi cluster Anda, API mungkin memerlukan hak baca pada indeks yang datanya ingin Anda kueri. Anda juga dapat menentukan sumber daya target sebagai alias indeks atau aliran data.

Di request_body, Anda dapat menentukan semua parameter badan permintaan API Pencarian SQL. Jelajahi dokumen yang disediakan dalam sumber berikut untuk mempelajari lebih lanjut:



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

Sebagai tanggapan, kueri harus mengembalikan hasil yang sesuai dengan API penelusuran dengan data kueri.

Contoh

Untuk mengilustrasikan cara terbaik menggunakan API ini, kami akan menganggap kami memiliki indeks yang disebut 'netflix' yang berisi semua data tentang film dan Acara TV Netflix.

Misalkan kita ingin mengambil lima film teratas dari indeks Netflix yang kita rilis pada tahun 2020 ke atas:

Kueri SQL yang setara dapat dinyatakan seperti yang ditunjukkan di bawah ini:

PILIH judul, durasi, peringkat, ketik FROM netflix WHERE type = 'Film' DAN rilis_tahun >= 2020

Untuk mengeksekusi pencarian SQL di atas di Elasticsearch, kita dapat memasukkannya ke dalam SQL Search API seperti yang ditunjukkan di bawah ini:

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

{

'permintaan': ' \n PILIH judul, durasi, peringkat, ketik FROM 'netflix' WHERE type = '
\ '' Film ' \' ' DAN rilis_tahun >= 2020 \n ',

'
ambil_ukuran ': 5

}'

Permintaan sebelumnya harus menanyakan indeks dan mengambil catatan yang cocok. Output kembali dalam format teks seperti yang disediakan di bawah ini:

Seperti yang kita lihat, Elasticsearch mengembalikan output yang diharapkan.

Untuk mengembalikan output sebagai JSON, kita dapat mengatur format ke JSON seperti yang ditunjukkan di bawah ini:

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

{

'permintaan': ' \n PILIH judul, durasi, peringkat, ketik FROM 'netflix' WHERE type = '
\ '' Film ' \' ' DAN rilis_tahun >= 2020 \n ',

'
ambil_ukuran ': 5

}'

Keluaran:

Ubah Kueri SQL Menjadi Permintaan Pencarian

Untuk mengonversi kueri penelusuran SQL sebelumnya menjadi permintaan Elasticsearch, kita dapat meneruskannya ke API terjemahan seperti yang ditunjukkan di bawah ini:

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

{

'permintaan': ' \n PILIH judul, durasi, peringkat, ketik FROM 'netflix' WHERE type = '
\ '' Film ' \' ' DAN rilis_tahun >= 2020 \n ',

'
ambil_ukuran ': 5

}'

API harus mengurai input input SQL dan mengubahnya menjadi permintaan pencarian yang valid, seperti yang ditunjukkan pada output berikut:

{
'ukuran' : 5 ,
'pertanyaan' : {
'bohong' : {
'harus' : [
{
'ketentuan' : {
'Tipe' : {
'nilai' : 'Film'
}
}
},
{
'jangkauan' : {
'tahun rilis' : {
'gte' : 2020 ,
'mendorong' : 1
}
}
}
],
'mendorong' : 1
}
},
'_sumber' : Salah,
'ladang' : [
{
'bidang' : 'judul'
},
{
'bidang' : 'durasi'
},
{
'bidang' : 'peringkat'
},
{
'bidang' : 'Tipe'
}
],
'menyortir' : [
{
'_dokter' : {
'memesan' : 'asc'
}
}
]
}

Anda kemudian dapat menggunakan format permintaan ini untuk mengirim ke API pencarian Elasticsearch seperti yang ditunjukkan di bawah ini:

ikal -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: pelaporan' -H 'Jenis Konten: aplikasi/json' -d '
{
'ukuran': 5,
'permintaan': {
'bolong': {
'harus': [
{
'ketentuan': {
'Tipe': {
'nilai': 'Film'
}
}
},
{
'jangkauan': {
'tahun rilis': {
'gte': 2020,
'meningkatkan': 1
}
}
}
],
'meningkatkan': 1
}
},
'_sumber': salah,
'bidang': [
{
'bidang': 'judul'
},
{
'bidang': 'durasi'
},
{
'bidang': 'peringkat'
},
{
'bidang': 'ketik'
}
],
'mengurutkan': [
{
'_dok': {
'pesan': 'asc'
}
}
]
}'

Demikian pula, permintaan harus mengembalikan data serupa seperti yang ditunjukkan di bawah ini:

Kesimpulan

Melalui posting ini, Anda menemukan bagaimana Anda dapat menggunakan kueri SQL untuk mengambil data dari indeks Elasticsearch yang ada. Anda juga mempelajari cara menggunakan translate SQL API untuk mengonversi kueri SQL yang valid menjadi permintaan Elasticsearch.