Selv om dette er et lite API, er det et veldig nyttig verktøy, spesielt for utviklere som kommer fra SQL-databaser. Det kan også redusere læringskurven ved raskt å relatere SQL-spørringene til de tilsvarende søkene.
Du kan deretter utforske alle funksjonene til Elasticsearch søke-API og de støttede søkespråkene.
Det er å huske på at selv om Elasticsearch støtter SQL, inneholder det forskjellige begrensninger.
Spørringssyntaks
Følgende viser syntaksen til translate API:
GET _sql/translate
{
request_body
}
Du kan også sende en postforespørsel til translate API som vist i følgende syntaks:
POST _sql/translate
{
request_body
}
Avhengig av klyngekonfigurasjonen din, kan API-en kreve leserettigheter på indeksen hvis data du ønsker å spørre etter. Du kan også spesifisere målressursen som et indeksalias eller en datastrøm.
I request_body kan du spesifisere alle SQL Search API request body parametere. Utforsk dokumentene i følgende ressurs for å finne ut mer:
Som et svar skal spørringen returnere resultatet som tilsvarer søke-APIet med de forespurte dataene.
Eksempel
For best å illustrere hvordan du bruker denne API-en, vil vi anta at vi har en indeks kalt 'netflix' som inneholder all data om Netflix-filmer og TV-serier.
Anta at vi ønsker å hente de fem beste filmene fra Netflix-indeksen som vi ga ut i 2020 og oppover:
Den tilsvarende SQL-spørringen kan uttrykkes som vist nedenfor:
VELG tittel, varighet, vurdering, type FROM netflix WHERE type = 'Film' OG utgivelsesår >= 2020For å utføre SQL-søket ovenfor i Elasticsearch, kan vi sette det inn i SQL Search API som vist nedenfor:
krølle -XGET 'http://localhost:9200/_sql?format=txt' -H 'kbn-xsrf: rapportering' -H 'Content-Type: application/json' -d '{
'query': ' \n VELG tittel, varighet, vurdering, skriv FRA 'netflix' WHERE type = ' \ '' Film ' \' ' OG utgivelsesår >= 2020 \n ',
' hente_størrelse ': 5
}'
Den forrige forespørselen skulle spørre indeksen og hente de samsvarende postene. Returutgangen er i tekstformat som vist nedenfor:
Som vi kan se, returnerer Elasticsearch den forventede utgangen.
For å returnere utdataene som JSON, kan vi sette formatet til JSON som vist nedenfor:
krølle -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf: rapportering' -H 'Content-Type: application/json' -d '{
'query': ' \n VELG tittel, varighet, vurdering, skriv FRA 'netflix' WHERE type = ' \ '' Film ' \' ' OG utgivelsesår >= 2020 \n ',
' hente_størrelse ': 5
}'
Produksjon:
Konverter SQL-spørring til søkeforespørsel
For å konvertere den forrige SQL-søkeforespørselen til en Elasticsearch-forespørsel, kan vi sende den inn i translate API som vist nedenfor:
krølle -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf: rapportering' -H 'Content-Type: application/json' -d '{
'query': ' \n VELG tittel, varighet, vurdering, skriv FRA 'netflix' WHERE type = ' \ '' Film ' \' ' OG utgivelsesår >= 2020 \n ',
' hente_størrelse ': 5
}'
API-en bør analysere SQL-inndataene og konvertere den til en gyldig søkeforespørsel, som vist i følgende utdata:
{'størrelse' : 5 ,
'spørsmål' : {
'bool' : {
'må' : [
{
'begrep' : {
'type' : {
'verdi' : 'Film'
}
}
},
{
'område' : {
'utgivelsesår' : {
'gte' : 2020 ,
'øke' : 1
}
}
}
],
'øke' : 1
}
},
'_kilde' : falsk,
'Enger' : [
{
'felt' : 'tittel'
},
{
'felt' : 'varighet'
},
{
'felt' : 'vurdering'
},
{
'felt' : 'type'
}
],
'sortere' : [
{
'_doc' : {
'rekkefølge' : 'asc'
}
}
]
}
Du kan deretter bruke dette forespørselsformatet til å sende til Elasticsearch søke-API som vist nedenfor:
krøll -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: rapportering' -H 'Content-Type: application/json' -d '{
'størrelse': 5,
'query': {
'bool': {
'må': [
{
'begrep': {
'type': {
'value': 'Film'
}
}
},
{
'område': {
'release_year': {
'gte': 2020,
'boost': 1
}
}
}
],
'boost': 1
}
},
'_source': usant,
'Enger': [
{
'field': 'tittel'
},
{
'field': 'varighet'
},
{
'field': 'vurdering'
},
{
'field': 'type'
}
],
'sort': [
{
'_doc': {
'order': 'asc'
}
}
]
}'
På samme måte skal forespørselen returnere lignende data som vist nedenfor:
Konklusjon
Gjennom dette innlegget oppdaget du hvordan du kan bruke SQL-spørringer til å hente data fra en eksisterende Elasticsearch-indeks. Du har også lært hvordan du bruker oversett SQL API for å konvertere en gyldig SQL-spørring til en Elasticsearch-forespørsel.