Elasticsearch SQL Translate API

Elasticsearch SQL Translate API
In diesem Beitrag lernen wir, wie Sie eine SQL -Suche in eine gültige Elasticsearch -Such -API -Anforderung übersetzen, die eine vollständige Sprache der vollständigen Abfragedomänen enthält, die auf JSON basiert.

Obwohl dies eine kleine API ist, ist es ein sehr vorteilhaftes Instrument, insbesondere für Entwickler aus SQL -Datenbanken. Es kann auch die Lernkurve reduzieren, indem die SQL -Abfragen schnell mit den entsprechenden Suchabfragen in Verbindung gebracht werden.

Sie können dann die vollständigen Funktionen der Elasticsearch -Such -API und der unterstützten Abfragesprachen untersuchen.

Beachten Sie, dass Elasticsearch, obwohl es SQL unterstützt, jedoch verschiedene Einschränkungen enthält.

Abfragesyntax

Das Folgende zeigt die Syntax der Translate -API:

Holen Sie sich _sql/übersetzen

Request_body

Sie können auch eine Postanforderung an die übersetzende API senden, wie in der folgenden Syntax gezeigt:

Post _sql/übersetzen

Request_body

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 Index -Alias ​​oder Datenstrom angeben.

Im Request_Body können Sie alle SQL -Such -API -Anforderungskörperparameter angeben. Erkunden Sie die in der folgenden Ressource bereitgestellten Dokumente, um mehr zu erfahren:

https: // www.elastisch.Co/Guide/en/Elasticsearch/Referenz/Strom/SQL-Search-API.HTML#SQL-Search-API-Request-Body

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

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 TV.

Angenommen, wir möchten die fünf besten Filme aus dem Netflix -Index abholen, den wir im Jahr 2020 und höher veröffentlicht haben:

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

Wählen Sie Titel, Dauer, Bewertung, Typ aus Netflix Wobei Typ = 'Movie' und Release_year> = 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: meldeing "-h" content -type: application/json "-d '

"Abfrage": "\ n Wählen Sie Titel, Dauer, Bewertung, Typ aus" netflix "wob,
"fetch_size": 5
'

Die vorherige Anfrage sollte den Index abfragen und die Matching -Datensätze abrufen. Die Rückgabeausgabe erfolgt in 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 einstellen:

curl -xget "http: // localhost: 9200/_sql?format = json "-h" kbn -xsrf: meldeing "-h" content -type: application/json "-d '

"Abfrage": "\ n Wählen Sie Titel, Dauer, Bewertung, Typ aus" netflix "wob,
"fetch_size": 5
'

Ausgang:

Konvertieren Sie die SQL -Abfrage in die Suchanforderung

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

curl -xget "http: // localhost: 9200/_sql/translate" -h "kbn-xsrf: meldung" -h "content -type: application/json" -d '

"Abfrage": "\ n Wählen Sie Titel, Dauer, Bewertung, Typ aus" netflix "wob,
"fetch_size": 5
'

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


"Größe 5,
"Anfrage":
"bool":
"muss": [

"Begriff":
"Typ":
"Wert": "Film"


,

"Bereich":
"Erscheinungsjahr":
"gte": 2020,
"Boost": 1



],
"Boost": 1

,
"_Source": Falsch,
"Felder": [

"Feld": "Titel"
,

"Feld": "Dauer"
,

"Feld": "Bewertung"
,

"Feldtyp"

],
"sortieren": [

"_doc":
"Reihenfolge": "ASC"


]

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

curl -xpost "http: // localhost: 9200/netflix/_search" -h "kbn -xsrf: meldung" -h "content -type: application/json" -d '

"Größe 5,
"Anfrage":
"bool":
"muss": [

"Begriff":
"Typ":
"Wert": "Film"


,

"Bereich":
"Erscheinungsjahr":
"gte": 2020,
"Boost": 1



],
"Boost": 1

,
"_Source": Falsch,
"Felder": [

"Feld": "Titel"
,

"Feld": "Dauer"
,

"Feld": "Bewertung"
,

"Feldtyp"

],
"sortieren": [

"_doc":
"Reihenfolge": "ASC"


]
'

In ähnlicher Weise sollte die Anforderung ähnliche Daten wie unten gezeigt zurückgeben:

Abschluss

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