Como você rola no Elasticsearch?

Como você rola no Elasticsearch?

No Elasticsearch, uma consulta de pesquisa pode ser tão simples quanto um único documento ou resultados grandes e complexos que consistem em milhões de registros.

Este guia conciso ensinará você a percorrer os documentos retornados de uma consulta de pesquisa usando a API de rolagem.

É bom observar que a rolagem através dos documentos usando a API de rolagem não é recomendada para solicitações em tempo real. É principalmente útil para processar coleções extensas de documentos.

Uso básico

Neste exemplo, usaremos o Índice Kibana_sample_data_flights. Você pode encontrar os dados amostrados na página Kibana para iniciar.

Suponha que queremos obter o número de voos em que o preço do ingresso foi superior a 500 e menos de 1000, podemos realizar uma consulta como:

Get /kibana_sample_data_flights /_search

"consulta":
"faixa":
"A":
"GTE": 500,
"LTE": 1000,
"Boost": 2



Depois de executar a solicitação acima, devemos obter todos os documentos dentro do intervalo especificado do preço do ingresso.

Abaixo está um exemplo de saída:

Como você pode ver na saída acima, obtemos mais de 7800 resultados em uma única consulta.

Digamos que queremos apenas ver um registro de cada vez, em vez do 7844 inteiro. Podemos fazer isso usando os parâmetros de tamanho e tamanho, conforme mostrado na consulta abaixo:

Get /kibana_sample_data_flights /_search

"de": 0,
"Tamanho": 1,
"consulta":
"faixa":
"Avgticketprice":
"GTE": 500,
"LTE": 1000,
"Boost": 2



No exemplo acima, usamos o parâmetro do parâmetro que define qual índice devemos começar a buscar os registros. Desde que a indexação em Kibana começa em 0, definimos como o valor inicial do índice.

O parâmetro de tamanho define o número máximo de registros a serem exibidos por página.

Um exemplo dos resultados está abaixo:

Como você pode ver na saída acima, obtemos apenas um documento de um total de 7844.

Para rolar para o próximo documento, começamos de 1 em vez de 0. Como:

Get /kibana_sample_data_flights /_search

"a partir de 1,
"Tamanho": 1,
"consulta":
"faixa":
"Avgticketprice":
"GTE": 500,
"LTE": 1000,
"Boost": 2



Isso recuperará o seguinte documento do resultado da pesquisa.

Ao usar os parâmetros de do e tamanho, o Elasticsearch o limitará a apenas 10.000 documentos.

A API de rolagem

A API de rolagem é útil neste momento. Podemos usá -lo para recuperar uma extensa coleção de documentos de uma única solicitação.

A API de roll requer um scroll_id que você pode obter especificando o argumento de rolagem na solicitação de consulta.

O argumento de rolagem deve especificar quanto tempo o contexto de pesquisa permanece vivo.

Vamos ver como usá -lo em um exemplo.

O primeiro passo é buscar o scroll_id, o que podemos fazer ao passar no parâmetro de rolagem seguido pela duração do contexto de pesquisa.

Post /kibana_sample_data_flights /_search?rolagem = 10m

"Tamanho": 100,
"consulta":
"faixa":
"Avgticketprice":
"GTE": 500,
"LTE": 1000,
"Boost": 2



Na solicitação de exemplo acima, definimos o parâmetro de rolagem com um contexto de pesquisa de 10 minutos. Em seguida, especificamos o número de registros para recuperar por página e a consulta para corresponder.

A resposta da solicitação acima deve incluir um scroll_id que possamos usar com a API de rolagem e os 100 primeiros documentos que correspondem à consulta especificada.

Para obter o próximo lote de 100 registros, usamos a API de rolagem, incluindo o ID de rolagem da resposta acima.

Get /_search /roll

"Scroll": "10m",
"scroll_id": "fgluy2x1zgvfy29udgv4df91dwlkdxf1zxj5qw5krmv0y2gbfko5wgq3vtbouzvlw"

Na solicitação acima, especificamos que queremos usar a API de rolagem seguida pelo contexto de pesquisa. Isso diz ao Elasticsearch para atualizar o contexto de pesquisa e mantê -lo vivo por 10 minutos.

Em seguida, passamos pelo scroll_id que obtemos da solicitação anterior e recuperamos os 100 documentos subsequentes.

Pensamentos finais

A API de rolagem é útil quando você precisa recuperar documentos mais de 10.000. Apesar de sua funcionalidade, a API de rolagem tem algumas desvantagens abordadas por outros métodos de paginação, como Search_after.

Considere nosso tutorial sobre a paginação do Elasticsearch para saber mais.