Hvordan blar du i Elasticsearch?

Hvordan blar du i Elasticsearch?

I Elasticsearch kan et søkes spørring være så enkelt som et enkelt dokument eller store og komplekse resultater som består av millioner av poster.

Denne konsise guiden vil lære deg å bla gjennom dokumentene som er returnert fra et søkesøk ved hjelp av Scroll API.

Det er bra å merke seg at rulling gjennom dokumenter ved hjelp av Scroll API ikke anbefales for sanntidsforespørsler. Det er hovedsakelig nyttig å behandle omfattende samlinger av dokumenter.

Grunnleggende bruk

I dette eksemplet vil vi bruke Kibana_Sample_Data_Flights Index. Du kan finne de samplede dataene på Kibana komme i gang side.

Anta at vi ønsker å få antall flyvninger der billettprisen var større enn 500 og mindre enn 1000, vi kan utføre et spørsmål som:

Få /kibana_sample_data_flights /_search

"spørring":
"område":
"A":
"GTE": 500,
"LTE": 1000,
"Boost": 2



Når vi har kjørt den ovennevnte forespørselen, bør vi få alle dokumentene innenfor det spesifiserte området for billettprisen.

Nedenfor er et eksempelutgang:

Som du ser fra output ovenfor, får vi over 7800 resultater i en enkelt spørring.

La oss si at vi bare vil se en post om gangen i stedet for hele 7844. Vi kan gjøre dette ved å bruke fra og størrelsesparametere som vist i spørringen nedenfor:

Få /kibana_sample_data_flights /_search

"fra": 0,
"Størrelse": 1,
"spørring":
"område":
"AvgticketPrice":
"GTE": 500,
"LTE": 1000,
"Boost": 2



I eksemplet ovenfor bruker vi FRA -parameteren som definerer hvilken indeks vi bør begynne å hente postene. Siden indeksering i Kibana begynner på 0, setter vi den som den første indeksverdien.

Størrelsesparameteren angir maksimalt antall poster som skal vises per side.

Et eksempel på resultatene er nedenfor:

Som du ser fra utdataene ovenfor, får vi bare ett dokument ut av totalt 7844.

For å bla til neste dokument, starter vi fra 1 i stedet for 0. Som:

Få /kibana_sample_data_flights /_search

"fra": 1,
"Størrelse": 1,
"spørring":
"område":
"AvgticketPrice":
"GTE": 500,
"LTE": 1000,
"Boost": 2



Dette vil hente følgende dokument fra søkeresultatet.

Når du bruker fra og størrelsesparametere, vil Elasticsearch begrense deg til bare 10.000 dokumenter.

Scroll API

Scroll API kommer godt med på dette tidspunktet. Vi kan bruke den til å hente en omfattende samling av dokumenter fra en enkelt forespørsel.

Scroll API krever en scroll_id som du kan få ved å spesifisere rulleargumentet i spørringsforespørselen.

Rullargumentet må spesifisere hvor lenge søkekonteksten holder seg i live.

La oss se hvordan vi bruker det i et eksempel.

Det første trinnet er å hente Scroll_id, som vi kan gjøre ved å passere Scroll -parameteren etterfulgt av varigheten av søkekonteksten.

POST /KIBANA_SAMPLE_DATA_FLIGHTS /_SEARCH?rulle = 10m

"Størrelse": 100,
"spørring":
"område":
"AvgticketPrice":
"GTE": 500,
"LTE": 1000,
"Boost": 2



I eksempelforespørselen ovenfor setter vi rulleparameteren med en søkekontekst på 10 minutter. Vi spesifiserer deretter antall poster som skal hentes per side og spørringen for å matche.

Responsen fra forespørselen ovenfor skal inneholde en Scroll_id som vi kan bruke med Scroll API og de første 100 dokumentene som samsvarer med den spesifiserte spørringen.

For å få neste gruppe på 100 poster, bruker vi Scroll API, inkludert rulle -ID fra ovennevnte svar.

Få /_Search /Scroll

"Scroll": "10m",
"Scroll_id": "Fgluy2x1zgvfy29udgv4df91dwlkdxf1zxj5qw5krmv0y2gbfko5wgq3vtBouzvlw"

I forespørselen over spesifiserer vi at vi ønsker å bruke Scroll API etterfulgt av søkekonteksten. Dette ber Elasticsearch om å oppdatere søkekonteksten og holde den i live i 10 minutter.

Deretter passerer vi Scroll_id vi får fra forrige forespørsel og henter de påfølgende 100 dokumentene.

Siste tanker

Scroll API kommer godt med når du trenger å hente dokumenter mer enn 10.000. Til tross for sin funksjonalitet, har Scroll API noen ulemper adressert av andre paginasjonsmetoder som Search_after.

Tenk på vår opplæring om Elasticsearch Pagination for å lære mer.