说明
ElasticSearch中每个field都要精确对应一个数据类型.
本文都是基于ElasticSearch 6.8.1进行的, 不同的版本可能存在不支持的情况, 还请注意.
mapping
mapping-types
核心基本类型
1.text类型
2.keyword类型
3.数字类型
4.日期类型
5.布尔类型
6.二进制类型
7.范围类型
8.数组类型
9.对象类型
10.嵌套类型
11.IP类型
12.Token count类型
13.Geo类型
字符串类型(text、keyword)
示例
ElasticSearch 5.X之后的字段类型不再支持string,由 text 或 keyword 取代。 如果仍使用string,会报错。
文本类型(text)
说明:
text的内容会被分词, 可以设置是否需要存储: “index”: “true|false”.
text类型的字段不能用于排序, 也很少用于聚合.
注意:
当一个字段需要用于全文搜索(会被分词), 比如商品名称、商品描述等信息, 就应该使用text类型.
关键字类型(keyword)
说明:
keyword的内容不会被分词, 可以设置是否需要存储: “index”: “true|false”.
keyword类型的字段可用于过滤、排序、聚合等.
注意:
当一个字段需要按照精确值进行操作时, 就应该使用keyword类型.
数字数据类型
示例
数字类型有如下分类:
1 | byte: 有符号的8位整数, 范围: [-128 ~ 127] |
说明:
字段的长度越短, 索引和搜索的效率越高
尽可能选择范围小的数据类型, 优先考虑使用带缩放因子的浮点类型
日期类型(date)
示例
在ES中, 日期默认格式: strict_date_optional_time||epoch_millis
包含格式化日期的字符串, “2018-10-01”, 或”2022-03-03 15:47:47”,可代表时间毫秒数的长整型数字,也可代表时间秒数的整数
说明:
如果时区未指定, 日期将被转换为UTC格式, 但存储的却是长整型的毫秒值.
多个格式使用双竖线||分隔, 每个格式都会被依次尝试, 直到找到匹配的.第一个格式用于将时间毫秒值转换为对应格式的字符串.
可自定义日期格式:yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis
布尔类型(boolean)
说明:可以接受表示真、假的字符串或数字
真值: true, “true”, “on”, “yes”, “1”…
假值: false, “false”, “off”, “no”, “0”, “”(空字符串), 0.0, 0
二进制类型(binary)
二进制类型是Base64编码字符串的二进制值, 不以默认的方式存储, 且不能被搜索
说明:
有2个设置项:doc_values、store
① doc_values: 该字段是否需要存储到磁盘上, 方便以后用来排序、聚合或脚本查询. 接受true和false,默认为false;
① store: 该字段的值是否要和_source分开存储、检索, 意思是除了_source中, 是否要单独再存储一份. 接受true或false,默认为false;.
注意:
Base64编码的二进制值不能嵌入换行符\n, 逗号(0x2c)等符号.
范围类型(range)
示例
range类型支持以下几种:
1 | integer_range -2^31 ~ 2^31-1 |
说明:小于是lt,小于等于是lte、大于是gt、大于等于是gte
复杂数据类型
对象类型(object)
示例
文档是分层的: 文档可以包含内部对象, 内部对象也可以包含内部对象;
嵌套类型(nested)
示例
嵌套类型是对象数据类型的一个特例, 可以让array类型的对象被独立索引和搜索,用nested类型解决object类型的不足
说明:
如果需要对以最对象进行索引, 且保留数组中每个对象的独立性, 就应该使用嵌套数据类型.
嵌套对象实质是将每个对象分离出来, 作为隐藏文档进行索引.
专门数据类型
IP类型(IPv4、IPv6)
IP类型的字段用于存储IPv4或IPv6的地址, 本质上是一个长整型字段.
1 | { |
更多类型
更多TYPE类型查询详见官方文档