In Elasticsearch, una query di ricerca può essere semplice come un singolo documento o risultati grandi e complessi costituiti da milioni di record.
Questa guida concisa ti insegnerà a scorrere i documenti restituiti da una query di ricerca utilizzando l'API di Scroll.
È bene notare che i documenti di scorrimento attraverso i documenti utilizzando l'API Scroll non sono consigliati per le richieste in tempo reale. È principalmente utile per l'elaborazione di ampie raccolte di documenti.
Uso di base
In questo esempio, useremo l'indice kibana_sample_data_flights. È possibile trovare i dati campionati sulla pagina di inizio Kibana.
Supponiamo di voler ottenere il numero di voli in cui il prezzo del biglietto era superiore a 500 e meno di 1000, possiamo eseguire una domanda come:
Get /kibana_sample_data_flights /_search
"query":
"allineare":
"UN":
"GTE": 500,
"LTE": 1000,
"Boost": 2
Una volta eseguita la richiesta di cui sopra, dovremmo ottenere tutti i documenti nell'intervallo specificato del prezzo del biglietto.
Di seguito è riportato un output di esempio:
Come puoi vedere dall'output sopra, otteniamo oltre 7800 risultati in una singola query.
Diciamo che vogliamo vedere solo un record alla volta invece dell'intero 7844. Possiamo farlo usando i parametri da e dimensioni come mostrato nella query seguente:
Get /kibana_sample_data_flights /_search
"da": 0,
"dimensione": 1,
"query":
"allineare":
"Avgticketprice":
"GTE": 500,
"LTE": 1000,
"Boost": 2
Nell'esempio sopra, utilizziamo il parametro che definisce quale indice dovremmo iniziare a recuperare i record. Poiché l'indicizzazione in kibana inizia a 0, lo impostiamo come valore dell'indice iniziale.
Il parametro di dimensioni imposta il numero massimo di record da mostrare per pagina.
Un esempio dei risultati è di seguito:
Come puoi vedere dall'output sopra, otteniamo solo un documento su un totale di 7844.
Per scorrere al documento successivo, iniziamo da 1 anziché da 0. COME:
Get /kibana_sample_data_flights /_search
"da": 1,
"dimensione": 1,
"query":
"allineare":
"Avgticketprice":
"GTE": 500,
"LTE": 1000,
"Boost": 2
Ciò recupererà il seguente documento dal risultato della ricerca.
Quando si utilizza i parametri da e dimensioni, Elasticsearch ti limiterà a soli 10.000 documenti.
L'API di scorrimento
L'API di Scroll è utile a questo punto. Possiamo usarlo per recuperare una vasta raccolta di documenti da un'unica richiesta.
L'API Scroll richiede uno scroll_id che è possibile ottenere specificando l'argomento Scroll nella richiesta di query.
L'argomento Scroll deve specificare per quanto tempo il contesto di ricerca rimane in vita.
Vediamo come usarlo in un esempio.
Il primo passo è quello di recuperare scroll_id, cosa che possiamo fare passando il parametro Scroll seguito dalla durata del contesto di ricerca.
Post /kibana_sample_data_flights /_search?Scroll = 10m
"dimensione": 100,
"query":
"allineare":
"Avgticketprice":
"GTE": 500,
"LTE": 1000,
"Boost": 2
Nella richiesta di esempio sopra, impostiamo il parametro Scroll con un contesto di ricerca di 10 minuti. Quindi specifichiamo il numero di record da recuperare per pagina e la query da abbinare.
La risposta dalla richiesta sopra dovrebbe includere uno scroll_id che possiamo utilizzare con API Scroll e i primi 100 documenti che corrispondono alla query specificata.
Per ottenere il prossimo lotto di 100 record, utilizziamo l'API Scroll, incluso l'ID Scroll dalla risposta sopra.
Get /_search /scroll
"Scroll": "10m",
"Scroll_id": "fgluy2x1zgvfy29udgv4df91dwlkdxf1zxj5qw5krmv0y2gbfko5wgq3vtbouzvlw"
Nella richiesta sopra, specifichiamo che vogliamo utilizzare l'API Scroll seguita dal contesto di ricerca. Questo dice a Elasticsearch di aggiornare il contesto di ricerca e tenerlo in vita per 10 minuti.
Successivamente, passiamo a scroll_id che otteniamo dalla richiesta precedente e recupiamo i successivi 100 documenti.
Pensieri finali
L'API Scroll è utile quando è necessario recuperare i documenti più di 10.000. Nonostante la sua funzionalità, l'API Scroll ha alcuni svantaggi affrontati da altri metodi di paginazione come Search_After.
Considera il nostro tutorial sulla impaginazione di Elasticsearch per saperne di più.