【ELK】检索效率优化

查询(query)与过滤(filter)的区别

  

 

如下为检索优化方案(部分内容有重复)

https://www.elastic.co/guide/en/elasticsearch/reference/current/tune-for-indexing-speed.html

使用bulk请求

  

 

使用多线程发送数据

   

使用自增id

   

 

优化索引性能

   

优化检索性能

  

 

 优化索引配置

   

 

 用过滤提高查询效率

  

采用scroll API返回大量数据,不使用from+size

  当返回大量数据时,先查后取的过程支持用from和size参数分页,但有限制。结果集在返回之前需要在每个分片上先进行排序,然后合并之后再排序输出。使用足够大的from值,排序过程可能会变得非常沉重,使用大量的CPU、内存和带宽。因此,强烈建议不要使用深分页。

  为了避免深度翻页,推荐采用scroll查询返回大量数据。scroll查询可以用来对Elasticsearch有效地执行大批量的文档查询,而又不用付出深度分页那种代价。scroll查询允许我们先做查询初始化,然后再批量地拉取结果。

避免深分页查询

  ES集群的分页查询支持from和size参数,查询的时候,每个分片必须构造一个长度为from+size的优先队列,然后回传到网关节点,网关节点再对这些优先队列进行排序找到正确的size个文档。

  假设在一个有6个主分片的索引中,from为10000,size为10,每个分片必须产生10010个结果,在网关节点中汇聚合并60060个结果,最终找到符合要求的10个文档。

  由此可见,当from足够大的时候,就算不发生OOM,也会影响到CPU和带宽等,从而影响到整个集群的性能。所以应该避免深分页查询,尽量不去使用。

posted @ 2023-01-14 12:34  飞翔在天  阅读(80)  评论(0编辑  收藏  举报