mapping是类似于数据库中的表结构定义,主要作用如下:
- 定义index下的字段名
- 定义字段类型,比如数值型、浮点型、布尔型等
- 定义倒排索引相关的设置,比如是否索引、记录position等
查看Mapping:
通过PUT会自动生成对应的index及其mapping
dynamic参数:mapping中的字段类型一旦设置,禁止直接修改,因为 lucene实现的倒排索引生成后不允许修改,应该重新建立新的索引,然后做reindex操作。
但是可以新增字段,通过 dynamic 参数来控制字段的新增,这个参数的值如下:
- true:默认值,表示允许选自动新增字段,且可以通过该字段进行分词查询
- false:不允许自动新增字段,但是文档可以正常写入,但无法对字段进行查询等操作
- strict:严格模式,文档不能写入,报错
```json
PUT my_index
{
“mappings”: {
} }"dynamic": false, ##ES7.9版本语法
"properties":{
"title":{"type":"text"},
"name":{"type":"text"},
"age":{"type":"integer"}
}
POST my_index/_doc/1 { “title” : “还好hhh” }
POST my_index/_doc { “title” : “bi看电视剧” }
POST my_index/_doc { “title” : “bi看电视剧”, “desc”: “哈哈哈哈” ##心中的desc不在原来mapping中定义的字段,如果dynamic设置为false,该条数据可以插入,但是下面查询语句将失效 }
GET my_index/_search { “query”: { “match”: { “desc”: “哈哈哈” } } }
**copy_to参数:**作用是将该字段的值复制到目标字段,实现类似_all的作用。不会出现在_source中,只能用来搜索。
```json
PUT my_index
{
"mappings": {
"properties":{
"title":{"type":"text","copy_to": "{full_name}"},
"name":{"type":"text","copy_to": "{full_name}"},
"age":{"type":"integer"}
}
}
}
POST my_index/_doc/1
{
"title" : "还好hhh",
"name":"张三"
}
POST my_index/_doc
{
"title" : "bi看电视剧",
"name":"李四"
}
##可以通过如下字段进行查询到数据,注意字段需要加上{}括号,如果没有就查询不到数据
GET my_index/_search
{
"query": {
"match": {
"{full_name}": "张三"
}
}
}