全文检索 ES max_result_window 为什么默认是 10000

全文检索 ES max_result_window 为什么默认是 10000

max_result_window是分页返回的最大数值,因为ES是分布式的,数据散落在各个节点,当你查询分页数据的时候,比如每页500条数据,那么需要在每个Shard先进行排序,取前500条数据,最后把每个Shard的数据在JVM中汇总,再次排序,最后取前500。max_result_window本身是对JVM的一种保护,通过设定一个合理的阈值,避免初学者分页查询时由于单页数据过而导致OOM。很多人会告诉你如果想要增加单页数据的上限,放开这个参数就行,但是如果你不知道这个参数的意义,那么就会导致频分的内存溢出而且很难找到原因,设置一个合理的大小是需要通过你的各项参数来确定的,比如你用户量、数据量、物理内存的大小等等,通过监控数据和分析各项指标从而确定一个最佳值,并非越大约好。JVM不能超过物理内存的一半。

结合了性能和一般人的需求而设定的一个默认值而已。太大浪费,太小不够。