Mapping详解

  • DBMS数据库有自己的表结构,同样,es中的doc也有自己的结构,称之为mapping,在插入数据是,如果不创建mapping,es会自动根据数据类型创建动态的mapping。由于es底层使用了lucene的原因,不支持对mapping的修改,可使用索引重建的方式

elasticsearch通用mapping模板

{
    "mappings":{
      "properties":{
          "文本字符串":{
              "type":"keyword"
          },
          "日期时间":{
              "type":"date",
              "format":"yyyy-MM-dd HH:mm:ss"
          },
          "结构嵌套":{
              "properties":{
                 "对象类型":{
                      "type":"object"
                  },
                  "文本字符串分词":{
                      "type":"string",
                      "analyzer":"ik_max_word",
                      "index_options":"offsets"
                  }
              }
          }
      }
  }
}

加粗 部分为经常用到的mapping配置项

  • enabled

    • 作用:仅存储、不做搜索和聚合分析
    • 值:false|true
  • index

    • 作用:是否构建倒排索引(即是否分词,设置false,字段将不会被索引)
    • 值:false|true
  • index_option

    • 作用:存储倒排索引的哪些信息
    • 值:docs:索引文档号|freqs:文档号+词频|positions:文档号+词频+位置,通常用来距离查询|offsets:文档号+词频+位置+偏移量,通常被使用在高亮字段
    • 分词字段默认是positions,其他默认时docs
  • norms

    • 作用:是否归一化相关参数,如果字段仅用于过滤和聚合分析、可关闭
      分词字段默认配置,不分词字段:默认{“enable”: false},存储长度因子和索引时boost,建议对需要参加评分字段使用,会额外增加内存消耗
    • 值:“enable”: true|false, “loading”: “lazy”
  • doc_value

    • 作用:是否开启doc_value,用户聚合和排序分析
      对not_analyzed字段,默认都是开启,分词字段不能使用,对排序和聚合能提升较大性能,节约内存
    • 值:true(缺省)| false
  • fielddata

    • 作用:是否为text类型启动fielddata,实现排序和聚合分析
      针对分词字段,参与排序或聚合时能提高性能,不分词字段统一建议使用doc_value
    • 值:disabled|enable
  • store

    • 作用:是否单独设置此字段的是否存储而从_source字段中分离,只能搜索,不能获取值
    • 值:false|true
  • dynamic

    • 作用:控制mapping的自动更新
    • 值:true|false|strict
  • analyzer

    • 作用:指定分词器,默认分词器为standard analyzer
    • 值:ik_max_word|ik_smart(这两种是常见的中文分词器,关于分词器的见ElasticSearch分词器)
  • search_analyzer

    • 作用:设置搜索时的分词器,默认跟analyzer是一致的
    • 值:同analyzer
  • boost

    • 作用:字段级别的分数加权,默认值是1.0
    • 值:具体值
  • ignore_above

    • 作用:超过100个字符的文本,将会被忽略,不被索引
    • 值:具体值(100)
  • fields

    • 作用:可以对一个字段提供多种索引模式,同一个字段的值,一个分词,一个不分词
    • 值:{“raw”: {“type”: “string”, “index”: “not_analyzed”}}
  • similarity

    • 作用:默认时TF/IDF算法,指定一个字段评分策略,仅仅对字符串型和分词类型有效
    • 值:BM25|TF/IDF

使用索引重建的方式"修改"mapping

  • 如需要将旧索引的itemId字段改为keyword类型,则执行以下请求
# 创建index:

PUT /test_v2

# 设置mapping:
POST /test_v2/item/_mapping
{
  "properties": {
    "itemId": {
      "type": "keyword"
    },
    "itemName": {
      "type": "text",
      "analyzer": "ik_max_word",
      "search_analyzer": "ik_smart"
    }
  }
}

# 使用reindex api将旧索引数据导入新索引,索引重建后可使用reindex命令迁移数据,如将test_v1数据迁移至test_v2请求如下:

POST _reindex
{
  "source": {
    "index": "test_v1",
    "type": "item"
  },
  "dest": {
    "index": "test_v2",
    "type": "item"
  }
}

# 为新索引添加别名后,在程序代码中可以使用固定别名查询动态的索引名称,然后进行查询,如此索引重建则不会引起程序的变动

## 添加别名请求:
POST /_aliases
{
    "actions": [
        { "add": {
            "alias": "item_alias",
            "index": "test_v2"
        }}
    ]
}

## 将旧索引别名迁移到新索引请求:
POST /_aliases
{
    "actions" : [
        { "remove" : { "index" : "test_v1", "alias" : "item_alias" } },
        { "add" : { "index" : "test_v2", "alias" : "item_alias" } }
    ]
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AI绘界Studio

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值