前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Elasticsearch 重要mapping参数详解(三)

Elasticsearch 重要mapping参数详解(三)

原创
作者头像
问道白发
修改2019-12-16 11:15:12
6.3K2
修改2019-12-16 11:15:12
举报
文章被收录于专栏:ESES

一、概览

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

1.1、影响性能的参数

参数

说明

index

默认true,字段是否analyzed,false不分词,不能被查询

enable

默认true,字段是否索引,不索引能减少CPU使用,但是不能搜索

store

默认false,如果需要获取的字段只是文档中的小数据,这些字段可以store,减少IO

doc_values

默认true,优化字段排序聚合脚本访问,耗用磁盘空间

fielddata

默认false,针对text类型排序、聚合、脚本访问优化,尽量避免,操作昂贵

norms

默认true,如果字段不需要参与评分,设置为false,减少磁盘占用

index在早些版本的时候的值是analyzed与not_analyzed,分别对应现在的true与false。

举一个简单的例子:如果一个字段的值为:"es is awsome"。

如果这个字段index设置为true,那么我们搜索的时候搜索'es'也可以搜索到这个字段所在的文档。

如果这个字段index设置为false,那么通过'es'搜索就不能搜索到改字段所在的文档。

index与enable的区别:

  1. index为false,不分词但是还是能够通过完全匹配搜索到,并且会影响文档的评分。
  2. enable为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的时候设置才生效。

param-enable.png
param-enable.png

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

六、store

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

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

param-store.png
param-store.png

查询:

代码语言:txt
复制
{
    "_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中没有的字段,就不允许添加文档
dynamic.png
dynamic.png

八、doc_values

默认true,如果不需要对字段进行排序和聚合,或者脚本中访问字段,可以设置为false,节约磁盘空间,也减少添加索引的磁盘IO,因为不用创建doc_valuses这个磁盘数据结构了。

doc_value是存储在磁盘的数据结构,在添加文档的时候就创建了,它使用面向列的方式存储让它有更好的排序和聚合效率。

doc_values不支持text和annotated_text类型的字段。

九、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

代码语言:txt
复制
{
  "mappings": {
    "properties": {
      "date": {
        "type":   "date",
        "format": "yyyy-MM-dd"
      }
    }
  }
}

mapping-format

十二、null_value

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

代码语言:txt
复制
{
  "mappings": {
    "properties": {
      "status_code": {
        "type":       "keyword",
        "null_value": "NULL" 
      }
    }
  }
}

十三、fields

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

代码语言:txt
复制
{
  "mappings": {
    "properties": {
      "city": {
        "type": "text",
        "fields": {
          "raw": { 
            "type":  "keyword"
          }
        }
      }
    }
  }
}

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

fields

十四、search_analyzer

搜索的时候使用的分析器

search_analyzer

十五、normalizer

设置字段规范化处理器,主要用于过滤掉特殊字符、转换大小写等。

针对keyword,在查询或者索引之前执行。

normalizer

十六、文档

Elasticsearch-mapping参数

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 一、概览
    • 1.1、影响性能的参数
      • 1.2、其他参数
      • 四、ignore_malformed
      • 五、enable
      • 六、store
      • 七、dynamic
      • 八、doc_values
      • 九、fielddata
      • 十、index_option
      • 十一、format
      • 十二、null_value
      • 十三、fields
      • 十四、search_analyzer
      • 十五、normalizer
      • 十六、文档
      相关产品与服务
      数据保险箱
      数据保险箱(Cloud Data Coffer Service,CDCS)为您提供更高安全系数的企业核心数据存储服务。您可以通过自定义过期天数的方法删除数据,避免误删带来的损害,还可以将数据跨地域存储,防止一些不可抗因素导致的数据丢失。数据保险箱支持通过控制台、API 等多样化方式快速简单接入,实现海量数据的存储管理。您可以使用数据保险箱对文件数据进行上传、下载,最终实现数据的安全存储和提取。
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档