elasticsearch的映射
一.简介:
映射:在创建索引时,可以预先定义字段的类型(映射类型,也就是type,一个索引可以有一个或多个类型)及相关属性。
Elasticsearch会根据JSON源数据的基础类型猜测你想要的字段映射。将输入的数据转变成可搜索的索引项。Mapping就是我们定义的字段的数据类型,同时告诉Elasticsearch如何索引数据以及是否可以被搜索。
作用:会让索引建立的更加细致和完善。
二.映射类型:
1.1 动态映射:
字段和属性不需要预先事先定义。在你添加文档的时候,就会自动添加到索引,这个过程不需要事先在索引进行字段数据类型匹配之类,他会自己推断数据类型,动态映射是可以配置的。
1.2 显示映射:
和动态映射相反,显示映射需要我们在索引映射中进行预先定义。
1.3 更新当前映射:
一般我们不会改变当前的索引的映射类型和字段,因为这样,意味着废弃已经索引的文档。我们应该根据映射创建新的索引并重新索引数据。
三.内置类型:
1.string类型:
text(会进行分析【分词,建立倒排索引】),keyword【不会分析,只有完全匹配才能搜索到】,(string类型在es5后已经废弃了)
2.数字类型:
long、integer、short、byte、double、float
3.日期类型:
date(可以解析date和datetime(时分秒)等日期)
4.bool类型:
boolean(可以解析传递过来的值,True/False/Yes/No等都能解析成bool类型)
5.二进制数据类型:
binary(不会被检索)
6.复杂数据类型
数组:无需专门的数据类型
对象数据类型:object,单独的JSON对象
嵌套数据类型:nested,关于JSON对象的数组
如Company就是一个object类型
emplyment是一个nested类型
7.geo类型(地理数据类型):
地理点数据类型:geo_point,经纬点
地理形状数据类型:geo_shape
8.专业数据类型:
IPv4数据类型
完成数据类型:completion
单词计数数据类型:token_counts
三.数据类型可以接收的参数
1.简单概括:
属性 | 描述 | 适合类型 |
store | 值为yes表示存储,为no表示不存储,默认为no | all |
index | yes表示分析,no表示不分析,默认为true | string |
null_value | 如果字段为空,可以设置一个默认值,比如"人生" | all |
analyzer | 可以设置索引和搜索时用的分析器,默认使用的是standard分析器,还可以使用whitespace,simple,english | all |
include_in_all | 默认es为每个文档定义一个特殊域_all,它的作用是让每个字段被搜索到,如果不想让某个字段被搜索到,可以设置为false | all |
format | 时间格式字符串的模式 | date |
2.详细:
2.1符串可以接收的参数:
2.2数字型可以接收的参数:
2.3日期型可以接收的参数:
2.4布尔型可以接收的参数:
四.演示
1.创建索引及映射(创建映射后无法修改):
PUT lagou { #参数mappings "mappings": { #指定表jobs "jobs": { #参数(中文特性,性能) "properties": { #指定类型为text,会分词等 "title":{ "type":"text" }, #指定类型为integer "salary_min": { "type":"integer" }, "city":{ #指定类型为keyword,不分词,必须完全匹配才搜索得到 "type":"keyword" }. #嵌套properies "Company":{ "properties":{ "name":{ "type":"text" }, "address":{ "type":"text" } } }, #date类型 "pub-date":{ "type":"date" } } } } }
运行成功
查看索引信息一致
2.数据插入:
PUT lagou/job/1 { "title":"Java后端研发", #这里插入时,为"20000"也行,会尝试转换为整型 "salary_min":20000, "city":"北京", "Company":{ "name":"百度", "address":"北京" }, "pub_date":"2018-10-28" } PUT lagou/job/2 { "title":"Python分部式爬虫", "salary_min":20000, "city":"成都", "Company":{ "name":"美团", "address":"成都" }, "pub_date":"2018-10-27" } PUT lagou/job/3 { "title":"前端研发", "salary_min":20000, "city":"北京", "Company":{ "name":"阿里", "address":"北京" }, "pub_date":"2018-10-28" }
3.获取mapping:
#所有 GET _all/_mapping #索引为拉钩 GET lagou/_mapping #索引为lagou,type为job GET lagou/_mapping/job
五.参考文献:
https://blog.csdn.net/zhanglh046/article/details/78529208