Elasticsearch SQL Translate API

Elasticsearch Sql Translate Api



W tym poście dowiemy się, jak przetłumaczyć wyszukiwanie SQL na prawidłowe żądanie API wyszukiwania Elasticsearch zawierające pełny język Query Domain Specific Language oparty na JSON.

Mimo, że jest to niewielkie API, jest to bardzo korzystne narzędzie, szczególnie dla programistów wywodzących się z baz danych SQL. Może również zredukować krzywą uczenia się poprzez szybkie powiązanie zapytań SQL z odpowiadającymi im zapytaniami wyszukiwania.

Następnie możesz poznać 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 przedstawiono składnię interfejsu API tłumaczenia:



POBIERZ _sql/tłumacz

{

request_body

}

Możesz również wysłać żądanie opublikowania do interfejsu API tłumaczenia, jak pokazano w następującej składni:





POST _sql/tłumacz

{

request_body

}

W zależności od konfiguracji klastra interfejs API może wymagać uprawnień do odczytu indeksu, którego dane chcesz przeszukiwać. Możesz również określić zasób docelowy jako alias indeksu lub strumień danych.

W request_body można określić wszystkie parametry treści żądania interfejsu API wyszukiwania SQL. Zapoznaj się z dokumentami dostępnymi w następującym zasobach, aby dowiedzieć się więcej:



https://www.elastic.co/guide/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 żądanymi danymi.

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óre opublikowaliśmy w roku 2020 i nowszych:

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

SELECT tytuł, czas trwania, ocena, typ FROM netflix WHERE typ = 'Film' ORAZ rok wydania >= 2020

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

zwijanie -XGET „http://localhost:9200/_sql?format=txt” -H 'kbn-xsrf: raportowanie' -H „Typ treści: aplikacja/json” -d '

{

'zapytanie': ' \n SELECT tytuł, czas trwania, ocena, typ FROM 'netflix' WHERE typ = '
\ '' Film ' \' ' ORAZ rok wydania >= 2020 \n ',

'
pobierz_rozmiar ': 5

}'

Poprzednie żądanie powinno wysłać zapytanie do indeksu i pobrać pasujące rekordy. Zwracane dane wyjściowe są w formacie tekstowym, jak podano poniżej:

Jak widać Elasticsearch zwraca oczekiwany wynik.

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

zwijanie -XGET „http://localhost:9200/_sql?format=json” -H 'kbn-xsrf: raportowanie' -H „Typ treści: aplikacja/json” -d '

{

'zapytanie': ' \n SELECT tytuł, czas trwania, ocena, typ FROM 'netflix' WHERE typ = '
\ '' Film ' \' ' ORAZ rok wydania >= 2020 \n ',

'
pobierz_rozmiar ': 5

}'

Wyjście:

Konwertuj zapytanie SQL na żądanie wyszukiwania

Aby przekonwertować poprzednie zapytanie SQL na żądanie Elasticsearch, możemy przekazać je do translatora API, jak pokazano poniżej:

zwijanie -XGET „http://localhost:9200/_sql/translate” -H 'kbn-xsrf: raportowanie' -H „Typ treści: aplikacja/json” -d '

{

'zapytanie': ' \n SELECT tytuł, czas trwania, ocena, typ FROM 'netflix' WHERE typ = '
\ '' Film ' \' ' ORAZ rok wydania >= 2020 \n ',

'
pobierz_rozmiar ': 5

}'

Interfejs API powinien przeanalizować wejściowe dane wejściowe SQL i przekonwertować je na prawidłowe żądanie wyszukiwania, jak pokazano w następującym wyniku:

{
'rozmiar' : 5 ,
'zapytanie' : {
„bzik” : {
'musi' : [
{
'termin' : {
'rodzaj' : {
'wartość' : 'Film'
}
}
},
{
'zasięg' : {
'rok wydania' : {
'gte' : 2020 ,
'zwiększyć' : 1
}
}
}
],
'zwiększyć' : 1
}
},
'_źródło' : fałszywy,
'pola' : [
{
'pole' : 'tytuł'
},
{
'pole' : 'Trwanie'
},
{
'pole' : 'ocena'
},
{
'pole' : 'rodzaj'
}
],
'sortować' : [
{
„_doc” : {
'zamówienie' : „rosnąć”
}
}
]
}

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

zwijanie -XPOST „http://localhost:9200/netflix/_search” -H 'kbn-xsrf: raportowanie' -H „Typ treści: aplikacja/json” -d '
{
'rozmiar': 5,
'zapytanie': {
'bool': {
'musi': [
{
'termin': {
'rodzaj': {
'wartość': 'Film'
}
}
},
{
'zasięg': {
'rok wydania': {
'gte': 2020,
'doładowanie': 1
}
}
}
],
'doładowanie': 1
}
},
„_source”: fałszywe,
'pola': [
{
'pole': 'tytuł'
},
{
'pole': 'czas trwania'
},
{
'pole': 'ocena'
},
{
'typ pola'
}
],
'sortuj': [
{
'_doc': {
'zamówienie': 'rosn.'
}
}
]
}'

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

Wniosek

W tym poście odkryłeś, jak można używać zapytań SQL do pobierania danych z istniejącego indeksu Elasticsearch. Poznałeś również, jak używać interfejsu API translatora SQL do konwertowania prawidłowego zapytania SQL na żądanie Elasticsearch.