Elasticsearch SQL Çeviri API'sı

Elasticsearch Sql Ceviri Api Si



Bu gönderide, bir SQL aramasının JSON'a dayalı tam Sorgu Etki Alanına Özgü Dil içeren geçerli bir Elasticsearch arama API'si isteğine nasıl çevrileceğini öğreneceğiz.

Bu küçük bir API olmasına rağmen, özellikle SQL veritabanlarından gelen geliştiriciler için çok faydalı bir araçtır. SQL sorgularını ilgili arama sorgularıyla hızlı bir şekilde ilişkilendirerek öğrenme eğrisini de azaltabilir.

Ardından Elasticsearch arama API'sinin ve desteklenen sorgu dillerinin tüm özelliklerini keşfedebilirsiniz.







Elasticsearch'ün SQL'i desteklemesine rağmen çeşitli sınırlamalar içerdiğini akılda tutmak gerekir.



Sorgu Sözdizimi

Aşağıda, çeviri API'sinin sözdizimi gösterilmektedir:



GET _sql/çevir

{

request_body

}

Aşağıdaki sözdiziminde gösterildiği gibi çeviri API'sine bir gönderi isteği de gönderebilirsiniz:





POST _sql/çevir

{

request_body

}

Küme yapılandırmanıza bağlı olarak API, verilerini sorgulamak istediğiniz dizinde okuma ayrıcalıkları gerektirebilir. Hedef kaynağı bir dizin diğer adı veya bir veri akışı olarak da belirtebilirsiniz.

request_body'de, tüm SQL Search API istek gövdesi parametrelerini belirtebilirsiniz. Daha fazla bilgi edinmek için aşağıdaki kaynakta sağlanan belgeleri keşfedin:



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

Yanıt olarak, sorgu, sorgulanan verilerle arama API'sine karşılık gelen sonucu döndürmelidir.

Örnek

Bu API'nin nasıl kullanılacağını en iyi şekilde göstermek için, Netflix filmleri ve TV Şovları hakkındaki tüm verileri içeren 'netflix' adlı bir dizine sahip olduğumuzu varsayacağız.

2020 ve sonrasında yayınladığımız Netflix dizininden ilk beş filmi almak istediğimizi varsayalım:

Eşdeğer SQL sorgusu aşağıda gösterildiği gibi ifade edilebilir:

SEÇ başlık, süre, derecelendirme, netflix'ten yazın NEREDE yazın = 'Film' VE yayın_yılı >= 2020

Elasticsearch'te yukarıdaki SQL aramasını yürütmek için, onu aşağıda gösterildiği gibi SQL Search API'sine koyabiliriz:

kıvrılma -XGET 'http://localhost:9200/_sql?format=txt' -H 'kbn-xsrf: raporlama' -H 'İçerik Türü: uygulama/json' -d '

{

'sorgu': ' \n Başlık, süre, derecelendirme SEÇİN, FROM 'netflix' yazın WHERE type = '
\ '' Film ' \' ' VE yayın_yılı >= 2020 \n ',

'
fetch_size ': 5

}'

Önceki istek dizini sorgulamalı ve eşleşen kayıtları getirmelidir. Dönüş çıktısı, aşağıda belirtildiği gibi metin biçimindedir:

Gördüğümüz gibi, Elasticsearch beklenen çıktıyı döndürür.

Çıktıyı JSON olarak döndürmek için formatı aşağıda gösterildiği gibi JSON olarak ayarlayabiliriz:

kıvrılma -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf: raporlama' -H 'İçerik Türü: uygulama/json' -d '

{

'sorgu': ' \n Başlık, süre, derecelendirme SEÇİN, FROM 'netflix' yazın WHERE type = '
\ '' Film ' \' ' VE yayın_yılı >= 2020 \n ',

'
fetch_size ': 5

}'

Çıktı:

SQL Sorgusunu Arama İsteğine Dönüştür

Önceki SQL arama sorgusunu bir Elasticsearch isteğine dönüştürmek için onu aşağıda gösterildiği gibi çeviri API'sine aktarabiliriz:

kıvrılma -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf: raporlama' -H 'İçerik Türü: uygulama/json' -d '

{

'sorgu': ' \n Başlık, süre, derecelendirme SEÇİN, FROM 'netflix' yazın WHERE type = '
\ '' Film ' \' ' VE yayın_yılı >= 2020 \n ',

'
fetch_size ': 5

}'

API, giriş SQL girişini ayrıştırmalı ve aşağıdaki çıktıda gösterildiği gibi geçerli bir arama isteğine dönüştürmelidir:

{
'boyut' : 5 ,
'sorgu' : {
'bool' : {
'zorunlu' : [
{
'terim' : {
'tip' : {
'değer' : 'Film'
}
}
},
{
'Aralık' : {
'çıkış tarihi' : {
'gte' : 2020 ,
'artırmak' : 1
}
}
}
],
'artırmak' : 1
}
},
'_kaynak' : yanlış,
'alanlar' : [
{
'alan' : 'Başlık'
},
{
'alan' : 'süre'
},
{
'alan' : 'değerlendirme'
},
{
'alan' : 'tip'
}
],
'çeşit' : [
{
'_doc' : {
'emir' : 'artan'
}
}
]
}

Ardından, aşağıda gösterildiği gibi Elasticsearch arama API'sine göndermek için bu istek biçimini kullanabilirsiniz:

kıvrılma -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: raporlama' -H 'İçerik Türü: uygulama/json' -d '
{
'boyut': 5,
'sorgu': {
'bool': {
'zorunlu': [
{
'terim': {
'tip': {
'değer': 'Film'
}
}
},
{
'Aralık': {
'çıkış tarihi': {
'gte': 2020,
'artırma': 1
}
}
}
],
'artırma': 1
}
},
'_source': yanlış,
'alanlar': [
{
'alan': 'başlık'
},
{
'alan': 'süre'
},
{
'alan': 'derecelendirme'
},
{
'alan türü'
}
],
'çeşit': [
{
'_doc': {
'sıra': 'artan'
}
}
]
}'

Benzer şekilde, istek aşağıda gösterildiği gibi benzer verileri döndürmelidir:

Çözüm

Bu gönderi aracılığıyla, mevcut bir Elasticsearch dizininden veri almak için SQL sorgularını nasıl kullanabileceğinizi keşfettiniz. Ayrıca, geçerli bir SQL sorgusunu bir Elasticsearch isteğine dönüştürmek için SQL çevirme API'sinin nasıl kullanılacağını öğrendiniz.