ElasticSearch Mapping
程序员文章站
2022-05-23 13:25:23
...
一、Mapping介绍
1)什么是Mapping ?
备注:7.0版本后ES,是通过自动识别字段type
2)字段类型
备注:相比其它存储,多了IP、坐标等特殊的格式
3)什么是Dynamic Mapping ?
备注:Dynamic Mapping ,设置不恰当可能导致字段无法被索引。
4)Mapping 类型的自动识别
5)通过设置dynamic控制Dynamic Mapping
6) 能否修改Mapping字段的类型
二、Demo
7)常规Mapping添加删除
#写入文档,查看 Mapping
PUT mapping_test/_doc/1
{
"firstName":"Chan",
"lastName": "Jackie",
"loginDate":"2018-07-24T10:29:48.103Z"
}
结果:
#查看 Mapping文件
GET mapping_test/_mapping
结果:
#Delete index
DELETE mapping_test
8)dynamic mapping,推断字段的类型
#新建index 和字段
PUT mapping_test/_doc/1
{
"uid" : "123",
"isVip" : false,
"isAdmin": "true",
"age":19,
"heigh":180
}
#查看 Dynamic Mapping
GET mapping_test/_mapping
结果:
9)dynamic 设置为false 情况
#默认Mapping支持dynamic,写入的文档中加入新的字段
PUT dynamic_mapping_test/_doc/1
{
"newField":"someValue"
}
#该字段可以被搜索,数据也在_source中出现
POST dynamic_mapping_test/_search
{
"query":{
"match":{
"newField":"someValue"
}
}
}
结果:
#修改为dynamic false
PUT dynamic_mapping_test/_mapping
{
"dynamic": false
}
#新增 anotherField
PUT dynamic_mapping_test/_doc/10
{
"anotherField":"someValue"
}
#该字段不可以被搜索,因为dynamic已经被设置为false
POST dynamic_mapping_test/_search
{
"query":{
"match":{
"anotherField":"someValue"
}
}
}
结果:
备注:上面结果可以看出, 没有在索引中到该value 。
#我们通过主键id看一下, 我们新插入的值到底是否存在
get dynamic_mapping_test/_doc/10
结果:
备注:上面结果说明,这个"anotherField":“someValue” 是有成功插入的, 验证了:dynamic已经被设置为false,新创建的字段无法被索引。
10)dynamic 设置为strict情况
#修改为strict
PUT dynamic_mapping_test/_mapping
{
"dynamic": "strict"
}
#写入数据出错,HTTP Code 400
PUT dynamic_mapping_test/_doc/12
{
"lastField":"value"
}
结果:
备注:从上图可以看出,创建新字段失败,提示信息中已告知是dynamic 设置为strict导致。
三、总结
- dynamic 设置一般为默认true,可以满足业务需求。
- dynamic 设置为false 情况,可以省去索引空间使用,节约空间但会导致新增的字段无法被索引。
- dynamic 设置为strict ,如果你的ES对应的index
中字段不允许新增,可以通过这种方式来实现,但前期需要将所有字段初始化好。 - dynamic 设置好以后,不允许修改, 如果要修改只能重构索引。
推荐阅读
-
Install Elasticsearch 5.0 on RHEL / CentOS
-
ElasticSearch 5.2.2 安装问题记录
-
解决Elasticsearch因jdk版本问题启动失败的问题
-
elasticsearch-Elasticsearch修改集群名字后索引数据失败
-
elasticsearch 使用快照进行备份
-
Elasticsearch实战系列(四)--索引数据简述
-
说说IOT和mapping table的那些事---几句话道出真相
-
Elasticsearch——》es近义词(同义词)配置
-
docker容器间使用network通信,示例:elasticsearch & kibana
-
ElasticSearch7笔记:基本操作and批量操作