千家信息网

ElasticSearch的映射mapping是什么

发表于:2026-11-03 作者:千家信息网编辑
千家信息网最后更新 2026年11月03日,这篇文章主要讲解了"ElasticSearch的映射mapping是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"ElasticSearch的映射
千家信息网最后更新 2026年11月03日ElasticSearch的映射mapping是什么

这篇文章主要讲解了"ElasticSearch的映射mapping是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"ElasticSearch的映射mapping是什么"吧!

1、什么是mapping

mapping是类似于数据库中的表结构定义,主要作用如下:

  • 定义index下的字段名

  • 定义字段类型,比如数值型、浮点型、布尔型等

  • 定义倒排索引相关的设置,比如是否索引、记录position等

在具体介绍mapping前,有个概念必须先了解:ElasticSearch7-去掉type概念

• 关系型数据库中两个数据表示是独立的,即使他们里面有相同名称的列也不影响使用,但ES中不是这样的。 elasticsearch是基于Lucene开发的搜索引擎,而ES中不同type下名称相同
的filed最终在Lucene中的处理方式是一样的。
• 两个不同type下的两个user_name,在ES同一个索引下其实被认为是同一个filed,你必
须在两个不同的type中定义相同的filed映射。否则,不同type中的相同字段名称就会在
处理中出现冲突的情况,导致Lucene处理效率下降。
• 去掉type就是为了提高ES处理数据的效率。
• Elasticsearch 7.x
• URL中的type参数为可选。比如,索引一个文档不再要求提供文档类型。
• Elasticsearch 8.x
• 不再支持URL中的type参数。
• 解决:将索引从多类型迁移到单类型,每种类型文档一个独立索引

2、查看mapping

GET /[index_name]/_mapping

3、创建一个mapping

PUT /my-index-000001{  "mappings": {    "properties": {      "age":    { "type": "integer" },        "email":  { "type": "keyword"  },       "name":   { "type": "text"  }         }  }}

说明:

integer:数字类型,默认是long

keyword:检索时只能精确匹配

text:全文检索,保存数据时会进行分词

4、添加新的字段映射

PUT /my-index-000001/_mapping{  "properties": {    "employee-id": {      "type": "keyword",      "index": false    }  }}

说明

index:默认是true,被索引,也就是参与检索,这边设为false,说明该字段不参与检索。

5、更新字段映射

对于已经存在的映射字段, 禁止直接修改 。更新必须创建新的索引进行数据迁移。 因为 lucene实现的倒排索引生成后不允许修改,应该重新建立新的索引,然后做reindex操作。

但是可以新增字段,通过 dynamic 参数来控制字段的新增,这个参数的值如下:

  • true:默认值,表示允许选自动新增字段

  • false:不允许自动新增字段,但是文档可以正常写入,但无法对字段进行查询等操作

  • strict:严格模式,文档不能写入,报错

示例

首先创建名为 my_dynamic_false的索引并设置mapping:

PUT my_dynamic_false{  "mappings": {    "dynamic": false,    "properties": {      "title": {        "type": "text"      },      "name": {        "type": "keyword"      },      "age": {        "type": "integer"      }    }  }}

然后写入一个文档:

PUT my_dynamic_false/_doc/1{  "title": "hello world",  "desc": "this is book"}

注意,这里在mapping设置中,"dynamic": false,表示在写入文档时,如果写入字段不存在也不会报错。这里的desc字段就是不存在的字段。

查询一下写入的文档:

GET my_dynamic_false/_search{  "query": {    "match": {      "title": "hello"    }  }}

结果: 可以通过 title字段查询到文档的内容

{  "took" : 0,  "timed_out" : false,  "_shards" : {    "total" : 1,    "successful" : 1,    "skipped" : 0,    "failed" : 0  },  "hits" : {    "total" : {      "value" : 1,      "relation" : "eq"    },    "max_score" : 0.2876821,    "hits" : [      {        "_index" : "my_dynamic_false",        "_type" : "_doc",        "_id" : "1",        "_score" : 0.2876821,        "_source" : {          "title" : "hello world",          "desc" : "this is book"        }      }    ]  }}

通过desc字段查询文档

GET my_dynamic_false/_search{  "query": {    "match": {      "desc": "book"    }  }}

结果是查不到

{  "took" : 0,  "timed_out" : false,  "_shards" : {    "total" : 1,    "successful" : 1,    "skipped" : 0,    "failed" : 0  },  "hits" : {    "total" : {      "value" : 0,      "relation" : "eq"    },    "max_score" : null,    "hits" : [ ]  }}

验证一下"dynamic": strict模式:

创建mapping

PUT my_dynamic_strict{  "mappings": {    "dynamic": "strict",    "properties": {      "title": {        "type": "text"      },      "name": {        "type": "keyword"      },      "age": {        "type": "integer"      }    }  }}

创建文档

PUT my_dynamic_strict/_doc/1{  "title": "hello world",  "desc": "this is book"}

结果发现直接报错了

{  "error": {    "root_cause": [      {        "type": "strict_dynamic_mapping_exception",        "reason": "mapping set to strict, dynamic introduction of [desc] within [_doc] is not allowed"      }    ],    "type": "strict_dynamic_mapping_exception",    "reason": "mapping set to strict, dynamic introduction of [desc] within [_doc] is not allowed"  },  "status": 400}

6、数据迁移

6.1、创建出新的映射。

PUT /newbank{    "mappings" : {      "properties" : {        "account_number" : {          "type" : "long"        },        "address" : {          "type" : "text"        },        "age" : {          "type" : "integer"        },        "balance" : {          "type" : "long"        },        "city" : {          "type" : "keyword"        },        "email" : {          "type" : "keyword"        },        "employer" : {          "type" : "keyword"        },        "firstname" : {          "type" : "text"        },        "gender" : {          "type" : "text"        },        "lastname" : {          "type" : "text"        },        "state" : {          "type" : "keyword"        }      }    }  }

6.2、迁移

POST _reindex{  "source": {    "index": "bank",    "type": "account"  },  "dest":{    "index": "newbank"  }}

7、copy_to参数说明

作用是将该字段的值复制到目标字段,不会出现在_source中,只能用来搜索。

PUT my_index_copy{  "mappings": {    "properties": {      "first_name": {        "type": "text"        , "copy_to": "full_name"      },      "last_name": {        "type": "text"        , "copy_to": "full_name"      },      "full_name" : {        "type": "text"      }    }  }}

然后创建一个新的文档,文档只需要写first_name 和 last_name即可:

PUT my_index_copy/_doc/1{  "first_name": "john",  "last_name": "smith"}

查询:

GET my_index_copy/_search{  "query": {    "match": {      "full_name": {        "query": "john smith"      }    }  }}

结果可以查到数据,但结果集中没有full_name

{  "took" : 5,  "timed_out" : false,  "_shards" : {    "total" : 1,    "successful" : 1,    "skipped" : 0,    "failed" : 0  },  "hits" : {    "total" : {      "value" : 1,      "relation" : "eq"    },    "max_score" : 0.5753642,    "hits" : [      {        "_index" : "my_index_copy",        "_type" : "_doc",        "_id" : "1",        "_score" : 0.5753642,        "_source" : {          "first_name" : "john",          "last_name" : "smith"        }      }    ]  }}

感谢各位的阅读,以上就是"ElasticSearch的映射mapping是什么"的内容了,经过本文的学习后,相信大家对ElasticSearch的映射mapping是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

字段 文档 索引 数据 参数 类型 结果 查询 不同 相同 两个 处理 检索 内容 名称 就是 学习 作用 情况 效率 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 广州为想互联网科技有限公司 湖南永感互联网科技有限公司 中国互联网科技工作委员会毛军 无线互联网科技 亿账通互联网科技 互联网科技公司介绍 国外互联网科技网站 互联网校园科技培训 成都铂石互联网科技做什么的 四川互联网展示科技馆设计 下一代互联网重大应用科技园 萌小萌互联网科技河南有限公司 普陀区互联网教育科技管理办法 云南互联网科技学费 银川新华互联网科技学校原画 北京天晋互联网科技有限公司 悟空问答互联网科技 深圳互联网科技园地址 伍佰万互联网科技是干嘛的 中国主要互联网科技公司 南京欣网互联网络科技 互联网为科技 金融科技 互联网金融 现代科技和互联网有关系吗 互联网之后的科技是什么 荆州市昕露互联网络科技有限公司 健康食品互联网创新科技园项目 长沙茂晟互联网科技有限公司 富国互联网金融科技混合基金 小牛互联网科技有限公司地址
0