Elasticsearch SQL Translate API

Elasticsearch Sql Translate Api



V tomto příspěvku se naučíme, jak přeložit vyhledávání SQL do platného požadavku rozhraní API pro vyhledávání Elasticsearch obsahujícího úplný jazyk specifický pro dotazovací doménu založený na JSON.

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:



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

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 >= 2020

Chcete-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.