参考ES 7版本官方文档
官方7.17文档
挑了一些我觉得重要的点总结
如有谬误,欢迎指正
mapping是什么
在ES里创建一个索引
PUT demo_index
{
"mappings": {
"dynamic": false
"properties": {
"demo_id": {
"type": "text"
}
}
}
}
上面的properties里定义了字段demo_id,它的类型是text。dynamic选择了false说明mapping不需要动态规则来匹配,这种情况下进行搜索时和普通的关系型数据库搜索非常类似。
mapping类似于数据库中的表结构定义,定义以下这些内容
- 定义字段名称
- 定义字段数据类型
- 字段、倒排索引的相关配置
但是和比如mysql这样的数据相比还是有很多不同之处,搜索的字段类型可以提前定义好,也可以不定义让ES来推测,也可在搜索的时候动态加入新字段。
GET /demo_index/_mapping
查看mapping
动态mapping
如果你想使用动态mapping就将上面提到的dynamic字段设置为true或者runtime
默认动态mapping
ES允许直接插入文档,不需要提前定义类型、字段 ,当你查询的时候会自动推测匹配显示出来。
curl -X PUT "localhost:9200/data/_doc/1?pretty" -H 'Content-Type: application/json' -d'
{ "count": 5 }
使用kibana的话直接PUT data/_doc/1 … 就行
自动检测类型和添加字段就是动态mapping,ES有默认的检测规则,我们自己也可以定义自己的规则。
设计自己的mapping检测模板
这一块比较复杂
match_mapping_type
这个可以理解为根据字段默认检测出来的类型进行匹配
用的官方文档的案例:
可以看到当默认检测出来的字段类型为integer时,将替换为long类型;如果检测出来的类型为text或者keyword类型,将会替换为string类型。
PUT demo_index
{
"mappings": {
"dynamic_templates": [
{
"integers": {
"match_mapping_type": "long",
"mapping": {
"type":