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:
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 >= 2020A 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.