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:
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 >= 2020Pentru 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.