text
, keyword
long
, integer
, short
, byte
, double
, float
, half_float
, scaled_float
boolean
date
, date_nanos
binary
integer_range
, float_range
, long_range
, double_range
, date_range
text 类型的字段数据会被分词,在生成倒排索引之前,字符串会被分词器分红一个一个词项。
text 类型的字段不用于排序,不多用于聚合(termsAggregation除外)。
若是一个字段须要被全文搜索或模糊匹配,好比文章内容、产品描述、新闻内容等,应该使用text类型。html
keyword 类型的字段内容不会被分词。
keyword 类型的字段只能经过精确值搜索到,用于过滤、排序、聚合。
适用于索引结构化的字段,好比IP地址、性别和地区等。json
类型 | 最小值 | 最大值 | 说明 |
---|---|---|---|
byte | -128 | 127 | 8 位有符号整数(1个字节),至关于MySQL中有符号的 tinyint |
short | -32768 | 32767 | 16 位有符号整数(2个字节),至关于MySQL中有符号的 smallint |
integer | -2147483648 (-2^31^) |
2147483647 (2^31^-1) |
32 位有符号整数(4个字节),至关于MySQL中有符号的 int |
long | -9223372036854775808) (-2^63^) |
9223372036854775807 (2^63^-1) |
64 位有符号整数(8个字节),至关于MySQL中有符号的 bigint |
对于整数类型的字段,在知足需求的状况下,要尽量选择范围小的数据类型。好比某个字段的取值最大值不会超过100,那么选择byte类型便可。迄今为止,吉尼斯世界记录的人类的年龄的最大值为134岁,对于年龄字段,short足矣。字段的长度越短,索引和搜索的效率越高。数组
类型 | 最小值 | 最大值 | 说明 |
---|---|---|---|
half_float | 2^-24^ | 65504 | 16位半精度浮点数 |
float | 2^-149^ | (2-2^-23^)·2^127^ | 32位单精度浮点数 |
double | 2^-1074^ | (2-2^-52^)·2^1023^ | 64位双精度浮点数 |
scaled_float | 缩放类型浮点数 |
处理浮点数时,优先考虑使用scaled float类型。scaled float 是经过缩放因子把浮点数变成long类型,好比价格只须要精确到分,price字段的取值为57.34,设置放大因子为100,存储起来就是5734,全部的API都会把price的取值看成浮点数,事实上Elasticsearch底层存储的是整数类型,由于压缩整数比压缩浮点数更加节省存储空间。数据结构
若是一个字段是布尔类型,可接受的值为 true
, false
。
Elasticsearch 5.4版本之前,能够接受可被解释为 true
或 false
的字符串和数字。
5.4版本之后只接受 true
, false
, "true"
, "false"
。app
JSON 没有日期型数据类型,因此在Elasticsearch中,日期能够是:elasticsearch
Elasticsearch内部会把日期转换为 UTC (世界标准时间),并将其存储为表明时间毫秒数的长整数。
日期格式能够自定义,若是没有指定格式,则使用默认值:ide
"strict_date_optional_time||epoch_millis"
这种状况下能够解析下面三种日期格式:优化
"2020-05-01" "2020-05-01T12:10:30Z" 1591234567890
此数据类型是对日期数据类型的补充。现有的 date 类型能够存储毫秒级时间。而 date_nanos 能够存储纳秒级时间。ui
二进制数据类型接受Base64编码字符串的二进制值。字段不以默认方式存储并且不能搜索。
Base64编码二进制值不能嵌入换行符\n
编码
类型 | 说明 |
---|---|
integer_range |
32 位有符号整数的范围值,-2^31^ ~ 2^31^-1 |
long_range |
62 位有符号整数的范围值,-2^63^ ~ 2^63^-1 |
float_range |
32位单精度浮点数范围值 |
double_range |
64位单精度浮点数范围值 |
date_range |
以64位无符号整数形式表示的日期值范围 |
ip_range |
IPv4 或 IPv6 的范围值 |
用于存储单个JSON对象。
JSON本质上具备层级关系,文档包含内部对象,内部对象自己还能够包含内部对象。
用于存储多个JSON对象组成的数组。nested
类型是 object
类型中的一个特例,可让对象数组独立索引和查询。Lucene没有内部对象的概念,因此Elasticsearch将对象层次扁平化,转化成字段名字和值构成的简单列表。
用于存储经纬度坐标对,可用来
查找必定范围内的地理点,这个范围能够是相对于一个中心点的固定距离,也能够是多边形或者地理散列单元。
经过地理位置或者相对于中心点的距离聚合文档。
整合距离到文档的相关性评分中。
用于存储地理位置信息的经纬度坐标对,可用于如下几种场景:
地理形状数据类型有利于索引和搜索任意地理形状,例如矩形、三角形或者其余多边形。不管是数据被索引仍是在查询执行的过程当中,均可以使用地理形状数据类型在地理点的基础上包含地理形状。
Elasticsearch 使用 GeoJSON
格式来表示地理形状。GeoJSON
是一种对各类地理数据结构进行编码的格式,对象能够表示几何、特征或者特征集合,支持点、线、面、多点、多线、多面等几何类型。GeoJSON
里的特征包含一个几何对象和其余属性,特征集合表示一系列特征。
想了解更多关于 GeoJSON
的资料可参考《GeoJSON格式规范说明》
IP地址类型,存储 IPv4 和 IPv6 地址
completion
提供自动补全建议
token_count
用于统计字符串分词后的词项个数,本质上是一个整数型字段。
例如:映射中指定 name 为 text 类型,增长 name_length 字段用于统计分词后词项的长度,类型为 token_count,分词器为标准分词器。
mapper-murmur3
murmur3
在索引时计算值的哈希值并将它们存储在索引中
mapper-annotated-text
annotated-text
索引包含特殊标记的文本(一般用于标识命名实体)
接受来自 query-dsl
的查询
为同一索引中的文档定义父/子关系
排名功能,记录数字特性以提升查询时的命中率
密集向量,记录浮点值的密集向量
稀疏向量,记录浮点值的稀疏向量
按类型搜索,相似文本的字段,为查询进行优化,以实现按类型完成
别名,定义现有字段的别名
容许将整个JSON对象做为单个字段编入索引。
shape
for arbitrary cartesian geometries.
histogram
for pre-aggregated numerical values for percentiles aggregations.
数组类型不须要专门指定数组元素的类型,任何字段类型均可以包含在数组内,可是数组中的全部值必须具备相同的数据类型。
["one", "two"]
[1, 2]
[1, [2, 3]]
等同于 [1, 2, 3]
[{"name": "Mary", "age": 12}, {"name": "John", "age": 10}]
参考文献:官方文档v7.6:字段数据类型《从Lucene到Elasticsearch全文检索实战》《Elasticsearch技术解析与实战》