Elasticsearch SQL Translate API

Elasticsearch SQL Translate API
I dette innlegget lærer vi hvordan du kan oversette et SQL -søk til en gyldig Elasticsearch Search API -forespørsel som inneholder fullt spørringsdomenespesifikk språk basert på JSON.

Selv om dette er et lite API, er det et veldig gunstig verktøy, spesielt for utviklere som kommer fra SQL -databaser. Det kan også redusere læringskurven ved å raskt relatere SQL -spørsmålene til de tilsvarende søkespørsmålene.

Du kan deretter utforske de fulle egenskapene til Elasticsearch Search API og de støttede spørringsspråkene.

Det er å huske på at selv om Elasticsearch støtter SQL, inneholder den forskjellige begrensninger.

Spørringssyntaks

Følgende viser syntaks for Translate API:

Få _SQL/Oversett

forespørsel_body

Du kan også sende en postforespørsel til Oversats API som vist i følgende syntaks:

POST _SQL/OVERSIKT

forespørsel_body

Avhengig av klyngekonfigurasjonen din, kan API kreve lesingsprivilegier på indeksen hvis data du ønsker å spørre. Du kan også spesifisere målressursen som et indeksalias eller en datastrøm.

I forespørselen_body kan du spesifisere alle SQL Search API Request Body Parameters. Utforsk dokumentene som er gitt i følgende ressurs for å lære mer:

https: // www.elastisk.CO/Guide/EN/Elasticsearch/Reference/Current/SQL-SEARCH-API.HTML#SQL-SØK-API-REQUEST-BODY

Som et svar, bør spørringen returnere resultatet som tilsvarer søke -API med spørsmål om spørsmål.

Eksempel

For å illustrere best hvordan du bruker denne API -en, vil vi anta at vi har en indeks som heter "Netflix" som inneholder alle dataene om Netflix -filmer og TV -serier.

Anta at vi ønsker å hente de fem beste filmene fra Netflix -indeksen som vi ga ut i år 2020 og over:

Den tilsvarende SQL -spørringen kan uttrykkes som vist nedenfor:

Velg tittel, varighet, rangering, type fra Netflix hvor type = 'film' og release_year> = 2020

For å utføre ovennevnte SQL -søk i Elasticsearch, kan vi legge det inn i SQL Search API som vist nedenfor:

Curl -xget "http: // localhost: 9200/_sql?format = txt "-h" kbn -xsrf: rapportering "-h" innholdstype: applikasjon/json "-d '

"Query": "\ n Velg tittel, varighet, rangering, type fra" Netflix "hvor type = '\" film' \ '' og release_year> = 2020 \ n "",
""Fetch_size"": 5
'

Den forrige forespørselen skal spørre indeksen og hente matchende poster. Returutgangen er i tekstformat som angitt nedenfor:

Som vi kan se, returnerer Elasticsearch den forventede produksjonen.

For å returnere utdataene som JSON, kan vi stille formatet til JSON som vist nedenfor:

Curl -xget ""http: // localhost: 9200/_sql?format = json ""-h"" kbn -xsrf: rapportering ""-h"" innholdstype: applikasjon/json ""-d '

""Query"": ""\ n Velg tittel, varighet, rangering, type fra"" Netflix ""hvor type = '\"" film' \ '' og release_year> = 2020 \ n "",
""Fetch_size"": 5
'

Produksjon:

Konverter SQL -spørring til søkeforespørsel

For å konvertere det forrige SQL -søket til en ELASTICSEARCH -forespørsel, kan vi gi den til Translate API som vist nedenfor:

Curl -xget ""http: // localhost: 9200/_sql/translate"" -h ""kbn -xsrf: rapportering"" -h ""innholdstype: applikasjon/json"" -d '

""Query"": ""\ n Velg tittel, varighet, rangering, type fra"" Netflix ""hvor type = '\"" film' \ '' og release_year> = 2020 \ n "",
""Fetch_size"": 5
'

API skal analysere inngangen SQL -inngangen og konvertere den til en gyldig søkeforespørsel, som vist i følgende utdata:


""Størrelse"": 5,
""spørring"":
""bool"":
""må"": [

""begrep"":
""Type"":
""Verdi"": ""Film""


,

""område"":
""Release_year"":
""GTE"": 2020,
""Boost"": 1



],
""Boost"": 1

,
""_Source"": Falsk,
""Enger"": [

""Felt"": ""Tittel""
,

""Felt"": ""Varighet""
,

""Felt"": ""Rating""
,

""Felt"": ""Type""

],
""Sorter"": [

""_doc"":
""Order"": ""ASC""


]

Du kan deretter bruke dette forespørselsformatet til å sende til Elasticsearch Search API som vist nedenfor:

Curl -xpost ""http: // localhost: 9200/netflix/_search"" -h ""kbn -xsrf: rapportering"" -h ""innholdstype: applikasjon/json"" -d '

""Størrelse"": 5,
""spørring"":
""bool"":
""må"": [

""begrep"":
""Type"":
""Verdi"": ""Film""


,

""område"":
""Release_year"":
""GTE"": 2020,
""Boost"": 1



],
""Boost"": 1

,
""_Source"": Falsk,
""Enger"": [

""Felt"": ""Tittel""
,

""Felt"": ""Varighet""
,

""Felt"": ""Rating""
,

""Felt"": ""Type""

],
""Sorter"": [

""_doc"":
""Order"": ""ASC""


]
'

Tilsvarende skal forespørselen returnere lignende data som vist nedenfor:

Konklusjon

Gjennom dette innlegget oppdaget du hvordan du kunne bruke SQL -spørsmål for å hente data fra en eksisterende Elasticsearch Index. Du lærte også hvordan du bruker Translate SQL API for å konvertere en gyldig SQL -spørring til en Elasticsearch -forespørsel.

"