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