API-ul Elasticsearch SQL Translate

Api Ul Elasticsearch Sql Translate



În această postare, vom învăța cum să traducem o căutare SQL într-o solicitare API de căutare validă Elasticsearch care conține limbajul specific domeniului de interogare complet bazat pe JSON.

Deși acesta este un API mic, este un instrument foarte benefic, în special pentru dezvoltatorii care provin din baze de date SQL. De asemenea, poate reduce curba de învățare relaționând rapid interogările SQL cu interogările de căutare corespunzătoare.

Puteți explora apoi capabilitățile complete ale API-ului de căutare Elasticsearch și limbile de interogare acceptate.







Trebuie să rețineți că, deși Elasticsearch acceptă SQL, conține diverse limitări.



Sintaxa de interogare

Următoarele arată sintaxa API-ului translate:



GET _sql/translate

{

cerere_corp

}

De asemenea, puteți trimite o solicitare de postare către API-ul de traducere, așa cum se arată în următoarea sintaxă:





POST _sql/traducere

{

cerere_corp

}

În funcție de configurația clusterului dvs., API-ul poate necesita privilegii de citire pe indexul ale cărui date doriți să le interogați. De asemenea, puteți specifica resursa țintă ca alias de index sau flux de date.

În request_body, puteți specifica toți parametrii corpului cererii SQL Search API. Explorați documentele furnizate în următoarea resursă pentru a afla mai multe:



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

Ca răspuns, interogarea ar trebui să returneze rezultatul corespunzător API-ului de căutare cu datele interogate.

Exemplu

Pentru a ilustra cel mai bine modul de utilizare a acestui API, vom presupune că avem un index numit „netflix” care conține toate datele despre filmele și emisiunile TV Netflix.

Să presupunem că dorim să luăm primele cinci filme din indexul Netflix pe care l-am lansat în anul 2020 și mai sus:

Interogarea SQL echivalentă poate fi exprimată după cum se arată mai jos:

SELECTAȚI titlul, durata, evaluarea, tastați FROM netflix WHERE tip = 'Film' ȘI release_year >= 2020

Pentru a executa căutarea SQL de mai sus în Elasticsearch, o putem pune în API-ul de căutare SQL, așa cum se arată mai jos:

curl -XGET „http://localhost:9200/_sql?format=txt” -H „kbn-xsrf: raportare” -H „Tip de conținut: aplicație/json” -d '

{

'interogare': ' \n SELECTează titlul, durata, evaluarea, tastează FROM „netflix” WHERE tip = '
\ '' Film ' \' ' ȘI release_year >= 2020 \n ',

'
fetch_size „: 5

}'

Solicitarea anterioară ar trebui să interogheze indexul și să preia înregistrările care se potrivesc. Ieșirea returnată este în format text, după cum este prezentat mai jos:

După cum putem vedea, Elasticsearch returnează rezultatul așteptat.

Pentru a returna ieșirea ca JSON, putem seta formatul la JSON așa cum se arată mai jos:

curl -XGET „http://localhost:9200/_sql?format=json” -H „kbn-xsrf: raportare” -H „Tip de conținut: aplicație/json” -d '

{

'interogare': ' \n SELECTează titlul, durata, evaluarea, tastează FROM „netflix” WHERE tip = '
\ '' Film ' \' ' ȘI release_year >= 2020 \n ',

'
fetch_size „: 5

}'

Ieșire:

Convertiți interogarea SQL în cerere de căutare

Pentru a converti interogarea anterioară de căutare SQL într-o solicitare Elasticsearch, o putem trece în API-ul de traducere, după cum se arată mai jos:

curl -XGET „http://localhost:9200/_sql/translate” -H „kbn-xsrf: raportare” -H „Tip de conținut: aplicație/json” -d '

{

'interogare': ' \n SELECTează titlul, durata, evaluarea, tastează FROM „netflix” WHERE tip = '
\ '' Film ' \' ' ȘI release_year >= 2020 \n ',

'
fetch_size „: 5

}'

API-ul ar trebui să analizeze intrarea SQL de intrare și să o convertească într-o cerere de căutare validă, așa cum se arată în următoarea ieșire:

{
'mărimea' : 5 ,
'interogare' : {
'bool' : {
'trebuie sa' : [
{
'termen' : {
'tip' : {
'valoare' : 'Film'
}
}
},
{
'gamă' : {
'anul lansării' : {
'gte' : 2020 ,
'boost' : 1
}
}
}
],
'boost' : 1
}
},
'_sursă' : fals,
'câmpuri' : [
{
'camp' : 'titlu'
},
{
'camp' : 'durată'
},
{
'camp' : 'evaluare'
},
{
'camp' : 'tip'
}
],
'fel' : [
{
„_doc” : {
'Ordin' : 'asc'
}
}
]
}

Apoi puteți utiliza acest format de solicitare pentru a trimite către API-ul de căutare Elasticsearch, după cum se arată mai jos:

curl -XPOST „http://localhost:9200/netflix/_search” -H „kbn-xsrf: raportare” -H „Tip de conținut: aplicație/json” -d '
{
„dimensiune”: 5,
„interogare”: {
„bool”: {
'trebuie sa': [
{
'termen': {
'tip': {
'value': 'Film'
}
}
},
{
'gamă': {
'anul lansării': {
„gte”: 2020,
„amplificare”: 1
}
}
}
],
„amplificare”: 1
}
},
„_sursă”: fals,
'câmpuri': [
{
'field': 'titlu'
},
{
'field': 'durata'
},
{
'field': 'evaluare'
},
{
'field': 'tip'
}
],
'fel': [
{
„_doc”: {
'comanda': 'asc'
}
}
]
}'

În mod similar, cererea ar trebui să returneze date similare după cum se arată mai jos:

Concluzie

Prin această postare, ați descoperit cum puteți utiliza interogări SQL pentru a prelua date dintr-un index Elasticsearch existent. De asemenea, ați învățat cum să utilizați translate SQL API pentru a converti o interogare SQL validă într-o solicitare Elasticsearch.