ElasticSearch--deep paging问题

语法:GET _search?size=3&from=1

  • size:显示应该返回的结果数量,默认是10。
  • from:显示查询数据的偏移量,即应该跳过的初始结果数量,默认是0。
  • deep paging问题

当需要分页返回的时候,每个shard都需要返回给 coordinate node的数据量为from+size条数据,coordinate node会收到number_of_shard*(from+size)条数据,然后进行排序,最后取出分页的数据。如果from+size是一个很大的数字的话,就会使用大量的内存接收数据,占用大量的cpu进行排序,造成性能的下降。所以需要尽量控制搜索的深度。

如果一个索引的分片数越多,需要汇总的数据就会成倍增长 ,可以看到分布式系统对结果排序分布的成本随深度呈指数上升,最重要的两个影响维度是分页深度和shard数量。这种重量级的查询,极有可能拖垮整个Elasticsearch集群,所以说搜索引擎对任何查询都不要返回超过1000个结果

你可能感兴趣的:(ElasticSearch)