Přestože se jedná o malé API, je to velmi přínosný nástroj, zejména pro vývojáře přicházející z databází SQL. Může také zkrátit křivku učení tím, že rychle spojí dotazy SQL s odpovídajícími vyhledávacími dotazy.
Poté můžete prozkoumat všechny možnosti vyhledávacího rozhraní Elasticsearch a podporované jazyky dotazů.
Je třeba mít na paměti, že ačkoli Elasticsearch podporuje SQL, obsahuje různá omezení.
Syntaxe dotazu
Následující text ukazuje syntaxi překladového rozhraní API:
ZÍSKEJTE _sql/translate
{
request_body
}
Můžete také odeslat požadavek na odeslání do rozhraní API pro překlad, jak je znázorněno v následující syntaxi:
POST _sql/translate
{
request_body
}
V závislosti na konfiguraci klastru může rozhraní API vyžadovat oprávnění ke čtení indexu, jehož data chcete dotazovat. Můžete také zadat cílový prostředek jako alias indexu nebo datový proud.
V souboru request_body můžete zadat všechny parametry těla požadavku SQL Search API. Chcete-li se dozvědět více, prozkoumejte dokumenty uvedené v následujícím zdroji:
Jako odpověď by dotaz měl vrátit výsledek odpovídající vyhledávacímu API s dotazovanými daty.
Příklad
Abychom nejlépe ilustrovali, jak používat toto API, budeme předpokládat, že máme index nazvaný „netflix“ obsahující všechna data o filmech a televizních pořadech Netflix.
Předpokládejme, že chceme získat pět nejlepších filmů z indexu Netflix, které jsme vydali v roce 2020 a výše:
Ekvivalentní SQL dotaz lze vyjádřit následovně:
VYBERTE název, trvání, hodnocení, typ FROM netflix WHERE typ = 'Film' AND release_year >= 2020Chcete-li provést výše uvedené vyhledávání SQL v Elasticsearch, můžeme jej vložit do rozhraní SQL Search API, jak je znázorněno níže:
curl -XGET “http://localhost:9200/_sql?format=txt” -H 'kbn-xsrf: reporting' -H 'Typ obsahu: aplikace/json' -d '{
'dotaz': ' \n VYBERTE název, trvání, hodnocení, zadejte FROM „netflix“ WHERE type = ' \ '' Film ' \' ' AND release_year >= 2020 \n ',
' fetch_size ': 5
}'
Předchozí požadavek by se měl dotazovat na index a načíst odpovídající záznamy. Návratový výstup je v textovém formátu, jak je uvedeno níže:
Jak vidíme, Elasticsearch vrací očekávaný výstup.
Chcete-li vrátit výstup jako JSON, můžeme nastavit formát na JSON, jak je znázorněno níže:
curl -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf: reporting' -H 'Typ obsahu: aplikace/json' -d '{
'dotaz': ' \n VYBERTE název, trvání, hodnocení, zadejte FROM „netflix“ WHERE type = ' \ '' Film ' \' ' AND release_year >= 2020 \n ',
' fetch_size ': 5
}'
Výstup:
Převést SQL dotaz na vyhledávací požadavek
Chcete-li převést předchozí vyhledávací dotaz SQL na požadavek Elasticsearch, můžeme jej předat do překladového rozhraní API, jak je uvedeno níže:
curl -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf: reporting' -H 'Typ obsahu: aplikace/json' -d '{
'dotaz': ' \n VYBERTE název, trvání, hodnocení, zadejte FROM „netflix“ WHERE type = ' \ '' Film ' \' ' AND release_year >= 2020 \n ',
' fetch_size ': 5
}'
Rozhraní API by mělo analyzovat vstupní vstup SQL a převést jej na platný požadavek vyhledávání, jak je znázorněno na následujícím výstupu:
{'velikost' : 5 ,
'dotaz' : {
'bool' : {
'musí' : [
{
'období' : {
'typ' : {
'hodnota' : 'Film'
}
}
},
{
'rozsah' : {
'rok_vydání' : {
'gte' : 2020 ,
'posilovat' : 1
}
}
}
],
'posilovat' : 1
}
},
'_zdroj' : Nepravdivé,
'pole' : [
{
'pole' : 'titul'
},
{
'pole' : 'doba trvání'
},
{
'pole' : 'hodnocení'
},
{
'pole' : 'typ'
}
],
'řadit' : [
{
'_doc' : {
'objednat' : 'asc'
}
}
]
}
Tento formát požadavku pak můžete použít k odeslání do vyhledávacího rozhraní Elasticsearch, jak je uvedeno níže:
curl -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: reporting' -H 'Typ obsahu: aplikace/json' -d '{
'velikost': 5,
'dotaz': {
'bool': {
'musí': [
{
'termín': {
'type': {
'value': 'Film'
}
}
},
{
'rozsah': {
'release_year': {
'gte': 2020,
'boost': 1
}
}
}
],
'boost': 1
}
},
'_source': nepravda,
'pole': [
{
'field': 'title'
},
{
'field': 'trvání'
},
{
'field': 'hodnocení'
},
{
'pole': 'typ'
}
],
'seřadit': [
{
'_doc': {
'order': 'asc'
}
}
]
}'
Podobně by měl požadavek vrátit podobná data, jak je uvedeno níže:
Závěr
Prostřednictvím tohoto příspěvku jste zjistili, jak můžete použít dotazy SQL k načtení dat z existujícího indexu Elasticsearch. Také jste se naučili, jak používat překladové SQL API k převodu platného SQL dotazu na požadavek Elasticsearch.