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