Elasticsearch SQL Translate API

Elasticsearch Sql Translate Api



V tomto príspevku sa naučíme, ako preložiť vyhľadávanie SQL na platnú požiadavku rozhrania API na vyhľadávanie Elasticsearch obsahujúcu úplný jazyk špecifický pre doménu dopytu založený na JSON.

Aj keď ide o malé API, je to veľmi užitočný nástroj, najmä pre vývojárov pochádzajúcich z databáz SQL. Môže tiež skrátiť krivku učenia rýchlym spojením dopytov SQL s príslušnými vyhľadávacími dopytmi.

Potom môžete preskúmať všetky možnosti rozhrania Elasticsearch search API a podporované jazyky dopytov.







Je potrebné mať na pamäti, že hoci Elasticsearch podporuje SQL, obsahuje rôzne obmedzenia.



Syntax dopytu

Nasledujúci text zobrazuje syntax prekladača API:



GET _sql/translate

{

request_body

}

Môžete tiež odoslať požiadavku na odoslanie do prekladača API, ako je znázornené v nasledujúcej syntaxi:





POST _sql/translate

{

request_body

}

V závislosti od vašej konfigurácie klastra môže API vyžadovať privilégiá na čítanie v indexe, ktorého údaje chcete dotazovať. Cieľový prostriedok môžete zadať aj ako alias indexu alebo údajový tok.

V súbore request_body môžete zadať všetky parametre tela požiadavky SQL Search API. Ak chcete získať viac informácií, preskúmajte dokumenty uvedené v nasledujúcom zdroji:



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

Ako odpoveď by dotaz mal vrátiť výsledok zodpovedajúci vyhľadávaciemu API s dotazovanými údajmi.

Príklad

Aby sme čo najlepšie ilustrovali, ako používať toto API, budeme predpokladať, že máme index s názvom „netflix“, ktorý obsahuje všetky údaje o filmoch a televíznych reláciách Netflix.

Predpokladajme, že chceme získať päť najlepších filmov z indexu Netflix, ktoré sme vydali v roku 2020 a vyššie:

Ekvivalentný SQL dotaz možno vyjadriť takto:

VYBERTE názov, trvanie, hodnotenie, typ FROM netflix WHERE typ = 'film' AND release_year >= 2020

Ak chcete vykonať vyššie uvedené vyhľadávanie SQL v Elasticsearch, môžeme ho vložiť do rozhrania SQL Search API, ako je uvedené nižšie:

curl -XGET “http://localhost:9200/_sql?format=txt” -H 'kbn-xsrf: reporting' -H 'Typ obsahu: aplikácia/json' -d '

{

'dopyt': ' \n VYBERTE názov, trvanie, hodnotenie, typ FROM „netflix“ WHERE type = '
\ '' Film ' \' ' AND release_year >= 2020 \n ',

'
fetch_size “: 5

}'

Predchádzajúca požiadavka by sa mala dotazovať na index a získať zodpovedajúce záznamy. Návratový výstup je v textovom formáte, ako je uvedené nižšie:

Ako vidíme, Elasticsearch vracia očakávaný výstup.

Ak chcete vrátiť výstup ako JSON, môžeme nastaviť formát na JSON, ako je uvedené nižšie:

curl -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf: reporting' -H 'Typ obsahu: aplikácia/json' -d '

{

'dopyt': ' \n VYBERTE názov, trvanie, hodnotenie, typ FROM „netflix“ WHERE type = '
\ '' Film ' \' ' AND release_year >= 2020 \n ',

'
fetch_size “: 5

}'

Výkon:

Previesť dopyt SQL na požiadavku vyhľadávania

Ak chcete konvertovať predchádzajúci vyhľadávací dotaz SQL na požiadavku Elasticsearch, môžeme ho odovzdať do prekladača API, ako je uvedené nižšie:

curl -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf: reporting' -H 'Typ obsahu: aplikácia/json' -d '

{

'dopyt': ' \n VYBERTE názov, trvanie, hodnotenie, typ FROM „netflix“ WHERE type = '
\ '' Film ' \' ' AND release_year >= 2020 \n ',

'
fetch_size “: 5

}'

Rozhranie API by malo analyzovať vstupný vstup SQL a konvertovať ho na platnú požiadavku vyhľadávania, ako je znázornené v nasledujúcom výstupe:

{
'veľkosť' : 5 ,
'dopyt' : {
'bool' : {
'musieť' : [
{
'termín' : {
'typ' : {
'hodnota' : 'film'
}
}
},
{
'rozsah' : {
'release_year' : {
'gte' : 2020 ,
'zosilnenie' : 1
}
}
}
],
'zosilnenie' : 1
}
},
'_source' : nepravda,
'polia' : [
{
'lúka' : 'titul'
},
{
'lúka' : 'trvanie'
},
{
'lúka' : 'hodnotenie'
},
{
'lúka' : 'typ'
}
],
'triediť' : [
{
'_doc' : {
'objednať' : 'vzostup'
}
}
]
}

Tento formát žiadosti potom môžete použiť na odoslanie do vyhľadávacieho API Elasticsearch, ako je uvedené nižšie:

curl -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: reporting' -H 'Typ obsahu: aplikácia/json' -d '
{
'veľkosť': 5,
'dopyt': {
'bool': {
'musieť': [
{
'termín': {
'type': {
'value': 'Film'
}
}
},
{
'rozsah': {
'release_year': {
'gte': 2020,
'posilnenie': 1
}
}
}
],
'posilnenie': 1
}
},
'_source': nepravda,
'polia': [
{
'field': 'title'
},
{
'field': 'duration'
},
{
'field': 'rating'
},
{
'field': 'type'
}
],
'triediť': [
{
'_doc': {
'order': 'asc'
}
}
]
}'

Podobne by žiadosť mala vrátiť podobné údaje, ako je uvedené nižšie:

Záver

Prostredníctvom tohto príspevku ste zistili, ako môžete použiť dotazy SQL na načítanie údajov z existujúceho indexu Elasticsearch. Tiež ste sa naučili, ako používať prekladač SQL API na konverziu platného SQL dotazu na požiadavku Elasticsearch.