W ElasticSearch zapytanie może być tak proste, jak pojedynczy dokument lub duże i złożone wyniki składające się z milionów rekordów.
Ten zwięzły przewodnik nauczy Cię przewijać dokumenty zwrócone z zapytania za pomocą API Scroll.
Warto zauważyć, że przewijanie dokumentów za pomocą API Scroll nie jest zalecane w przypadku wniosków w czasie rzeczywistym. Jest to głównie pomocne w przetwarzaniu rozległych zbiorów dokumentów.
Podstawowe użycie
W tym przykładzie użyjemy indeksu kibana_sample_data_flights. Próbkowane dane można znaleźć na stronie Kibana, aby zacząć.
Załóżmy, że chcemy uzyskać liczbę lotów, w których cena biletu była większa niż 500 i mniej niż 1000, możemy wykonać zapytanie jako:
Get /kibana_sample_data_flights /_search
"zapytanie":
"zakres":
"A":
„GTE”: 500,
„LTE”: 1000,
„Boost”: 2
Po uruchomieniu powyższego żądania powinniśmy uzyskać wszystkie dokumenty w określonym zakresie ceny biletu.
Poniżej znajduje się przykład wyjścia:
Jak widać z powyższego wyjścia, otrzymujemy ponad 7800 wyników w jednym zapytaniu.
Powiedzmy, że chcemy zobaczyć tylko jeden rekord na raz zamiast całego 7844. Możemy to zrobić, używając parametrów z i wielkości, jak pokazano w pytaniu poniżej:
Get /kibana_sample_data_flights /_search
„From”: 0,
„Rozmiar”: 1,
"zapytanie":
"zakres":
„AvgticketPrice”:
„GTE”: 500,
„LTE”: 1000,
„Boost”: 2
W powyższym przykładzie używamy parametru From, który określa, jaki indeks powinniśmy zacząć pobierać rekordy. Ponieważ indeksowanie w kibanie zaczyna się od 0, ustawiamy go jako początkową wartość indeksu.
Parametr rozmiaru ustawia maksymalną liczbę rekordów, które można wyświetlić na stronę.
Przykład wyników jest poniżej:
Jak widać z powyższego wyjścia, otrzymujemy tylko jeden dokument z 7844.
Aby przewinąć do następnego dokumentu, zaczynamy od 1 zamiast 0. Jak:
Get /kibana_sample_data_flights /_search
"od 1,
„Rozmiar”: 1,
"zapytanie":
"zakres":
„AvgticketPrice”:
„GTE”: 500,
„LTE”: 1000,
„Boost”: 2
To odzyska następujący dokument z wyniku wyszukiwania.
Podczas korzystania z parametrów z i wielkości ElasticSearch ograniczy Cię do tylko 10 000 dokumentów.
API Scroll
API Scroll przydaje się w tym momencie. Możemy go użyć do odzyskania obszernego zbioru dokumentów z jednego żądania.
API Scroll wymaga scroll_id, który można uzyskać, określając argument przewijania w żądaniu zapytania.
Argument przewijania musi określić, jak długo kontekst wyszukiwania pozostaje przy życiu.
Zobaczmy, jak go używać w przykładzie.
Pierwszym krokiem jest pobranie scroll_id, co możemy zrobić, przekazując parametr przewijania, a następnie czas trwania kontekstu wyszukiwania.
Post /kibana_sample_data_flights /_search?Scroll = 10 m
„Rozmiar”: 100,
"zapytanie":
"zakres":
„AvgticketPrice”:
„GTE”: 500,
„LTE”: 1000,
„Boost”: 2
W powyższym względzie przykładowym ustawiamy parametr przewijania z kontekstem wyszukiwania 10 minut. Następnie określamy liczbę rekordów do pobrania na stronę i dopasowanie zapytania.
Odpowiedź z powyższego żądania powinna zawierać scroll_id, którego możemy użyć z API Scroll i pierwsze 100 dokumentów pasujących do określonego zapytania.
Aby uzyskać kolejną partię 100 rekordów, używamy interfejsu API Scroll, w tym identyfikatora przewijania z powyższej odpowiedzi.
Get /_search /Scroll
„Scroll”: „10m”,
„Scroll_id”: „fgluy2x1zgvfy29udgv4df91dwlkdxf1zxj5qw5krmv0y2gbfko5wgq3vtbouzvlw”
W powyższym żądaniu określamy, że chcemy użyć interfejsu API Scroll, a następnie kontekstu wyszukiwania. To mówi Elasticsearch, aby odświeżył kontekst wyszukiwania i utrzymał go przy życiu przez 10 minut.
Następnie przekazujemy Scroll_ID, które otrzymujemy z poprzedniego żądania i pobieramy kolejne 100 dokumentów.
Końcowe przemyślenia
API Scroll przydaje się, gdy trzeba pobrać dokumenty przekraczające 10 000. Pomimo jego funkcjonalności interfejs API Scroll ma pewne wady omawiane innymi metodami paginacji, takimi jak Search_after.
Zastanów się nad naszym samouczkiem na temat Paginacji Elasticsearch, aby dowiedzieć się więcej.