A viabilidade da paginação completa do Elasticsearch

Prefácio

在分布式系统中深度分页

理解为什么深度分页是有问题的,我们可以假设在一个有 5 个主分片的索引中搜索。 当我们请求结果的第一页(结果从 1 到 10 ),每一个分片产生前 10 的结果,并且返回给协调节点,协调节点对 50 个结果排序得到全部结果的前 10 个。

现在假设我们请求第 1000 页--结果从 10001 到 10010 。所有都以相同的方式工作除了每个分片不得不产生前10010个结果以外。 然后协调节点对全部 50050 个结果排序最后丢弃掉这些结果中的 50040 个结果。

可以看到,在分布式系统中,对结果排序的成本随分页的深度成指数上升。这就是 web 搜索引擎对任何查询都不要返回超过 1000 个结果的原因。

Paginação

  • from + size é um
    método de paginação profunda comum. de significa começar na primeira linha e tamanho significa quantos documentos consultar. De é 0 por padrão, o tamanho é 10 por padrão e o tamanho do tamanho não pode exceder a configuração de index.max_result_window, que é 10.000 por padrão.
  • scroll
    gerando um cursor para uma consulta específica scroll_id, uma consulta subsequente só precisa buscar dados do cursor, até que o campo de ocorrências retornado do conjunto de resultados esteja vazio, isso significa o fim do percurso. A geração de scroll_id pode ser entendida como o estabelecimento de um instantâneo histórico temporário, e adições, exclusões, alterações e outras operações subsequentes não afetarão os resultados deste instantâneo.
  • search_after
    fornece um cursor ao vivo para evitar problemas de desempenho que consomem armazenamento e tempo. O último dado consultado na página anterior é usado como condição de pesquisa para o próximo dado. Deve haver um campo globalmente exclusivo para classificar, como o campo de identificação exclusivo da empresa ou o próprio elasticsearch campo _id.
    É adequado para paginação + classificação profunda, porque os dados de cada página dependem dos últimos dados da página anterior, portanto, as solicitações de salto de página não podem ser feitas. E os dados retornados são sempre os mais recentes e a localização dos dados pode mudar durante o processo de paginação.

Análise de prós e contras

Paginação Existe um limite de páginas Se pular página desempenho Resíduos de recursos tempo real Cenários comuns
de + tamanho Sim, limitado por parâmetros, ajustável sim Quanto mais profunda a página, menor o índice de desempenho Quanto mais profunda a página, o aumento exponencial no consumo de recursos tempo real Cenários de pesquisa comuns podem ser atendidos e o número de páginas deve ser limitado
rolagem não não Alto Armazenar em cache os resultados da consulta para a primeira consulta consome muitos recursos e basicamente não há custo nas consultas subsequentes não em tempo real Tarefas de exportação em lote em segundo plano, tarefas de migração de dados
search_after não não no Os resultados da consulta em cache para a primeira consulta consomem mais recursos e os dados subsequentes são recuperados de acordo com os resultados da última consulta tempo real Tarefas em lote com requisitos em tempo real

A proposta final

Pensando: Que tipo de necessidades de negócios você precisa para pesquisar e visualizar mais de 10.000 dados com o elasticsearch? Considere tantas condições quanto possível para filtrar os dados que são realmente necessários

  • A auto-investigação comercial limita o número de páginas. Use o máximo de condições de consulta possível, limite os resultados da consulta a menos de 10.000 e use from + size para consultar com flexibilidade
  • Desempenho e seleção de negócios, o lado comercial restringe o método de paginação. Apenas a próxima página pode ser consultada e a página não pode ser ignorada. Desta forma, search_after pode ser usado para consultar

Acho que você gosta

Origin blog.csdn.net/yml_try/article/details/108648211
Recomendado
Clasificación