ES索引配置字段解读

文章目录

Elasticsearch(ES)中, settingsmappingsaliases 是索引的三大核心配置,分别控制索引的 集群行为数据结构访问入口 ,三者共同定义了索引的功能和使用方式。

一、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. 配置示例
json 复制代码
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(精确匹配,不分词)。
    • 数值类:longintegerdouble(支持范围查询和聚合)。
    • 日期类:date(支持时间范围查询,需指定格式)。
    • 复杂类型:object(嵌套对象)、nested(独立嵌套文档)、array(数组,无需显式定义类型)。
  • 动态映射(Dynamic Mapping) :ES默认自动推断字段类型(如数字→long、文本→text+keyword子字段),生产环境建议关闭(dynamic: false),避免类型错误。
  • 元字段(Meta-fields) :ES内置的文档元信息,如_id(文档唯一ID)、_source(原始文档内容)、_timestamp(时间戳)。
2. 核心配置项
  • type:字段类型(如textlong)。
  • 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. 配置示例
json 复制代码
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_202501log_202502关联到logs,查询时可一次性查询所有分组索引)。
  • 过滤与路由 :给别名绑定过滤条件(如仅查询status: active的文档)或路由规则(如按用户ID路由到指定分片)。
2. 核心操作
(1)创建索引时绑定别名
json 复制代码
PUT /product_202501
{
  "aliases": {
    "prod_current": {}, // 绑定别名prod_current
    "prod_2025": {} // 同时绑定到分组别名prod_2025
  }
}
(2)给已有索引添加/删除别名
json 复制代码
// 添加别名:给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)查询别名关联的索引
json 复制代码
GET /_alias/prod_current // 查看prod_current别名关联的索引
GET /product_202501/_alias // 查看product_202501的所有别名
(4)带过滤条件的别名
json 复制代码
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_202501product_202502等索引的数据。

四、三者关系与核心总结

配置项 核心作用 可修改性 核心关联
settings 控制索引的集群行为与性能 静态配置不可改,动态可改 分词器配置需在settings中定义,供mappings使用
mappings 定义数据结构与解析规则 字段可新增,类型不可改 依赖settings中的分词器,决定数据如何存储和查询
aliases 提供灵活的索引访问入口 可随时添加/删除/切换 不依赖settingsmappings,仅作为访问代理

核心总结

  • settings 管"集群层面"(分片、性能、功能),mappings 管"数据层面"(结构、解析),aliases 管"访问层面"(入口、切换)。
  • 索引创建时需重点规划settings(静态分片)和mappings(字段类型),aliases可后续灵活调整,是实现索引生命周期管理的关键。
相关推荐
阿里云大数据AI技术2 小时前
为什么 OpenSearch 向量检索能提速 13 倍
搜索引擎
小牛马爱写博客3 小时前
ELK 企业级日志分析系统部署与实践
elk·elasticsearch·kibana·logstash
爱浦路 IPLOOK3 小时前
高校实验室建设方案解析:从规划到落地的全流程指南
大数据·人工智能
ClouGence3 小时前
百草味数据架构升级实践:打造 Always Ready 的企业级数据平台
大数据·数据库·数据分析
Lx3524 小时前
Flink SQL在实时数仓中的应用
大数据
玥轩_5214 小时前
Git命令速查手册
大数据·git·elasticsearch·gitee·github·命令速查
深圳市恒讯科技4 小时前
使用站群服务器做SEO,如何避免被搜索引擎判定为“站群作弊”?
服务器·搜索引擎·php
口_天_光健5 小时前
制造企业的数据目录编写
大数据·数据库·数据仓库·数据分析
A-刘晨阳5 小时前
时序数据库选型指南:从大数据视角切入,聚焦 Apache IoTDB
大数据·apache·时序数据库·iotdb