ES索引配置字段解读
文章目录
- 一、Settings:索引的集群与功能配置
- 1. 核心配置项
- (1)静态设置(索引创建后不可修改)
- (2)动态设置(索引创建后可修改)
- 2. 配置示例
- 二、Mappings:索引的数据结构定义
- 1. 核心概念
- 2. 核心配置项
- 3. 配置示例
- 三、Aliases:索引的别名(访问入口)
- 1. 核心作用
- 2. 核心操作
- (1)创建索引时绑定别名
- (2)给已有索引添加/删除别名
- (3)查询别名关联的索引
- (4)带过滤条件的别名
- 3. 使用场景示例
- 四、三者关系与核心总结
Elasticsearch(ES)中,
settings、
mappings 和
aliases 是索引的三大核心配置,分别控制索引的
集群行为、
数据结构和
访问入口,三者共同定义了索引的功能和使用方式。
一、Settings:索引的集群与功能配置
settings 用于定义索引的集群级参数和功能开关,控制索引的分片、副本、分词器、刷新频率等核心行为,分为“静态设置”和“动态设置”两类。
1. 核心配置项
(1)静态设置(索引创建后不可修改)
- 分片与副本:索引数据的分布式存储规则(核心配置)
number_of_shards:主分片数量(默认1),创建后不可修改,需提前预估数据量(单分片建议50-100GB)。number_of_replicas:每个主分片的副本数量(默认1),控制高可用和查询并发。
- 索引生命周期:绑定ILM策略(如自动冷热分离、过期删除)
index.lifecycle.name:ILM策略名称(如log_policy)。
(2)动态设置(索引创建后可修改)
- 刷新频率:控制数据写入后可查询的延迟(近实时性核心)
index.refresh_interval:默认1秒,写入密集场景可设为30秒(-1关闭自动刷新)。
- 字段限制:防止字段爆炸或过度占用资源
index.mapping.total_fields.limit:最大字段数(默认1000),避免动态映射导致字段泛滥。index.mapping.depth.limit:字段嵌套深度(默认20),防止嵌套过深影响查询性能。
- 缓存与合并:优化查询和写入性能
indices.queries.cache.size:查询缓存大小(默认10%堆内存)。index.merge.scheduler.max_thread_count:合并线程数(默认CPU核心数的50%)。
2. 配置示例
PUT /my_index
{"settings": {"number_of_shards": 3, // 静态:3个主分片"number_of_replicas": 1, // 动态:1个副本(可后续修改)"index.refresh_interval": "5s", // 动态:5秒刷新一次"index.mapping.total_fields.limit": 2000, // 动态:最大2000个字段"analysis": { // 静态:自定义分词器(属于settings子配置)"analyzer": {"my_ik_analyzer": {"type": "custom","tokenizer": "ik_max_word"}}}}
}// 动态修改副本数(无需重建索引)
PUT /my_index/_settings
{"index.number_of_replicas": 2
}
二、Mappings:索引的数据结构定义
mappings 类似数据库的“表结构”,定义了文档中字段的类型、分词器、是否索引、聚合规则等,决定了ES如何存储和解析数据。
1. 核心概念
- 字段类型(Field Types):指定字段的数据类型,ES支持多种类型,核心分类:
- 文本类:
text(全文检索,会分词)、keyword(精确匹配,不分词)。 - 数值类:
long、integer、double(支持范围查询和聚合)。 - 日期类:
date(支持时间范围查询,需指定格式)。 - 复杂类型:
object(嵌套对象)、nested(独立嵌套文档)、array(数组,无需显式定义类型)。
- 文本类:
- 动态映射(Dynamic Mapping):ES默认自动推断字段类型(如数字→
long、文本→text+keyword子字段),生产环境建议关闭(dynamic: false),避免类型错误。 - 元字段(Meta-fields):ES内置的文档元信息,如
_id(文档唯一ID)、_source(原始文档内容)、_timestamp(时间戳)。
2. 核心配置项
type:字段类型(如text、long)。analyzer:索引时使用的分词器(如ik_max_word)。search_analyzer:搜索时使用的分词器(默认与analyzer一致)。index:是否索引(true可查询,false仅存储,不可查询)。store:是否单独存储(默认false,依赖_source存储,true可单独读取该字段,节省_source传输开销)。format:日期字段的格式(如"yyyy-MM-dd HH:mm:ss")。ignore_above:超过指定长度的字符串不索引(如keyword字段设为256,超过256字符的内容不参与查询)。
3. 配置示例
PUT /my_index
{"mappings": {"properties": {"product_name": { // 商品名称:全文检索+精确匹配"type": "text","analyzer": "ik_max_word", // 索引时分词器"search_analyzer": "ik_smart", // 搜索时分词器(更精准)"fields": {"keyword": { // 子字段:用于聚合和精确匹配"type": "keyword","ignore_above": 256}}},"price": { "type": "double" }, // 价格:数值类型"stock": { "type": "integer" }, // 库存:整数类型"create_time": { // 创建时间:日期类型"type": "date","format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis" // 支持多格式},"tags": { "type": "keyword" }, // 标签:精确匹配(数组类型无需显式定义)"description": { // 商品描述:仅存储不索引"type": "text","index": false}}}
}
三、Aliases:索引的别名(访问入口)
aliases 是索引的“虚拟名称”,类似数据库的“视图”,可关联一个或多个索引,用于简化索引访问、实现无缝切换、分组管理等。
1. 核心作用
- 简化访问:用简短别名替代长索引名(如用
prod替代product_202501)。 - 索引切换:无感知切换后端索引(如从
prod_v1切换到prod_v2,无需修改业务代码)。 - 索引分组:将多个相关索引关联到同一别名(如
log_202501、log_202502关联到logs,查询时可一次性查询所有分组索引)。 - 过滤与路由:给别名绑定过滤条件(如仅查询
status: active的文档)或路由规则(如按用户ID路由到指定分片)。
2. 核心操作
(1)创建索引时绑定别名
PUT /product_202501
{"aliases": {"prod_current": {}, // 绑定别名prod_current"prod_2025": {} // 同时绑定到分组别名prod_2025}
}
(2)给已有索引添加/删除别名
// 添加别名:给product_202502添加prod_current和prod_2025别名
POST /_aliases
{"actions": [{ "add": { "index": "product_202502", "alias": "prod_current" } },{ "add": { "index": "product_202502", "alias": "prod_2025" } }]
}// 删除别名:从product_202501移除prod_current别名
POST /_aliases
{"actions": [{ "remove": { "index": "product_202501", "alias": "prod_current" } }]
}
(3)查询别名关联的索引
GET /_alias/prod_current // 查看prod_current别名关联的索引
GET /product_202501/_alias // 查看product_202501的所有别名
(4)带过滤条件的别名
POST /_aliases
{"actions": [{"add": {"index": "product_202501","alias": "prod_active","filter": { "term": { "status": "active" } } // 仅查询状态为active的文档}}]
}
3. 使用场景示例
- 业务代码查询时,直接使用别名
prod_current,无需关心后端实际索引名。 - 当需要切换索引(如季度数据归档,新建
product_202502),只需通过_aliases操作切换别名绑定,业务无感知。 - 查询2025年所有商品时,直接查询别名
prod_2025,自动聚合product_202501、product_202502等索引的数据。
四、三者关系与核心总结
| 配置项 | 核心作用 | 可修改性 | 核心关联 |
|---|---|---|---|
settings | 控制索引的集群行为与性能 | 静态配置不可改,动态可改 | 分词器配置需在settings中定义,供mappings使用 |
mappings | 定义数据结构与解析规则 | 字段可新增,类型不可改 | 依赖settings中的分词器,决定数据如何存储和查询 |
aliases | 提供灵活的索引访问入口 | 可随时添加/删除/切换 | 不依赖settings和mappings,仅作为访问代理 |
核心总结:
settings管“集群层面”(分片、性能、功能),mappings管“数据层面”(结构、解析),aliases管“访问层面”(入口、切换)。- 索引创建时需重点规划
settings(静态分片)和mappings(字段类型),aliases可后续灵活调整,是实现索引生命周期管理的关键。
