elasticsearch中mappings字段的相关设置(索引运维)

本文详细介绍了Elasticsearch中的mappings字段设置,包括enabled、index、norms、doc_values和field_data等参数对搜索、聚合和性能的影响。强调了动态模板、index alias和元信息管理在索引运维中的重要性,并提供了字段建模的指导原则,建议将mappings文件纳入版本控制进行管理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

文章目录

mappings

https://www.elastic.co/guide/en/elasticsearch/reference/8.0/mapping-params.html

  • enabled:设置 false,仅作存储不支持搜索和聚合分析(数据保存在_source中 用于type为object)
  • index:是否倒排索引;设置 fasle,无法被搜索,但依然支持aggs,sort,并出现在_source中
  • norms:用于算分,若字段用来filter过滤和aggs聚合分析,可关闭节约存储
  • doc_values:是否启用 doc_values,用于排序和聚合分析
  • field_data:若要对text类型启用排序和聚合分析,fielddata需要设置成true
  • store:默认false不存储,数据默认存储在_source,若true,额外空间再存储该字段
  • coerce:默认 true 开启,是否开启数据类型的自动转换,如字符串转数字
  • multifields:多字段特性
  • dynamic:true/false/strict 控制mapping的自动更新 字段的自动新增

影响性能的参数:

参数作用
index认true,字段是否analyzed,false不分词,不能被查询
enabled默认true,字段是否索引,用于type为object,不索引能减少CPU使用,但是不能搜索
store默认false,如果需要获取的字段只是文档中的小数据,这些字段可以store,减少IO
doc_values默认true,优化字段排序聚合脚本访问,耗用磁盘空间
fielddata默认false,针对text类型排序、聚合、脚本访问优化,尽量避免,操作昂贵
norms默认true,如果字段不需要参与评分,设置为false,减少磁盘占用

其他参数:

参数作用
boost默认1,评分加权系数
analyzer字段保存使用的分析器
similarity评分使用的算法 默认最外层BM25
fields一个字段多种处理方式,内置字段,可用于多语言
null_value设置空值的默认值
search_analyzer搜索使用的分析器
ignore_above设置索引和store的长度,超过长度的忽略
copy_to将该字段拷贝到指定字段,方便通过一个字段搜索
ignore_malformed默认false,添加文档时忽略该字段的异常数据
coerce默认true,是否允许数据类型强制转换,如字符串转数字,浮点转整型
index_option倒排索引的内容,docs、freqs、positions、offsets
dynamic默认true,是否允许根据文档动态添加mapping类型,true\false\strict,支持最外层定义即mappings下内层继承即properties下字段下

index template & dynamic template

  • 根据索引名匹配不同的 mappings 和 settings
  • 可在一个 mappings 上动态的设定字段类型(新增字段)

index alias:无需停机,无需修改程序,即可进行修改索引库

update by query & reindex:对已经创建的索引库新增字段或修改字段重建索引

_meta 元信息

# 在Mapping中加入元信息,便于管理
PUT softwares/
{
  "mappings": {
    "_meta": {
      "software_version_mapping": "1.0"
    }
  }
}

建议:为索引的mappings 加入meta信息

  • mappings 设置需要从两个维度考虑
    • 功能:搜索,聚合,排序
    • 性能:存储的开销,内存的开销,搜索的性能
  • mappings 设置是一个迭代过程
    • 加入新的字段容易,必要时可 update_by_query
    • 更新删除的字段不允许,需要 reindex 重建索引导入数据
    • 最好能对mappings加入meta信息,更好进行版本管理
    • 可考虑将mappings文件上传git进行管理

如何对字段进行建模:

  • 字段类型
    • text和keyword
text:
	用于全文本字段,文本会被 analyzer 分词
	默认不支持聚合分析及排序,要设置 fielddata 为 true
keyword:
	用于id,枚举及不需要分词的文本,如电话号码,email地址,手机号码,性别,身份证和邮编等
	适用于 filter 精确匹配,sort 和 aggs 聚合
设置多字段类型:
	默认会为文本类型设置text,并设置一个keyword的子字段
	处理自然语言时,通过增加英文,拼音和标准分词器,提高搜索结构
    • 结构化数据
数值类型:尽量选择位数小的类型,能用byte就不要用long
枚举类型:设置为 keyword,即便是数字也该设置为keyword,获取高性能
其他:日期/布尔/地理
  • 是否需要搜索及分词
若不需要检索,排序和聚合分析:enabled 设置为false  (字段是否索引 仅用于type为object)
若不需要检索:index 设置 false
对需要检索的字段通过以下配置设定存储粒度:index_options 倒排索引/norms 算分 :不需要归一化数据时可关闭
  • 是否需要聚合及排序
若不需要检索,排序和聚合分析:enabled 设置为false
若不需要排序或者聚合分析:doc_values / fielddata 设置false
更新频繁,聚合查询频繁的keyword类型的字段:推荐将 eager_global_ordinals 设置true 建议数据量不大
  • 是否需要额外存储
是否需要专门存储当前字段数据:
	store 设置 true,可存储该字段的原始内容
	一般结合 _source 的 enabled 为 false 使用
disable _source:节约磁盘,适用于指标型数据,无需更新
	一般建议先考虑增加压缩比
	无法看到 _source 字段,无法做 reindex,无法做 _update 但是能覆盖新增

示例:图书的索引

书名:支持全文和精确匹配
简介:支持全文
作者:精确匹配
发行日期:日期
图书封面:精确值,一般不需要搜索
#优化字段类型
PUT books
{
  "mappings" : {
    "properties" : {
      "author" : {"type" : "keyword"},
      "cover_url" : {"type" : "keyword","index": false},  # index false,不支持搜索,支持terms聚合 keyword的倒排索引是 文档id和文档位置的映射 
      "description" : {"type" : "text"},
      "public_date" : {"type" : "date"},
      "title" : {
        "type" : "text",
        "fields" : {
          "keyword" : {
            "type" : "keyword",
            "ignore_above" : 100
          }
        }
      }
    }
  }
}
### 实现Elasticsearch项目中的应用案例 #### 创建配置索引 为了确保数据能够被高效存储并检索,在创建索引时应遵循一系列规范。这包括定义合适的映射结构来描述文档字段及其属性,设置分片数量以平衡查询性能与恢复速度之间的关系,并考虑启用压缩功能减少磁盘占用空间[^1]。 ```json PUT /my-index-000001 { "settings": { "number_of_shards": 3, "number_of_replicas": 2 }, "mappings": { "properties": { "title": { "type": "text" }, "content": { "type": "text", "analyzer": "standard" } } } } ``` #### 数据导入与预处理 当向Elasticsearch中加载大量历史记录或实时流式传输新事件之前,应该先对其进行清洗、转换操作。例如去除重复项、标准化日期格式等措施有助于提高后续分析工作的准确性。此外还可以利用Logstash这样的ETL工具来进行更复杂的日志解析工作。 #### 查询优化技巧 对于大规模分布式环境下的全文搜索请求而言,合理设计查询语句至关重要。通过采用布尔组合方式构建复杂条件表达式;适当调整评分算法权重参数;预先计算聚合统计信息等方式均能在不同程度上改善响应时间表现。 ```json GET /_search { "query": { "bool": { "must": [ {"match_phrase_prefix": {"title": "elasticsearch"}}, {"range": {"publish_date": {"gte": "now-7d/d"}}} ] } } } ``` #### 结合机器学习能力增强应用场景 除了作为传统意义上的搜索引擎之外,借助于内置的ML模块或是与其他开源AI库集成起来之后,则可以让Elasticsearch发挥更大的价值所在——比如自动分类邮件主题类别、预测服务器故障趋势等等实际业务场景当中去[^2]。 #### 利用云计算平台部署方案 考虑到资源利用率最大化的目标以及运维便利性的需求,越来越多的企业倾向于选择将Elasticsearch实例迁移到公有云端执行。这样做不仅简化了前期规划阶段的工作量而且还提供了诸如弹性伸缩机制在内的多项增值服务选项给到最终用户群体享用[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值