定制化dynamic mapping策略
定制dynamic策略
dynamic的参数值
true:默认值。遇到陌生字段,就进行dynamic mapping(动态添加字段)
false:遇到陌生字段,就忽略
strict:遇到陌生字段,就报错
如下示例:
在全局的mapping域里dynamic的参数值是strict,也就是插入数据的字段不存在mapping中指定的,则会报错
在address域里dynamic的参数值是true,则出现不存在的字段,会自动使用默认的mapping。
PUT /my_index
{
"mappings": {
"my_type": {
"dynamic": "strict",
"properties": {
"title": {
"type": "text"
},
"address": {
"type": "object",
"dynamic": "true"
}
}
}
}
}测试:
由于在全局的mapping域里出现了陌生的content字段,则报错
去掉content字段,重试,则成功
查看mapping,查看address对象下city和province字段动态生成的mapping
定制dynamic mapping策略
(1)date_detection (日期检测)
默认会按照一定格式识别date,比如yyyy-MM-dd。但是如果某个field先过来一个2017-01-01的值,就会被自动dynamic mapping成date,后面如果再来一个"hello world"之类的值,就会报错。可以手动关闭某个type的date_detection,如果有需要,自己手动指定某个field为date类型。
(2)定制自己的dynamic mapping template(field 级别)
示例
title没有匹配到任何的dynamic模板,默认就是standard分词器,不会过滤停用词,is会进入倒排索引,用is来搜索是可以搜索到的
title_en匹配到了dynamic模板,就是english分词器,会过滤停用词,is这种停用词就会被过滤掉,用is来搜索就搜索不到了
(3)定制自己的default mapping template(type 级别)
资料:
Last updated
Was this helpful?