mapping不仅告诉ES一个Field中是什么类型,它还告诉ES如何索引数据以及数据是否能被搜索到,所以当查询没有返回相应的数据时,很有可能时mapping有问题。
组成及工作流程
一个mapping由一个或多个analyzer组成,一个analyzer又由一个或者多个filter组成的。
当ES索引文档时,它把字段中的内容传递给相应的analyzer,analyzer再传递给各自的filters。总结来说,mapping的作用就是执行一系列的指令将输入的数据转成可搜索的索引项。
mapping的创建方式
- 直接插入数据,es自动识别创建mapping。容易出问题
- 创建index的时候直接指定mappings,可以一次性创建多个mapping
PUT es_index
{
"settings": {
"index": {
"number_of_shards": "10", //分10个片
"number_of_replicas": "1" //1个备份
}
},
"mappings": {
"commercial_sku": { //这是其中一个mapping,你还可以创建其他mapping
"_timestamp": { //这个配置可以删掉
"enabled": true
},
"properties": {
"message": {
"type": "string"
},
"price": {
"type": "string"
},
"tid": {
"type": "string"
},
"user": {
"type": "string"
}
}
}
}
}
- index已经创建,新增一个mapping
PUT es_index/_mapping/article
{
"properties": {
"message": {
"type": "string"
},
"price": {
"type": "string"
},
"tid": {
"type": "string"
},
"user": {
"type": "string"
}
}
}
注意:
mapping一旦创建,只能追加;如果需要修改,只能删除整个index重新创建