2、相反,如果在查询时指定boost值,每一个查询都可以使用不同的boost值,灵活。
3、在索引中指定boost值,boost存储在记录中,从而会降低分数计算的质量。
- coerce
是否进行类型“隐式转换”。es最终存储文档的格式是字符串。
例如存在如下字段类型:
“number_one”: {
“type”: “integer”
}
声明number_one字段的类型为数字类型,那是否允许接收“6”字符串形式的数据呢?因为在JSON中,“6”用来赋给int类型的字段,也是能接受的,默认coerce为true,表示允许这种赋值,但如果coerce设置为false,此时es只能接受不带双引号的数字,如果在coerce=false时,将“6”赋值给number_one时会抛出类型不匹配异常。
可以在创建索引时指定默认的coerce值,示例如下:
PUT my_index
{
“settings”: {
“index.mapping.coerce”: false
},
“mappings”: {
// 省略字段映射定义
}
}
- copy_to
copy_to参数允许您创建自定义的_all字段。换句话说,多个字段的值可以复制到一个字段中例如,first_name和last_name字段可以复制到full_name字段如下:
PUT my_index
{
“mappings”: {
“_doc”: {
“properties”: {
“first_name”: {
“type”: “text”,
“copy_to”: “full_name”
},
“last_name”: {
“type”: “text”,
“copy_to”: “full_name”
},
“full_name”: {
“type”: “text”
}
}
}
}
}
表示字段full_name的值来自 first_name + last_name。
关于copy_to重点说明:
1、字段的复制是原始值,而不是分词后的词根。
2、复制字段不会包含在_souce字段中,但可以使用复制字段进行查询。
3、同一个字段可以复制到多个字段,写法如下:“copy_to”: [ “field_1”, “field_2” ]
- doc_values
当需要对一个字段进行排序时,es需要提取匹配结果集中的排序字段值集合,然后进行排序。倒排索引的数据结构对检索来说相当高效,但对排序就不那么擅长了。
业界对排序、聚合非常高效的数据存储格式首推列式存储,在elasticsearch中,doc_values就是一种列式存储结构,默认情况下绝大多数数据类型都是开启的,即在索引时会将字段的值(或分词后的词根序列)加入到倒排索引中,同时也会该字段的值加入doc_values中,所有该类型的索引下该字段的值用一列存储。
doc_values的使用示例:
PUT my_index
{
“mappings”: {
“_doc”: {
“properties”: {
“status_code”: {
“type”: “keyword” // 默认情况下,“doc_values”:true
},
“session_id”: {
“type”: “keyword”,
“doc_values”: false
}
}
}
}
}
- dynamic
是否允许动态的隐式增加字段。在执行index api或更新文档API时,对于_source字段中包含一些原先未定义的字段采取的措施,根据dynamic的取值,会进行不同的操作:
-
true,默认值,表示新的字段会加入到类型映射中。
-
false,新的字段会被忽略,即不会存入_souce字段中,即不会存储新字段,也无法通过新字段进行查询。
-
strict,会显示抛出异常,需要新使用put mapping api先显示增加字段映射。
dynamic设置为false,也是可以通过put mapping ap