Elasticsearch SQL Translate-API

Elasticsearch Sql Translate Api



In diesem Beitrag erfahren Sie, wie Sie eine SQL-Suche in eine gültige Elasticsearch-Such-API-Anforderung übersetzen, die die vollständige domänenspezifische Abfragesprache auf der Grundlage von JSON enthält.

Obwohl dies eine kleine API ist, ist sie ein sehr nützliches Tool, insbesondere für Entwickler, die von SQL-Datenbanken kommen. Es kann auch die Lernkurve verkürzen, indem es die SQL-Abfragen schnell mit den entsprechenden Suchanfragen in Beziehung setzt.

Anschließend können Sie alle Funktionen der Elasticsearch-Such-API und der unterstützten Abfragesprachen erkunden.







Es ist zu beachten, dass Elasticsearch zwar SQL unterstützt, jedoch verschiedene Einschränkungen enthält.



Abfragesyntax

Das Folgende zeigt die Syntax der Übersetzungs-API:



GET _sql/translate

{

Anfragetext

}

Sie können auch eine Post-Anfrage an die Übersetzungs-API senden, wie in der folgenden Syntax gezeigt:





POST _sql/translate

{

Anfragetext

}

Abhängig von Ihrer Clusterkonfiguration erfordert die API möglicherweise Leseberechtigungen für den Index, dessen Daten Sie abfragen möchten. Sie können die Zielressource auch als Indexalias oder Datenstrom angeben.

In „request_body“ können Sie alle Parameter des Anforderungstexts der SQL-Such-API angeben. Erkunden Sie die in der folgenden Ressource bereitgestellten Dokumente, um mehr zu erfahren:



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

Als Antwort sollte die Abfrage das der Such-API entsprechende Ergebnis mit den abgefragten Daten zurückgeben.

Beispiel

Um die Verwendung dieser API am besten zu veranschaulichen, gehen wir davon aus, dass wir einen Index namens „Netflix“ haben, der alle Daten zu Netflix-Filmen und Fernsehsendungen enthält.

Angenommen, wir möchten die fünf besten Filme aus dem Netflix-Index abrufen, die wir im Jahr 2020 und darüber veröffentlicht haben:

Die äquivalente SQL-Abfrage kann wie folgt ausgedrückt werden:

WÄHLEN Sie Titel, Dauer, Bewertung, Typ VON Netflix WO Typ = 'Film' UND Erscheinungsjahr >= 2020

Um die obige SQL-Suche in Elasticsearch auszuführen, können wir sie wie unten gezeigt in die SQL-Such-API einfügen:

curl -XGET „http://localhost:9200/_sql?format=txt“ -H 'kbn-xsrf: Berichterstattung' -H „Inhaltstyp: application/json“ -d '

{

'Anfrage': ' \n WÄHLEN Sie Titel, Dauer, Bewertung, Typ FROM 'netflix' WO Typ = '
\ '' Film ' \' ' UND Erscheinungsjahr >= 2020 \n ',

'
fetch_size ': 5

}'

Die vorherige Anforderung sollte den Index abfragen und die übereinstimmenden Datensätze abrufen. Die Rückgabeausgabe erfolgt im Textformat wie unten angegeben:

Wie wir sehen können, gibt Elasticsearch die erwartete Ausgabe zurück.

Um die Ausgabe als JSON zurückzugeben, können wir das Format wie unten gezeigt auf JSON setzen:

curl -XGET 'http://localhost:9200/_sql?format=json' -H 'kbn-xsrf: Berichterstattung' -H „Inhaltstyp: application/json“ -d '

{

'Anfrage': ' \n WÄHLEN Sie Titel, Dauer, Bewertung, Typ FROM 'netflix' WO Typ = '
\ '' Film ' \' ' UND Erscheinungsjahr >= 2020 \n ',

'
fetch_size ': 5

}'

Ausgabe:

Konvertieren Sie eine SQL-Abfrage in eine Suchanfrage

Um die vorherige SQL-Suchanfrage in eine Elasticsearch-Anfrage umzuwandeln, können wir sie wie unten gezeigt an die Translate-API übergeben:

curl -XGET 'http://localhost:9200/_sql/translate' -H 'kbn-xsrf: Berichterstattung' -H „Inhaltstyp: application/json“ -d '

{

'Anfrage': ' \n WÄHLEN Sie Titel, Dauer, Bewertung, Typ FROM 'netflix' WO Typ = '
\ '' Film ' \' ' UND Erscheinungsjahr >= 2020 \n ',

'
fetch_size ': 5

}'

Die API sollte die SQL-Eingabe analysieren und in eine gültige Suchanfrage konvertieren, wie in der folgenden Ausgabe gezeigt:

{
'Größe' : 5 ,
'Anfrage' : {
'boolesch' : {
'muss' : [
{
'Begriff' : {
'Typ' : {
'Wert' : 'Film'
}
}
},
{
'Angebot' : {
'Erscheinungsjahr' : {
'gte' : 2020 ,
'Schub' : 1
}
}
}
],
'Schub' : 1
}
},
'_Quelle' : FALSCH,
'Felder' : [
{
'aufstellen' : 'Titel'
},
{
'aufstellen' : 'Dauer'
},
{
'aufstellen' : 'Bewertung'
},
{
'aufstellen' : 'Typ'
}
],
'Sortieren' : [
{
'_doc' : {
'bestellen' : 'aufsteigen'
}
}
]
}

Sie können dann dieses Anforderungsformat verwenden, um es an die Elasticsearch-Such-API zu senden, wie unten gezeigt:

curl -XPOST 'http://localhost:9200/netflix/_search' -H 'kbn-xsrf: Berichterstattung' -H „Inhaltstyp: application/json“ -d '
{
'Größe 5,
'Anfrage': {
'boolesch': {
'muss': [
{
'Begriff': {
'Typ': {
'Wert': 'Film'
}
}
},
{
'Angebot': {
'Erscheinungsjahr': {
'gte': 2020,
„Auftrieb“: 1
}
}
}
],
„Auftrieb“: 1
}
},
'_source': false,
'Felder': [
{
'Feld': 'Titel'
},
{
'Feld': 'Dauer'
},
{
'Feld': 'Bewertung'
},
{
'Feldtyp'
}
],
'sortieren': [
{
'_doc': {
'order': 'asc'
}
}
]
}'

Ebenso sollte die Anfrage ähnliche Daten wie unten gezeigt zurückgeben:

Fazit

In diesem Beitrag haben Sie entdeckt, wie Sie SQL-Abfragen verwenden können, um Daten aus einem vorhandenen Elasticsearch-Index abzurufen. Sie haben auch gelernt, wie Sie die SQL-Übersetzungs-API verwenden, um eine gültige SQL-Abfrage in eine Elasticsearch-Anforderung umzuwandeln.