Elasticsearch SQL Translate API

Elasticsearch Sql Translate Api



Ebben a bejegyzésben megtudjuk, hogyan lehet lefordítani egy SQL-keresést érvényes Elasticsearch keresési API-kéréssé, amely a JSON-alapú teljes lekérdezési tartományspecifikus nyelvet tartalmazza.

Bár ez egy kicsi API, nagyon hasznos eszköz, különösen az SQL adatbázisokból érkező fejlesztők számára. A tanulási görbét is csökkentheti az SQL-lekérdezések és a megfelelő keresési lekérdezések gyors összekapcsolásával.

Ezután felfedezheti az Elasticsearch keresési API és a támogatott lekérdezési nyelvek teljes lehetőségeit.







Ne feledje, hogy bár az Elasticsearch támogatja az SQL-t, számos korlátozást tartalmaz.



Lekérdezés szintaxisa

Az alábbiakban a fordítási API szintaxisa látható:



Szerezze be az _sql/translate fájlt

{

request_body

}

A következő szintaxis szerint közzétételi kérelmet is küldhet a fordítási API-nak:





POST _sql/translate

{

request_body

}

A fürt konfigurációjától függően az API olvasási jogosultságokat kérhet azon az indexen, amelynek adatait le szeretné kérdezni. A célerőforrást indexálnévként vagy adatfolyamként is megadhatja.

A request_body mezőben megadhatja az SQL Search API kéréstörzs összes paraméterét. További információért tekintse meg a következő forrásban található dokumentumokat:



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

Válaszként a lekérdezésnek a keresési API-nak megfelelő eredményt kell visszaadnia a lekérdezett adatokkal.

Példa

Az API használatának legjobb szemléltetéséhez feltételezzük, hogy van egy „netflix” nevű indexünk, amely a Netflix filmekkel és tévéműsorokkal kapcsolatos összes adatot tartalmazza.

Tegyük fel, hogy a Netflix indexéből szeretnénk lekérni az öt legjobb filmet, amelyet 2020-ban és azután adtunk ki:

Az ekvivalens SQL lekérdezés az alábbiak szerint fejezhető ki:

SELECT cím, időtartam, értékelés, típus FROM netflix WHERE típus = 'Film' ÉS kiadás_év >= 2020

A fenti SQL keresés végrehajtásához az Elasticsearch alkalmazásban, az alábbiak szerint helyezhetjük el az SQL Search API-ba:

göndör -XGET „http://localhost:9200/_sql?format=txt” -H 'kbn-xsrf: jelentés' -H 'Tartalomtípus: alkalmazás/json' -d '

{

'lekérdezés': ' \n SELECT cím, időtartam, értékelés, típus FROM 'netflix' WHERE type = '
\ '' Film ' \' ' ÉS kiadás_év >= 2020 \n ',

'
fetch_size ': 5

}'

Az előző kérésnek le kell kérdeznie az indexet, és le kell kérnie a megfelelő rekordokat. A visszatérési kimenet szöveges formátumú, az alábbiak szerint:

Amint látjuk, az Elasticsearch a várt kimenetet adja vissza.

Ha a kimenetet JSON-ként szeretné visszaadni, a formátumot JSON-ra állíthatjuk az alábbiak szerint:

göndör -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf: jelentés' -H 'Tartalomtípus: alkalmazás/json' -d '

{

'lekérdezés': ' \n SELECT cím, időtartam, értékelés, típus FROM 'netflix' WHERE type = '
\ '' Film ' \' ' ÉS kiadás_év >= 2020 \n ',

'
fetch_size ': 5

}'

Kimenet:

SQL lekérdezés konvertálása keresési kéréssé

Az előző SQL keresési lekérdezés Elasticsearch kéréssé alakításához átadhatjuk azt a fordítási API-nak az alábbiak szerint:

göndör -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf: jelentés' -H 'Tartalomtípus: alkalmazás/json' -d '

{

'lekérdezés': ' \n SELECT cím, időtartam, értékelés, típus FROM 'netflix' WHERE type = '
\ '' Film ' \' ' ÉS kiadás_év >= 2020 \n ',

'
fetch_size ': 5

}'

Az API-nak elemeznie kell a bemeneti SQL-bemenetet, és érvényes keresési kéréssé kell alakítania, amint az a következő kimeneten látható:

{
'méret' : 5 ,
'lekérdezés' : {
'bolond' : {
'kell' : [
{
'kifejezés' : {
'típus' : {
'érték' : 'Film'
}
}
},
{
'hatótávolság' : {
'release_year' : {
'gte' : 2020 ,
'növelés' : 1
}
}
}
],
'növelés' : 1
}
},
'_forrás' : hamis,
'mezők' : [
{
'terület' : 'cím'
},
{
'terület' : 'időtartam'
},
{
'terület' : 'értékelés'
},
{
'terület' : 'típus'
}
],
'fajta' : [
{
'_doc' : {
'rendelés' : 'emelkedő'
}
}
]
}

Ezután ezt a kérésformátumot használhatja az Elasticsearch keresési API-nak való küldéshez, az alábbiak szerint:

curl -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: jelentés' -H 'Tartalomtípus: alkalmazás/json' -d '
{
'méret': 5,
'lekérdezés': {
'bool': {
'kell': [
{
'kifejezés': {
'típus': {
'érték': 'Film'
}
}
},
{
'hatótávolság': {
'release_year': {
'gte': 2020,
'növelés': 1
}
}
}
],
'növelés': 1
}
},
'_source': hamis,
'mezők': [
{
'field': 'cím'
},
{
'field': 'időtartam'
},
{
'field': 'értékelés'
},
{
'mező': 'típus'
}
],
'rendezés': [
{
'_doc': {
'rend': 'növekvő'
}
}
]
}'

Hasonlóképpen, a kérésnek az alábbiakhoz hasonló adatokat kell visszaadnia:

Következtetés

Ebben a bejegyzésben felfedezte, hogyan használhat SQL-lekérdezéseket adatok lekérésére egy meglévő Elasticsearch indexből. Azt is megtanulta, hogyan kell a fordító SQL API-t használni egy érvényes SQL-lekérdezés Elasticsearch kéréssé alakítására.