专业的编程技术博客社区

网站首页 > 博客文章 正文

「Elasticsearch」-索引数据类型大盘点

baijin 2025-02-10 11:21:59 博客文章 22 ℃ 0 评论

Elasticsearch Index 的数据类型

索引的新增其实就是直接PUT一个json的对象,查询也是GET到一个json的对象。然而ElaticSearch并不是完全无结构的,在index中还有一个mappingmapping管理了整个index的各个字段的属性,也就是定义了整个index中document的结构。

mapping并非需要提前定义,当执行新增时,ES会自动新增没有定义过的字段的映射,字段的类型会自动判断或者从预先定义的索引模板中查找。

ES会保存一份原始文档(_source字段指向的位置,get就是获取此字段的值),并将所有需要索引字段合集放在文档的_all字段中,所有的词项与文档关系(_id)放置在倒排索引(倒排记录表)中。也可以独立的存储某个字段,只要设置store:true即可,原始值将被写入索引。

基本数据类型

索引文档中的数据类型由字段的属性type指定,ElasticSearch支持的基础数据类型主要有:

  • 字符串类型:string,字符串类还可被分为text和keyword类型,text类型用于索引全文值的字段,它们会被分词;keyword类型用于索引结构化内容的字段,不会被分析只能按其确切值进行搜索;
  • 数值类型:字节(byte)、2字节(short)、4字节(integer)、8字节(long)、float、double;
  • 布尔类型:boolean,值是true或false;
  • 时间/日期类型:date,用于存储日期和时间,可选format字段指定显式的格式;
  • 二进制类型:binary,实际存储的是Base64编码的字符串,默认不存储和可搜索,实际使用较少;

复杂数据类型

  • IP地址类型:ip,以字符串形式存储IPv4地址;
  • 特殊数据类型:token_count,单据计数,用于存储索引的字数信息;
  • 地理形状类型:geo_point和geo_shape,可用lat和lon键、“lat,lon”字符串、数据[lon,lat]等三种格式表示对象的地理位置。geo_shape则是多个geo_point集合组成的任意地理形状。
  • 对象类型:object,单个Json对象,不需要将该字段设置type为object显式,只需定义字段的properties属性来指定对象的具体格式。
  • 嵌套类型:nested,Json对象数组,指定type为nested,并同对象类型一样用properties属性定义嵌套的对象具体格式。查询时,也需要放在nested参数中。
  • 数组类型:不需要单独设置,当插入数据为数组时,该字段就会自动变成数组类型的。
  • 区间类型:有integer_range、float_range、long_range、double_range、date_range。

索引的元字段

索引的元字段(Meta-field)是以下划线开头的字段,元字段不需要用户定义,在任一文档中都存在,有点类似于数据库的表结构数据,部分元字段可以被配置。元字段有这些类型:标识元数据、索引元数据、文档元数据、路由元数据以及其他类型的元数据,当然不是每个文档这些元字段都有的。

  • 标识元数据,此类型的元数据是不可变的:_index:返回文档所属的索引。_id:文档的ID,等同于物理主键。_uid:文档的type和id。_type:文档类型(type)。
  • 索引元数据_field_names:不为null值的每个字段名称。_all :此字段存储其他字段的数据以便搜索,新版本已经删除。
  • 文档元数据_source:此字段存储了原始的JSON文档。默认是启用的,可以关闭,如果需要高亮显示那么它与store至少需要开启一个。一般不会关闭,否则索引重建、更新、或高亮都不无执行。_size:文档的_source字段中字节数。_version:版本,对这个ID的文档的操作次数。
  • 路由元数据以及其他类型的元数据_routing:路由字段,将一个文档值进行哈希映射,并将该文档路由到指定的分片。默认以_id进行哈希,自定义路由字段后更新与查询都需要同时也指定routing。_meta:一般用来存储应用相关的元信息。

字段的公共属性

字段属性也就是参数用来对字段进行配置,常见的有:type用来定义此字段的数据类型;properties用来指定Object或者nested类型中的字段的;fields用来把某个字段扩充为多字段类型(子字段)。

另外还有一些公共的属性用于约定字段关于索引方面特性的:

  • index:是否编入索引被搜索,该属性共有三个有效值:analyzed、no和not_analyzed。
  • analyzer:指定建立索引和搜索的分析器名称,默认是 standard 标准分析器。使用_analyze参数可以测试效果。
  • null_value:当字段的值为NULL时,该字段使用null_value代替NULL值。
  • ignore_above:字节数量大于该数值之后,超过长度的部分字符数据将不能被analyzer处理。
  • format:指定日期的格式,日期类型的字段才生效。如"yyyy-MM-dd HH:mm:ss.SSS"等。
  • store:是否将字段的原始值写入索引字段,默认值是no。
  • enabled:是否建立索引,默认情况下为true。只会存储_source中。
  • doc_valuefielddata:为了优化聚合、排序、脚本等操作而设置的开关,禁用无法对此字段进行此类操作。fielddata用于text类型字段数据结构放内存的。
  • boost:定义了字段在文档中的重要性/权重。新版本已经不用了。

文档的属性

  • dynamic:是否允许动态的隐式增加字段。true、false、strict,默认true可以增加;为false时会忽略该新增字段,不会包含到mapping中去也不会建立索引,但是仍会存储该字段;为strict时遇到新字段,会抛出异常。
  • properties:定义字段以及类型。
  • dynamic_date_formats:该属性定义可以识别的日期格式列表。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表