mapping 顾名思义,代表了映射关系。是文档中字段和数据类型的映射关系
为什么要了解mapping
虽然elasticsearch中已尽有的动态mapping(Dynamic Mapping),而且新增字段默认也会添加新的mapping,但是毕竟是机器,有时会推算的不对,比如地理位置信息,特殊格式化的日期类型等。这时,如果需要es提供排序、聚合等查询功能,就不能满足我们的需求。
什么是mapping
通过手动设置mapping,我们可以
定义文档里字段的数据类型
定义字段的名称
定义对应字段的是否索引
定义对应字段的分词方式
mapping会把JSON文档文档映射成Lucene所需要的扁平格式
一个mapping属于一个索引的type
每个文档都属于一个Type
一个type又一个mapping定义
7.0开始,不需要在mapping定义中指定type信息,因为默认每个索引只有一个type叫"_doc"
查询mapping
#GET 索引名/_mapping
GET mapping_test/_mapping
设置mapping
PUT users
{
"mappings" : {
"properties" : {
"firstName" : {
"type" : "text",//text类型全文搜索
"fields" : {
"keyword" : {
"type" : "keyword",//keyword支持聚合查询
"ignore_above" : 256
}
}
},
"lastName" : {
"type" : "keyword",
"null_value": "NULL"//支持字段为null,只有keyword类型支持
},
"mobile" : {
"type" : "text",
"index": false//此字段不被索引
},
"address":{
"type":"text",
"index_options":"offsets"//控制倒排索引记录的内容。offsets最多,记录四个
}
}
}
}
Dynamic Mapping
什么是动态mapping
在写入文档时,如果索引不存在,会自动创建索引,字段类型的自动识别如下:
JSON类型
Elastic search类型