《Elastic Stack 实战手册》——三、产品能力——3.4.入门篇——3.4.2.Elasticsearch基础应用—— 3.4.2.2.理解mapping(中) https://developer.aliyun.com/article/1231103
创建/更新映射
当你首次创建一个索引的时候,可以指定类型的映射。你也可以使用 /_mapping 更新映射。
我们可以更新一个映射来添加一个新字段,但不能更新一个现有的 mapping,把它的字段类型从一个变为另外一个,比如从 text 变为 keyword。我们可以在维持现有 mapping 的情况下,把一个字段变成一个 multi-field 字段。
为了描述指定映射的两种方式,我们先删除 twitter 索引:
DELETE twitter
创建一个新索引,指定 message 字段使用 cjk 分析器:
PUT twitter { "settings": { "number_of_shards": "5", "number_of_replicas": "1" }, "mappings": { "properties": { "user": { "type": "keyword" }, "post_date": { "type": "date" }, "message": { "type": "text", "analyzer": "cjk" } } } }
通过消息体中指定的 mappings 创建了索引映射,索引设置 settings 中通过 number_of_shards 指定分片数,number_of_replicas 指定副本数。
给映射增加一个新的名为 tag 的 keyword 类型字段,使用 _mapping :
PUT twitter/_mapping { "properties": { "tag": { "type": "keyword" } } }
我们不需要再次列出所有已存在的字段,因为无论如何我们都无法改变它们,新字段已经被合并到存在的映射中。
测试映射
可以使用 analyze API 测试字符串字段的映射,比较下面两个请求的输出:
GET /twitter/_analyze { "field": "message", "text": "搜索引擎" } GET /twitter/_analyze { "field": "tag", "text": "搜索引擎" }
消息体里面传入我们想要分析的文本。message 字段产生 3 个词条“搜索”、“索引”和“引擎”, tag 字段产生单独的词条“搜索引擎”,换句话说,我们的映射正常工作。