Elasticsearch mapping性能相关参数详解

目录

    • 一、概览
      • 1.1 影响性能的参数
      • 1.2 其他
    • 二、ignore_malformed
    • 三、enable
    • 四、store
    • 五、dynamic
    • 六、doc_values
    • 七、fielddata
    • 八、index_option
    • 九、format
    • 十、normalizer
    • 十一、null_value
    • 十二、search_analyzer
    • 十三、fields
    • 十四、文档

一、概览

我们先来看一下一些常用的参数的简介,大致明白这些参数的含义,后面会对一些重要的参数做一个更加详细一些的说明。

1.1 影响性能的参数

参数 说明
index 默认true,字段是否索引
enable 默认true,字段是否索引,不索引能减少CPU使用,但是不能搜索
store 默认false,如果需要获取的字段只是文档中的小数据,这些字段可以store,减少IO
doc_values 默认true,优化字段排序聚合脚本访问,耗用磁盘空间
fielddata 默认false,针对text类型排序、聚合、脚本访问优化,尽量避免,操作昂贵
norms 默认true,如果字段不需要参与评分,设置为false,减少磁盘占用

很多term操作的字段norms都可以设置为false,比如很多日期字段,一般很少会在日期上做全文索引的,当然具体问题具体分析。

索引结构化的字段,比如email地址、主机名、状态码和标签这些可以设置为keyword类型的字段norms都可以考虑设置为false。

1.2 其他

参数 说明
boost 默认1,评分加权系数
analyzer 字段使用的分词器
similarity 评分使用的算法
fields 一个字段多种处理方式
null_value 设置空值的默认值
search_analyzer 搜索使用的分词器
ignore_above 设置索引和store的长度,超过长度的忽略
copy_to 将该字段拷贝到指定字段,方便通过一个字段搜索
ignore_malformed 默认false,添加文档时忽略该字段的异常数据
index_option 倒排索引的内容,docs、freqs、positions、offsets
coerce 默认true,是否允许数据类型强制转换,如字符串转数字,浮点转整型
dynamic 默认true,是否允许根据文档动态添加mapping类型,true\false\strict

二、ignore_malformed

非常有用的一个参数,顾名思义,忽略掉不正常的字段类型。

例如,添加文档的时候一个date类型的值被设置为了email字符串,或者其他不能转换为date的类型的时候,ES就会直接抛出异常。

如果,ignore_malformed设置为true,就会忽略掉出错的字段,正常处理其他字段。

三、enable

简单的来说enable控制的这个字段是否可以索引,默认为true,因为我们使用ES的目的就是希望能够进行全文索引。

如果有的字段我们希望能够查到数据,但是并不希望索引影进而响文档的评分该怎么办呢?

将enable设置为false就可以了。

注意:enable只能在最顶层,并且type为object的时候设置才生效。

Elasticsearch mapping性能相关参数详解_第1张图片

enable设置为true,虽然不能被索引,但是可以通过_source获取数据。

四、store

store控制数据存储方式,设置为true就会单独存储一份。如果查询是从一个很多的文档中检索几个小的字段,就可以将小的字段设置为store来单独存储。

这种方式比从_source中检索,然后排除掉效率要高一些,因为减少IO操作。

Elasticsearch mapping性能相关参数详解_第2张图片

查询:

{
    "_source": false,
    "stored_fields": [ "title", "date" ] 
}

通过stored_fields方式,默认就不会获取_source

五、dynamic

dynamic设置的是ES是否可以动态探测文档字段,并且在mapping中动态的修改添加相应的类型。

dynamic有3个值:

  1. true 表示允许动态探测文档字段添加修改mapping类型
  2. false 表示不会动态修改mapping,但是如果文档中有mapping中没有的字段也能添加成功,但是不会索引该字段
  3. strict 表示如果文档中有mapping中没有的字段,就不允许添加文档

Elasticsearch mapping性能相关参数详解_第3张图片

六、doc_values

默认true,如果不需要对字段进行排序和聚合,或者脚本中访问字段,可以设置为false,节约磁盘空间

text类型不支持doc_values

七、fielddata

因为doc_values不支持text类型,所以有了fielddata,fielddata是text版本的doc_values,也是为了优化字段进行排序、聚合和脚本访问。

和doc_values不同的是,fielddata使用的是内存,而不是磁盘。

加载fielddata是一个昂贵的过程,所以默认是false。

强烈建议不要使用fielddata,在设计的时候就应该避免使用fielddata

fielddata

八、index_option

存储倒排索引的哪些信息,4个可选参数:

  1. docs:索引文档号
  2. freqs:文档号+词频
  3. positions:文档号+词频+位置,通常用来距离查询
  4. offsets:文档号+词频+位置+偏移量,通常被使用在高亮字段

分词字段默认是positions,其他默认时docs

九、format

{
  "mappings": {
    "properties": {
      "date": {
        "type":   "date",
        "format": "yyyy-MM-dd"
      }
    }
  }
}

mapping-format

十、normalizer

设置字段规范化处理器。

normalizer

十一、null_value

null值不能被搜索,可以给空值设置一个默认字符串。

{
  "mappings": {
    "properties": {
      "status_code": {
        "type":       "keyword",
        "null_value": "NULL" 
      }
    }
  }
}

十二、search_analyzer

search_analyzer

十三、fields

如果想在一个字段上做多种操作,比如一个type为text的字段,要做全文索引,有需要排序和聚合操作。

{
  "mappings": {
    "properties": {
      "city": {
        "type": "text",
        "fields": {
          "raw": { 
            "type":  "keyword"
          }
        }
      }
    }
  }
}

这样query操作可以在city上进行,sort与aggs操作就可以在city.raw上进行。

fields

十四、文档

Elasticsearch-mapping参数

你可能感兴趣的:(DB)