Elasticsearch SQL Translate API

Elasticsearch SQL Translate API
W tym poście dowiemy się, jak przetłumaczyć wyszukiwanie SQL na prawidłowe żądanie interfejsu API wyszukiwania ElasticSearch zawierającego pełny język specyficzny dla domeny zapytania oparty na JSON.

Chociaż jest to mały interfejs API, jest to bardzo korzystne narzędzie, szczególnie dla programistów pochodzących z baz danych SQL. Może również zmniejszyć krzywą uczenia się, szybko powiązać zapytania SQL z odpowiednimi zapytaczami wyszukiwania.

Następnie możesz zbadać pełne możliwości interfejsu API wyszukiwania ElasticSearch i obsługiwanych języków zapytań.

Należy pamiętać, że chociaż Elasticsearch obsługuje SQL, zawiera różne ograniczenia.

Składnia zapytania

Poniżej pokazuje składnię interfejsu API tłumaczenia:

Uzyskaj _sql/przetłumacz

request_body

Możesz także wysłać żądanie pocztów do interfejsu API Tłumacz, jak pokazano w poniższej składni:

Post _SQL/Tłumacz

request_body

W zależności od konfiguracji klastra interfejs API może wymagać uprawnień odczytu w indeksie, których dane chcesz zapytać. Możesz także określić zasób docelowy jako alias indeksowy lub strumień danych.

W COBDE request_body możesz określić wszystkie parametry ciała Wyszukaj SQL Wyszukaj. Przeglądaj dokumenty przedstawione w poniższym zasobach, aby dowiedzieć się więcej:

https: // www.elastyczny.co/przewodnik/en/elasticsearch/reference/current/sql-search-api.HTML#SQL-SEARCH-API-REQUEST-BODY

W odpowiedzi zapytanie powinno zwrócić wynik odpowiadający interfejsowi API wyszukiwania z pytaniami danych.

Przykład

Aby najlepiej zilustrować, jak korzystać z tego interfejsu API, założymy, że mamy indeks o nazwie „Netflix” zawierający wszystkie dane o filmach i programach telewizyjnych Netflix.

Załóżmy, że chcemy pobrać pięć najlepszych filmów z indeksu Netflix, który wydaliśmy w roku 2020 i powyżej:

Równoważne zapytanie SQL można wyrazić, jak pokazano poniżej:

Wybierz tytuł, czas trwania, ocena, typ z Netflix gdzie type = „film” i wydanie_year> = 2020

Aby wykonać powyższe wyszukiwanie SQL w ElasticSearch, możemy umieścić je w interfejsie API wyszukiwania SQL, jak pokazano poniżej:

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

„Zapytanie”: „\ n Wybierz tytuł, czas trwania, ocena, typ z„ Netflix ”gdzie type = '\" film' \ '' i wydanie_year> = 2020 \ n "",
„fetch_size”: 5
'

Poprzednie żądanie powinno zapytać o indeks i pobrać dopasowane rekordy. Wyjście zwrotne jest w formacie tekstowym, jak podano poniżej:

Jak widzimy, ElasticSearch zwraca oczekiwane wyniki.

Aby zwrócić dane wyjściowe jako JSON, możemy ustawić format na JSON, jak pokazano poniżej:

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

„Zapytanie”: „\ n Wybierz tytuł, czas trwania, ocena, typ z„ Netflix ”gdzie type = '\"" film' \ '' i wydanie_year> = 2020 \ n "",
„fetch_size”: 5
'

Wyjście:

Konwertuj zapytanie SQL na żądanie wyszukiwania

Aby przekonwertować poprzednie zapytanie SQL w żądanie ElasticSearch, możemy przekazać je do interfejsu API Tłumacz, jak pokazano poniżej:

curl -xget ""http: // localhost: 9200/_sql/tłumacz"" -h ""kbn -xsrf: raportowanie"" -h ""content -typ: application/json"" -d '

„Zapytanie”: „\ n Wybierz tytuł, czas trwania, ocena, typ z„ Netflix ”gdzie type = '\"" film' \ '' i wydanie_year> = 2020 \ n "",
„fetch_size”: 5
'

API powinien przeanalizować wejście SQL i przekonwertować go na prawidłowe żądanie wyszukiwania, jak pokazano na następnym wyjściu:


„Rozmiar”: 5,
""zapytanie"":
„Bool”:
""musieć"": [

""termin"":
""typ"":
„Wartość”: „film”


,

""zakres"":
""rok wydania"":
„GTE”: 2020,
„Boost”: 1



],
„Boost”: 1

,
„_Source”: False,
„Pola”: [

„Pole”: „Tytuł”
,

„Pole”: „Czas trwania”
,

„Pole”: „Ocena”
,

""typ pola""

],
„Sort”: [

„_doc”:
„Zamów”: „ASC”


]

Następnie możesz użyć tego formatu żądania, aby wysłać do interfejsu API wyszukiwania ElasticSearch, jak pokazano poniżej:

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

„Rozmiar”: 5,
""zapytanie"":
„Bool”:
""musieć"": [

""termin"":
""typ"":
„Wartość”: „film”


,

""zakres"":
""rok wydania"":
„GTE”: 2020,
„Boost”: 1



],
„Boost”: 1

,
„_Source”: False,
„Pola”: [

„Pole”: „Tytuł”
,

„Pole”: „Czas trwania”
,

„Pole”: „Ocena”
,

""typ pola""

],
„Sort”: [

„_doc”:
„Zamów”: „ASC”


]
'

Podobnie żądanie powinno zwrócić podobne dane, jak pokazano poniżej:

Wniosek

Za pośrednictwem tego postu odkryłeś, w jaki sposób możesz użyć zapytań SQL do pobierania danych z istniejącego indeksu ElasticSearch. Nauczyłeś się także, jak używać tłumaczenia API SQL do konwersji prawidłowego zapytania SQL na żądanie ElasticSearch.

"