ElasticSearch7.4的数据类型,Mapping Type, 指定索引Document的Mapping Type
基础数据类型:(ELasticsearch 5.X之后的字段类型不再支持string,由text或keyword取代)
一、字符串
1.1 文本类型 text 当一个字段需要用于全文搜索(会被分词), 比如产品名称、产品描述信息, 就应该使用text类型. text的内容会被分词, 可以设置是否需要存储: "index": "true|false". text类型的字段不能用于排序, 也很少用于聚合. 1.2 关键字类型 keyword 当一个字段需要按照精确值进行过滤、排序、聚合等操作时, 就应该使用keyword类型. keyword的内容不会被分词, 可以设置是否需要存储: "index": "true|false".
二、数字类型:
byte 有符号的8位整数, 范围: [-128 ~ 127] short 有符号的16位整数, 范围: [-32768 ~ 32767] integer 有符号的32位整数, 范围: [$-2^{31}$ ~ $2^{31}$-1] long 有符号的32位整数, 范围: [$-2^{63}$ ~ $2^{63}$-1] float 32位单精度浮点数 double 64位双精度浮点数 half_float 16位半精度IEEE 754浮点类型 scaled_float 缩放类型的的浮点数, 比如price字段只需精确到分, 57.34缩放因子为100, 存储结果为5734 尽可能选择范围小的数据类型, 字段的长度越短, 索引和搜索的效率越高; 优先考虑使用带缩放因子的浮点类型.
三、日期类型 - date
JSON没有日期数据类型, 所以在ES中, 日期可以是: 包含格式化日期的字符串, "2018-10-01", 或"2018/10/01 12:10:30". 代表时间毫秒数的长整型数字. 代表时间秒数的整数. 如果时区未指定, 日期将被转换为UTC格式, 但存储的却是长整型的毫秒值. 可以自定义日期格式, 若未指定, 则使用默认格式: strict_date_optional_time||epoch_millis
四、布尔类型 真值: true, "true", "on", "yes", "1"... 假值: false, "false", "off", "no", "0", ""(空字符串), 0.0, 0
五、二进制类型 二进制类型是Base64编码字符串的二进制值, 不以默认的方式存储, 且不能被搜索. 有2个设置项:
(1) doc_values: 该字段是否需要存储到磁盘上, 方便以后用来排序、聚合或脚本查询. 接受true和false(默认);
(2) store: 该字段的值是否要和_source分开存储、检索, 意思是除了_source中, 是否要单独再存储一份. 接受true或false(默认). 六、范围类型: range类型支持以下几种:
类型 范围 integer_range $-2^{31}$ ~ $2^{31}-1$ long_range $-2^{63}$ ~ $2^{63}-1$ float_range 32位单精度浮点型 double_range 64位双精度浮点型 date_range 64位整数, 毫秒计时 ip_range IP值的范围, 支持IPV4和IPV6, 或者这两种同时存在
复合数据类型 一、数组类型
二、对象类型
三、嵌套类型 nested
地理数据类型 一、地理点类型 - geo point 二、地理形状类型 - geo_shape
专业领域数据类型 IP类型 计数数据类型 - token_count
创建指定Mapping type的索引库 (一个Mapping Type包括两部分,Meta-fields、Fields or properties) PUT /my-index { "mappings": { "properties": { "age": { "type": "integer" }, "email": { "type": "keyword" }, "name": { "type": "text" } } } }