API di traduzione SQL di Elasticsearch

Api Di Traduzione Sql Di Elasticsearch



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

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

Puoi quindi esplorare le funzionalità complete dell'API di ricerca Elasticsearch e i linguaggi di query supportati.







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



Sintassi della query

Di seguito viene mostrata la sintassi dell'API di traduzione:



OTTIENI _sql/translate

{

richiesta_corpo

}

Puoi anche inviare una richiesta di post all'API di traduzione come mostrato nella seguente sintassi:





POST _sql/translate

{

richiesta_corpo

}

A seconda della configurazione del tuo cluster, l'API potrebbe richiedere privilegi di lettura sull'indice di cui desideri interrogare i dati. È inoltre possibile specificare la risorsa di destinazione come alias di indice o flusso di dati.

In request_body, puoi specificare tutti i parametri del corpo della richiesta dell'API di ricerca SQL. Esplora i documenti forniti nella seguente risorsa per saperne di più:



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

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

Esempio

Per illustrare al meglio come utilizzare questa API, assumeremo di avere 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, digita DA netflix DOVE tipo = 'Film' E anno_di_rilascio >= 2020

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

ricciolo -XGET “http://localhost:9200/_sql?format=txt” -H 'kbn-xsrf: rapporti' -H 'Tipo di contenuto: application/json' -d '

{

'interrogazione': ' \n SELEZIONA titolo, durata, valutazione, digita DA 'netflix' DOVE type = '
\ '' Film ' \' ' E anno_di_rilascio >= 2020 \n ',

'
fetch_size ': 5

}'

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

Come possiamo vedere, Elasticsearch restituisce l'output atteso.

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

ricciolo -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf: rapporti' -H 'Tipo di contenuto: application/json' -d '

{

'interrogazione': ' \n SELEZIONA titolo, durata, valutazione, digita DA 'netflix' DOVE type = '
\ '' Film ' \' ' E anno_di_rilascio >= 2020 \n ',

'
fetch_size ': 5

}'

Produzione:

Converti query SQL in richiesta di ricerca

Per convertire la query di ricerca SQL precedente in una richiesta Elasticsearch, possiamo passarla all'API di traduzione come mostrato di seguito:

ricciolo -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf: rapporti' -H 'Tipo di contenuto: application/json' -d '

{

'interrogazione': ' \n SELEZIONA titolo, durata, valutazione, digita DA 'netflix' DOVE type = '
\ '' Film ' \' ' E anno_di_rilascio >= 2020 \n ',

'
fetch_size ': 5

}'

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

{
'taglia' : 5 ,
'interrogazione' : {
'bollo' : {
'dovere' : [
{
'termine' : {
'genere' : {
'valore' : 'Film'
}
}
},
{
'gamma' : {
'Anno di pubblicazione' : {
'gte' : 2020 ,
'Incremento' : 1
}
}
}
],
'Incremento' : 1
}
},
'_fonte' : falso,
'campi' : [
{
'campo' : 'titolo'
},
{
'campo' : 'durata'
},
{
'campo' : 'valutazione'
},
{
'campo' : 'genere'
}
],
'ordinare' : [
{
'_doc' : {
'ordine' : 'asc'
}
}
]
}

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

ricciolo -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: rapporti' -H 'Tipo di contenuto: application/json' -d '
{
'dimensione': 5,
'interrogazione': {
'bollo': {
'dovere': [
{
'termine': {
'genere': {
'valore': 'Film'
}
}
},
{
'gamma': {
'Anno di pubblicazione': {
'gte': 2020,
'stimolare': 1
}
}
}
],
'stimolare': 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 utilizzare le query SQL per recuperare i dati da un indice Elasticsearch esistente. Hai anche imparato a utilizzare l'API di traduzione SQL per convertire una query SQL valida in una richiesta Elasticsearch.