Elasticsearch在创建类型映射时可以指定映射参数,本节选取一部分常用的参数做介绍
上一章介绍过,嵌套类型可以看成是一个特殊的对象类型,让对象数组独立检索。嵌套类型的定义方式如下:
是否进行“强制类型转换”。默认是开启的,可以灵活的为每个字段设置是否开启Type Coercion
:
doc_values
是在文档索引时构建的磁盘数据结构,更好的支持排序、聚合以及脚本等使用需求。它存储与_source
相同的值,但以面向列的方式存储,这对于排序和聚合来说更高效。几乎所有字段类型都支持doc_values
,除了text和annotated_text字段。
所有支持文档值的字段都默认启用。如果你确定你不需要对字段进行排序或聚合,或者从脚本中访问字段值,你可以禁用文档值以节省磁盘空间。 对于占用空间大的索引,这个优化是很显示的;对于小的索引就没必要做优化了。
它的关闭方式如下:
PUT /sales
{
"mappings": {
"properties": {
"buyer_email":{
"type":"keyword",
"doc_values": false
}
}
}
}
norms 是一个用来计算文档/字段得分(Score)的"调节因子”。TF-IDF、BM25算法计算文档得分时都用到了norms参数
Elasticsearch中的一篇文档(Document),里面有多个字段。解析器将用户输入的查询字符串解析成Terms ,在多字段搜索中,每个 Term 会去匹配各个字段,为每个字段计算一个得分,各个字段的得分组合起来,最终得到一篇文档的得分。
开启norms之后,每篇文档的每个字段需要一个字节存储norms。对于 text 类型的字段而言是默认开启norms的,因此对于不需要评分的 text 类型的字段,可以禁用norms, 以节省磁盘空间。
它的关闭方式如下:
PUT /products
{
"mappings": {
"properties": {
"tags":{
"type": "text",
"norms": false
}
}
}
}
index 选项控制字段值是否被索引, 它可以设置成 true 或者 false, 没有被索引的字段将无法被搜索。
关闭方式:
PUT /metrics
{
"mappings": {
"properties": {
"server_id":{
"type": "integer",
"index": false
}
}
}
}
null 值不能被索引或者搜索。当一个字段被设置成 null(或者一个空数组,或者值全为 null 的数组)时, 该字段将被视为没有值。
null_value 参数允许你用一个特殊的值替换一个显示的 null 值, 以确保这个字段能被索引和搜索。
它的设置方式如下:
PUT /sales
{
"mappings": {
"properties": {
"partner_id":{
"type": "keyword",
"null_value": "NULL"
}
}
}
}
copy_to
参数允许你创建自定义的字段,可以将多个字段的值复制到 group field
, 然后可以作为单个字段进行查询。例如, first_name
和 last_name
可以复制到 full_name
字段中, 如下所示 :
PUT /sales
{
"mappings": {
"properties": {
"first_name": {
"type": "text",
"copy_to": "full_name"
},
"last_name": {
"type": "text",
"copy_to": "full_name"
},
"full_name": {
"type": "text"
}
}
}
}
Elasticsearch在设置映射时还可以指定其他很多参数,这部分参数可以参考官方文档