ElasticSearch的search.max_buckets值1000限制问题
环境:ElasticSearch6.7
问题描述:
{ "error": { "root_cause": [], "type": "search_phase_execution_exception", "reason": "", "phase": "fetch", "grouped": true, "failed_shards": [], "caused_by": { "type": "too_many_buckets_exception", "reason": "Trying to create too many buckets. Must be less than or equal to: [10000] but was [10001]. This limit can be set by changing the [search.max_buckets] cluster level setting.", "max_buckets": 10000 } }, "status": 503 }
设置:这是6.x版本才有的特性,目的:限制大批量聚合操作,规避性能风险。
解决方案:setting里设置:search.max_buckets
问题分析:
这是因为查询结果在分片上找到的条目超过了限定的10000个,官网限制在10000是为了其性能考虑的。需要调大search.max_buckets这个参数。我们先来做如下一个测试:
测试
1、前提: search.max_buckets: 3
PUT /_cluster/settings
{"persistent": {"search.max_buckets": 3}}
2、插入了"A",“B”,“C”,“D” 4条数据
PUT /testBucket/_doc/1
{"term":"A"}
PUT /testBucket/_doc/2
{"term":"B"}
PUT /testBucket/_doc/3
{"term":"C"}
PUT /testBucket/_doc/4
{"term":"D"}
要分两种情况来说明:
2.1、 索引只有一个分片(分片可以自己在setting设置,)
这时候不管你设不设size,哪怕size=1都会报错!
原因就是上面说的那个,因为它在这个分片上找到的条目超过了限定的3个(实际有4个)
POST /testBucket/_search
{"aggs":{"term":{"terms":{"field":"term","size":2}}}
2.2、 如果这个索引有5个分片,数据分散在各个分片上面
index shard prirep state docs store ip node
a 1 p STARTED 1 3kb 127.0.0.1 es0
a 3 p STARTED 1 3kb 127.0.0.1 es0
a 4 p STARTED 1 3kb 127.0.0.1 es0
a 2 p STARTED 0 208b 127.0.0.1 es0
a 0 p STARTED 1 3kb 127.0.0.1 es0
这时如果你设size=2,就不会报错。
因为还没有等它找完全部分片,他就找到了你想要的2个,就返回了。
如果你不设size,或者设一个大值size=10,它就必须找完全部分片,
这时就会遇到限定3,就会报错
所以这和你的数据在分片上的分布有关,
解决办法还是加大search.max_buckets
所以最初问题的解决方法是:
PUT /_cluster/settings
{"persistent": {"search.max_buckets": 20000}}
如果还不够,你你把它调大到1000000000应该是可以了( ﹁ ﹁ ) ~→
官网地址:
https://www.elastic.co/guide/en/elasticsearch/reference/master/search-aggregations-bucket.html
相关讨论:https://github.com/elastic/elasticsearch/pull/27581
ElasticSearch的search.max_buckets值1000限制问题相关推荐
- elasticsearch:调用接口设置search.max_buckets的值
elasticsearch:调用接口设置search.max_buckets的值 public class ElasticsearchBucketsTest {private static final ...
- ElasticSearch利用Search After解决深度分页问题
ElasticSearch利用Search After解决深度分页问题 1.ElasticSearch常见分页 2.ElasticSearch深度分页问题 3.ElasticSearch深度分页问题的 ...
- python search返回值_python正则表达式--match search方法
1.re.match函数 re.match 尝试从字符串的起始位置匹配一个模式,如果不是起始位置匹配成功的话,match()就返回None. (1)函数语法: re.match(pattern,str ...
- 【JavaScript编程】window.location.search 返回值为空
一.Location 对象 window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面. 二.属性hash和search的区别 属性 描述 location.h ...
- 解决ES search.max_buckets参数问题
Trying to create too many buckets. Must be less than or equal to: [65535] but was [65536]. This limi ...
- Elasticsearch之search搜索入门
1. 搜索语法入门 1.1query string search 无条件搜索所有 GET /book/_search {"took" : 969,"timed_out&q ...
- elasticsearch 深入 —— Search After实时滚动查询
Search After 一般的分页需求我们可以使用form和size的方式实现,但是这种分页方式在深度分页的场景下应该是要避免使用的.深度分页会随着请求的页次增加,所消耗的内存和时间的增长也是成比例 ...
- Elasticsearch(五)----search搜索详解
一.字符串查询(query string search) 1.全搜索 timeout参数:是超时时长定义.代表每个节点上的每个shard执行搜索时最多耗时多久.不会影响响应的正常返回.只会影响返回响应 ...
- Elasticsearch之Search API
Search API 实现对es中存储的数据进行查询分析,endpoint为 _search,如下图所示: 查询主要有两种形式 - URI Search - 操作简便,方便通过命令行测试 - 仅包含部 ...
最新文章
- Ubuntu安装nodeJS
- 【实习项目记录】(一)加密算法MD5和RSA
- 【错误记录】编译 Linux 内核报错 ( fatal error: openssl/opensslv.h: No such file or directory )
- Struts2 随笔1
- Oracle 数据恢复指导具体解释
- boost::fusion::erase用法的测试程序
- .Net Core和Jexus配置HTTPS服务
- 三位数除以两位数怎么算竖式_青岛版三年级上册数学5.6三位数除以一位数(最高位商后有余数)微课知识点精讲+练习...
- ubuntu下定时任务的执行
- centos 增加分区容量
- DeepWalk: Online Learning of Social Representations-2
- 《具体数学》学习建议
- 香农编码的gui编码_编码香农编码
- plist序列帧合图导出单独的图片
- php txt投票功能,php查询操作实现投票功能
- STM32F103ZET6+TJA1050 HAL CAN通讯笔记
- 使用tushare获取股票历史交易数据
- 51NOD 1631 小鲨鱼在51nod小学 区间线段树
- 百度快照优化推广五大坑
- 2022年吉林省高职单招(语文)考试冲刺练习及答案
热门文章
- abstract函数必须重写
- awr报告 解读_【数据库】解读Oracle AWR性能分析报告
- samba(smb服务)实现网络文件共享
- Python学习系列 -- 改善 Python 程序的 91 个建议
- POI和EasyExcel导入导出Excel表格
- 继续继续.......
- 1.1计算机组成结构:CPU组成、冯·诺依曼结构与哈佛结构、嵌入式芯片术语
- 产业分析:私域流量白皮书
- R里面的tryCatch
- 关于ShareSDK在Xcode14上面发生错误的相关解决办法