Mapping Parameters

Elasticsearch在创建类型映射时可以指定映射参数,本节选取一部分常用的参数做介绍

定义nested类型

上一章介绍过,嵌套类型可以看成是一个特殊的对象类型,让对象数组独立检索。嵌套类型的定义方式如下:

image-20220717180433705

coerce

是否进行“强制类型转换”。默认是开启的,可以灵活的为每个字段设置是否开启Type Coercion:

image-20220717180646048

doc_values

doc_values是在文档索引时构建的磁盘数据结构,更好的支持排序、聚合以及脚本等使用需求。它存储与_source相同的值,但以面向列的方式存储,这对于排序和聚合来说更高效。几乎所有字段类型都支持doc_values,除了text和annotated_text字段。

所有支持文档值的字段都默认启用。如果你确定你不需要对字段进行排序或聚合,或者从脚本中访问字段值,你可以禁用文档值以节省磁盘空间。 对于占用空间大的索引,这个优化是很显示的;对于小的索引就没必要做优化了。

它的关闭方式如下:

PUT /sales
{
  "mappings": {
    "properties": {
      "buyer_email":{
        "type":"keyword",
        "doc_values": false
      }
    }
  }
}

norms

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参数

index 选项控制字段值是否被索引, 它可以设置成 true 或者 false, 没有被索引的字段将无法被搜索。

关闭方式:

PUT /metrics
{
  "mappings": {
    "properties": {
      "server_id":{
        "type": "integer",
        "index": false
      }
    }
  }
}

null_value

null 值不能被索引或者搜索。当一个字段被设置成 null(或者一个空数组,或者值全为 null 的数组)时, 该字段将被视为没有值。

null_value 参数允许你用一个特殊的值替换一个显示的 null 值, 以确保这个字段能被索引和搜索。

它的设置方式如下:

PUT /sales
{
  "mappings": {
    "properties": {
      "partner_id":{
        "type": "keyword",
        "null_value": "NULL"
      }
    }
  }
}

copy_to参数

copy_to 参数允许你创建自定义的字段,可以将多个字段的值复制到 group field, 然后可以作为单个字段进行查询。例如, first_namelast_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在设置映射时还可以指定其他很多参数,这部分参数可以参考官方文档