Elasticsearch SQL Translate API

Elasticsearch SQL Translate API
In questo post, impareremo come tradurre una ricerca SQL in una richiesta API di ricerca ElaSticSearch valida contenente un linguaggio specifico del dominio di query completo basato su JSON.

Sebbene questa sia una piccola API, è uno strumento molto benefico, specialmente per gli sviluppatori provenienti da database SQL. Può anche ridurre la curva di apprendimento mettendo in relazione rapidamente le query SQL alle corrispondenti query di ricerca.

È quindi possibile esplorare le capacità complete dell'API di ricerca di Elasticsearch e delle lingue di query supportate.

È per tenere presente che sebbene Elasticsearch supporti SQL, contiene varie limitazioni.

Sintassi delle query

Di seguito mostra la sintassi dell'API Translate:

Ottieni _sql/traduci

request_body

È inoltre possibile inviare una richiesta post all'API Translate come mostrato nella sintassi seguente:

Post _SQL/Translate

request_body

A seconda della configurazione del cluster, l'API può richiedere privilegi di lettura sull'indice i cui dati si desidera fare query. È inoltre possibile specificare la risorsa target come alias indice o un flusso di dati.

In Request_body, è possibile specificare tutti i parametri del corpo della richiesta di ricerca di ricerca SQL. Esplora i documenti forniti nella seguente risorsa per saperne di più:

https: // www.elastico.CO/GUIDA/EN/ELASTICHEARCH/REFERIMENTO/Current/SQL-SEARCH-API.HTML#SQL-SEARCH-API-REQUEST-BODY

Come risposta, la query dovrebbe restituire il risultato corrispondente all'API di ricerca con i dati interrogati.

Esempio

Per illustrare al meglio come utilizzare questa API, supponiamo che abbiamo un indice chiamato "Netflix" contenente tutti i dati sui film e sui programmi TV Netflix.

Supponiamo di voler recuperare i primi cinque film dall'indice Netflix che abbiamo pubblicato nell'anno 2020 e oltre:

La query SQL equivalente può essere espressa come mostrato di seguito:

Seleziona titolo, durata, valutazione, tipo da netflix dove type = 'film' e rilascio_year> = 2020

Per eseguire la ricerca SQL sopra in Elasticsearch, possiamo inserirla nell'API di ricerca SQL come mostrato di seguito:

Curl -Xget "http: // localhost: 9200/_sql?formato = txt "-h" kbn -xsrf: reporting "-h" contenuto -tipo: applicazione/json "-d '

"query": "\ n Seleziona titolo, durata, valutazione, tipo da" Netflix "dove type = '\" film' \ '' e rilascio_year> = 2020 \ n "",
""fetch_size"": 5
'

La richiesta precedente dovrebbe interrogare l'indice e recuperare i record corrispondenti. L'output di restituzione è in formato di testo come previsto di seguito:

Come possiamo vedere, Elasticsearch restituisce l'output previsto.

Per restituire l'output come JSON, possiamo impostare il formato su JSON come mostrato di seguito:

Curl -Xget ""http: // localhost: 9200/_sql?formato = json ""-h"" kbn -xsrf: reporting ""-h"" tipo di contenuto: applicazione/json ""-d '

""query"": ""\ n Seleziona titolo, durata, valutazione, tipo da"" Netflix ""dove type = '\"" film' \ '' e rilascio_year> = 2020 \ n "",
""fetch_size"": 5
'

Produzione:

Converti la query SQL in richiesta di ricerca

Per convertire la precedente query di ricerca SQL in una richiesta di ElasticSearch, possiamo passarla nell'API Translate come mostrato di seguito:

Curl -xget ""http: // localhost: 9200/_sql/tradute"" -H ""kbn -xsrf: reporting"" -h ""contenuti -type: applicazione/json"" -d '

""query"": ""\ n Seleziona titolo, durata, valutazione, tipo da"" Netflix ""dove type = '\"" film' \ '' e rilascio_year> = 2020 \ n "",
""fetch_size"": 5
'

L'API dovrebbe analizzare l'ingresso di input SQL e convertirlo in una richiesta di ricerca valida, come mostrato nella seguente uscita:


""dimensione"": 5,
""query"":
""bool"":
""dovere"": [

""termine"":
""tipo"":
""valore"": ""film""


,

""allineare"":
""Anno di pubblicazione"":
""GTE"": 2020,
""Boost"": 1



"",
""Boost"": 1

,
""_source"": falso,
""campi"": [

""campo"": ""titolo""
,

""campo"": ""durata""
,

""campo"": ""valutazione""
,

""tipo di campo""

"",
""ordinare"": [

""_doc"":
""Ordine"": ""ASC""


""

È quindi possibile utilizzare questo formato di richiesta per inviare all'API di ricerca di Elasticsearch come mostrato di seguito:

Curl -xpost ""http: // localhost: 9200/netflix/_search"" -h ""kbn -xsrf: reporting"" -h ""contenuti -type: applicazione/json"" -d '

""dimensione"": 5,
""query"":
""bool"":
""dovere"": [

""termine"":
""tipo"":
""valore"": ""film""


,

""allineare"":
""Anno di pubblicazione"":
""GTE"": 2020,
""Boost"": 1



"",
""Boost"": 1

,
""_source"": falso,
""campi"": [

""campo"": ""titolo""
,

""campo"": ""durata""
,

""campo"": ""valutazione""
,

""tipo di campo""

"",
""ordinare"": [

""_doc"":
""Ordine"": ""ASC""


""
'

Allo stesso modo, la richiesta dovrebbe restituire dati simili come mostrato di seguito:

Conclusione

Attraverso questo post, hai scoperto come è possibile utilizzare query SQL per recuperare i dati da un indice ElaSticSearch esistente. Hai anche imparato a utilizzare l'API SQL traduci per convertire una query SQL valida in una richiesta di ElaSticSearch.

"