当前位置: 首页 > news >正文

【Elasticsearch】settings

通过settings或者yml文件写入的配置是不是最终都会写到settings对象中呢?

是的,最终都会汇总到 `Settings` 对象里,但来源不同、优先级不同、作用范围也不同。可以用一句话总结:

> “yml 文件只是初始来源之一,运行时所有配置最终都会归一到 Settings 对象,但 Settings 对象是分层的,不同层之间可以覆盖。”

---

🔍 1. 配置来源与层次

来源 写入目标 作用范围 备注 

`elasticsearch.yml` 节点级的 `Settings` 整个节点 启动时只读一次 

命令行参数 `-E` 同上 同上 优先级高于 yml 

索引创建时的 settings 该索引专属的 `Settings` 仅该索引 通过 `PUT /index/_settings` 可修改 

集群级动态设置 集群状态的 `Settings` 整个集群 通过 `PUT _cluster/settings` 写入 

---

🔍 2. 最终归一:Settings 对象

- 节点启动时,`Environment` 会把 `elasticsearch.yml`、CLI 参数、jvm.options 等解析成一个全局的 `Settings` 实例。

- 索引创建时,会再创建一个 索引级别的 `Settings`,它会把全局配置作为 fallback,然后再把索引自己的 settings 覆盖进去。

- 运行时,通过 `ClusterService.state().metadata().index("idx").getSettings()` 拿到的是索引级 Settings;通过 `Node.NODE_SETTINGS` 拿到的是节点级 Settings。

---

✅ 举个例子

假设你在 `elasticsearch.yml` 里写了:

```yaml

index.number_of_shards: 3

```

- 启动后,节点级 `Settings` 里会有 `index.number_of_shards: 3`。

- 当你创建索引 `PUT /my_index` 时,如果没有显式指定 `number_of_shards`,就会用到这个全局默认值。

- 如果你在创建索引时写了:

```json

  PUT /my_index

  {

    "settings": {

      "number_of_shards": 5

    }

  }

  ```

  那么最终该索引的 `Settings` 对象里就是 `5`,覆盖了全局的 `3`。

---

✅ 总结一句话

> 所有配置最终都会落到某个 `Settings` 对象里,但不同层级之间可以相互覆盖:索引级 > 集群动态 > 节点级(yml)。

“fallback” 就是兜底值、备胎值的意思。

 

在 Elasticsearch 的 `Settings` 体系里:

 

> 如果当前层(索引、集群、节点)没有显式配置某个键,就会自动去上一层找这个键的值拿来用,这个“上一层”的值就是 fallback。

 

---

 

✅ 举个例子

 

1. 节点级 yml 配置了:

 

```yaml

index.number_of_replicas: 2

```

 

2. 你创建索引时 没写 `number_of_replicas`:

 

```json

PUT /my_index

{

  "settings": {

    "number_of_shards": 3

  }

}

```

 

- 此时 `my_index` 的 `number_of_replicas` 会自动取节点级的 `2`。

- 这个 `2` 就是 fallback 值。

 

---

 

✅ 一句话总结

 

> fallback 就是“如果我没配,就用上级默认值”。

http://www.lryc.cn/news/594788.html

相关文章:

  • Webpack源代码泄露漏洞
  • 深圳南柯电子|发电机控制器EMC整改:从合规到高可靠的进化之路
  • Linux中ELF区域与文件偏移量的关系
  • 开源 Arkts 鸿蒙应用 开发(八)多媒体--相册和相机
  • 一个适合MCU的分级菜单框架
  • 格式工厂5.21.0简介
  • 设计模式六:工厂模式(Factory Pattern)
  • 从安装到上手:Ubuntu 22.04 玩转 Containerd 2.1.3 容器运行时
  • 在 Windows上用WSL和VSCode进行Linux开发环境配置
  • 《使用 IDEA 部署 Docker 应用指南》
  • 在Anolis8.6上源码编译安装部署OpenVAS(GVM)未完待续
  • git bash命令不够完善,想整合msys2该怎么办?
  • Dynamics 365 Contact Center是什么
  • Java 解析前端上传 ZIP 压缩包内 Excel 文件的完整实现方案
  • 前端开发者快速理解Spring Boot项目指南
  • 在 Angular 应用程序中使用 Genkit 的完整指南
  • docker 容器学习
  • Three.js 全景图(Equirectangular Texture)教程:从加载到球面映射
  • AR技术:应急响应的加速利器
  • AR技术:石化行业培训的“游戏规则改变者”
  • Web开发:ABP框架12——中间件Middleware的创建和使用
  • AR巡检和传统巡检的区别
  • CCLink IE转ModbusTCP网关与三菱PLC通讯无纸记录器
  • uni-app开发小程序,根据图片提取主题色值
  • 网络编程基础:从 OSI 模型到 TCP/IP 协议族的全面解析
  • Android 中 SystemServiceManager 和 ServiceManager 的应用场景、区别与联系
  • 漏洞扫描 + 渗透测试:双轮驱动筑牢网络安全防线
  • Ubuntu 22.04 使用 Docker 安装 Redis 5 (安装包形式)
  • 内网与外网是通过什么进行传输的?内外网文件传输的安全方法
  • C#最佳实践:为何应尽量减少静态类的使用