Elasticsearch Index 的数据类型
索引的新增其实就是直接PUT一个json的对象,查询也是GET到一个json的对象。然而ElaticSearch并不是完全无结构的,在index中还有一个mapping,mapping管理了整个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_value与fielddata:为了优化聚合、排序、脚本等操作而设置的开关,禁用无法对此字段进行此类操作。fielddata用于text类型字段数据结构放内存的。
- boost:定义了字段在文档中的重要性/权重。新版本已经不用了。
文档的属性
- dynamic:是否允许动态的隐式增加字段。true、false、strict,默认true可以增加;为false时会忽略该新增字段,不会包含到mapping中去也不会建立索引,但是仍会存储该字段;为strict时遇到新字段,会抛出异常。
- properties:定义字段以及类型。
- dynamic_date_formats:该属性定义可以识别的日期格式列表。
本文暂时没有评论,来添加一个吧(●'◡'●)