如何查看并修改Elasticsearch search.allow_expensive_queries默认值
查看
search.allow_expensive_queries参数值 在Kibana的DevTools控制台执行以下请求,即可拿到包含默认值在内的全量配置:
GET _cluster/settings?include_defaults=true&filter_path=*.search.allow_expensive_queries
返回结果中defaults字段对应的取值就是参数默认值,Elasticsearch官方版本中该参数默认值为true,即默认允许执行wildcard、fuzzy、大跨度join类高开销查询。
修改
search.allow_expensive_queries参数取值 方式1:通过DevTools控制台动态修改
该参数为集群级动态配置,修改后无需重启ES节点即可生效,支持两种生效范围:
- 持久生效(集群全量重启后配置不丢失):执行以下请求,将取值替换为你需要的布尔值即可
PUT _cluster/settings { "persistent": { "search.allow_expensive_queries": false } }
- 临时生效(集群重启后配置自动失效):将请求体中的
persistent替换为transient即可
PUT _cluster/settings { "transient": { "search.allow_expensive_queries": false } }
方式2:通过docker-compose.yml配置固定值
在容器启动前将参数写入environment配置段即可,注意ES容器的环境变量命名规则:参数的点号替换为下划线、全大写、增加ES_前缀,对应参数的环境变量名为ES_SEARCH_ALLOW_EXPENSIVE_QUERIES,配置示例如下:
version: '3.8' services: es01: image: docker.elastic.co/elasticsearch/elasticsearch:8.14.3 environment: - discovery.type=single-node - "ES_JAVA_OPTS=-Xms1g -Xmx1g" # 配置search.allow_expensive_queries参数 - ES_SEARCH_ALLOW_EXPENSIVE_QUERIES=false ports: - "9200:9200"
注意:多节点集群下,需要保证所有节点的该参数取值一致,避免出现查询行为异常。
内容的提问来源于stack exchange,提问作者Sergey Tsypanov
相关产品推荐
相关产品推荐

