ElasticSearch5.6.X 映射可以配置哪些属性

  • 映射
      • 数据类型
      • 元数据
      • 字段属性

映射

Elasticsearch映射虽然有idnex和type两层关系,但是实际索引时是以index为基础的。如果同一个index下不同type的字段出现mapping不一致的情况,虽然数据依然可以成功写入并生成各自的mapping,但实际上fielddata中的索引结果却依然是以index内第一个mapping类型来生成的

数据类型

因为es是使用json作为数据交互的格式的,所以json的数据类型的都支持,除此之外es还提供现实中经常会使用的集中特殊数据类型。

核心数据类型

  • 字符串:text,keyword
  • 数字:long, integer, short, byte, double, float, half_float, scaled_float
  • 布尔值:boolean
  • 时间:date
  • 二进制:binary
  • 范围:integer_range, float_range, long_range, double_range, date_range

复杂数据类型

  • 数组:array
  • 对象:object
  • 堆叠/嵌套对象: nested
  • 地理:geo_point,geo_point
  • IP: ip
  • 字符个数:token_count(输入一个字符串,保存的是它的长度)

注意 : 因为es中有自动映射的功能,所以在新增一个字段时不强制要求先确定好它的数据类型,es会根据值,寻找最合适的数据类型来配置字段。但一旦确定好后,下次使用字段时就必须使用第一次确定的类型,如果你传入的数据不是现在配置的类型,es会强制转换数据类型,如果转换不成功就会报出异常。

元数据

映射下除了自己配置的属性还有一些元数据存在。你可以把他们当成默认的字段,除了类型已经确定也可以设置其他属性的值比如分词器,是否存储:

  • _all : 它是文档中其他字段的值整合成的一个大字符串,用空格分割。它进行了索引但没有存储,所以我们只能对他进行搜索不能获取。如果我们没有指定搜索的字段,就默认是在_all字段上进行搜索。
  • _source :文档信息
    包含在文档在创建时的实际主体,它会被存储但不会被索引,用于get或search是返回主体。如果你并不关系数据的主体,只注重数量,那可以将此字段禁用

  • _routing :路由字段
    es会使用下面的计算公式计算数据应保存在哪个分片,索引指定一个路由字段可以自己来控制哪些值放在一起。

    shard_num = hash(_routing) % num_primary_shards

  • _meta 自定义的元数据 ,因为元数据是每个文档都会带的,索引如果你想要在每个文档上标注一些信息,就可以使用此属性,自定义一些元数据。

  • _field_names :保存着非空值得属性名集合,可以通过它查询包含某个字段非空值的文档

  • _id :主键
  • _index :索引
  • _type :类型
  • _uid :类型和id的组合 uid字段的值可以在查询、聚合、脚本和排序中访问:
  • _parent :父类,可用于关联两个索引

字段属性

  • type 数据类型
    改属性用来指定字段的数据类型,一但指点后就不能再修改,如果数据不是以设置的数据类型传入,es会去转换数据,装换不成功则报错。具体可配置的参数,可看前面的数据类型说明。

  • analyzer 分析器
    用于指定索引创建时使用的分析器是什么,即对同一段内容,不同的分析器会用不同的方式分词,最后在倒排索引上的值是不同的。我们来看下内建的几个分析器对同一句话分析的结果

    标准分析器 standard

    标准分析器是Elasticsearch默认使用的分析器。它是分析各种语言文本最常用的选择。它根据 Unicode 联盟 定义的 单词边界
    划分文本。删除绝大部分标点。最后,将词条小写。

    简单分析器 simple

    简单分析器在任何不是字母的地方分隔文本,将词条小写。

    空格分析器 whitespace

    空格分析器在空格的地方划分文本。

    语言分析器 :english

    特定语言分析器可用于 很多语言。它们可以考虑指定语言的特点。例如, english分析器附带了一组英语无用词(常用单词,例如 and 或者 the )它们对相关性没有多少影响),它们会被删除。 由于理解英语语法的规则,这个分词器可以提取英语单词的 词干 。

    分词结果对比

    原句:"There , are (Tom-Cat) and Jerry_moust ."
    standard:[there are tom cat and jerry_mouse] #分割短语,去掉符号,转小写
    simple:[there are tom cat and jerry mouse] #将下划线也分割
    whitespace:[There , are (Tom-Cat) and Jerry_mouse .] #空格分割 不做其他处理
    english:[tom cat jerry_mous] #剩下单词的词干 
    

    除了内建的分析器,我们还可以通过插件的形式安装分词器,比如IK分析器。还可以通过setting下的analysis来自己定义分析器,只有当前索引可用。

  • index 是否索引

    索引选项控制字段值是否被索引。它接受true或false,默认为true。没有索引的字段不是可查询的。

  • store
    属性值是否被存储,默认情况下字段是可以被搜索但是内容不存储的,值一般都是保存在_source中。但比如一篇文章你有它的内容和原网址,现在需要对内容进行检索,但查看是跳转到它原网址的,那这时就不需要存储内容了。

  • fielddata 现场数据
    如果你要对一个text类型进行聚合操作,你必须设置这个参数为true。

  • doc_values 文档数据
    建立一个文档对应字段的“正排索引”,其实就是把文档的字段按列存储了,它不会保存分析的字段。方便聚合排序时访问。
  • format 默认格式
    一般用于时间格式的数据,指定默认的数据格式, “yyyy-MM-dd HH:mm:ss”

  • search_analyzer 搜索分析器
    指定搜索时使用的分析器,一般不设置在搜索时就会使用创建索引时使用的分析器,如果要自己指定不同的也只要配置即可。

  • boost 分值
    指定字段的相关性评分默认是1.0,数值越大,搜索时排序时使用。也可以直接通过查询时指定分值的方式

  • coerce 是否转换
    在插入数据时,在插入数据类型和映射类型不一致的情况下是否强制转换数据类型。默认是开启的

  • normalizer 转换器
    因为keyword类型的字段是不进行分析的,但是我们又想要将其统一成一个规则,比如都是小写,比如用ASCILL进行编码,其实就是个给keyword用的分析器。可以在setting下的analysis下定义自己的normalizer使用

  • copy_to 同步复制
    在插入值是,会把值一同放到另一个字段中。主要用于自己定义一个类似于_all字段的字端。

  • dynamic 动态映射控制
    该字段是用来控制动态映射的,它有三个值
    -true-自动添加映射
    -false-新值不索引,不能被搜索,但返回的命中源字段中会存在这个值
    -strict-遇到新值抛出异常

  • enabled 是否启动
    这个值是否要用于搜索

  • ignore_above 忽视上限
    一个字符串超过指定长度后就不会索引了

  • ignore_malformed 忽视错误数据
    比如一个文档数据传过来,只用一个字段的数据时不能被存储,ES会抛出异常并且不会存储此数据。我们就可以配置此属性保证数据被存储

  • include_in_all 是否保存在_all字段中

  • fields 多字段配置
    比如出现标题既要索引,又有不用索引的情景。我们不能对一个字段设置两个类型,又不想再建一个不同类型的相同字段。我们可以使用多字段的方式,在保存数据时,我们只需保存一个字段,ES会默认将数据保存到这个字段下的多字段上。

  • null_value 空值
    假如你插入的数据为空,或者数据中没有这个字段的值。那这个文档的这个字段就不参与搜索了。我们可以通过指定一个显示的空值来让他能够参与搜索

  • norms 规范
    如果一个字段只用于聚合,可以设置为false

  • properties 属性
    对于对象类型或者嵌套类型,他们会有子字段的存在,可用此属性配置子字段的属性

参考文档: https://www.elastic.co/guide/en/elasticsearch/reference/5.6/mapping.html

你可能感兴趣的:(ElasticSearch5.6.X 映射可以配置哪些属性)