ElasticSearch(五)ElasticSearch字段类型

ElasticSearch(五)ElasticSearch字段类型

作者:lomtom

个人网站:lomtom.cn

个人公众号:博思奥园

你的支持就是我最大的动力。

ES系列:

  1. ElasticSearch(一) ElasticSearch入门
  2. ElasticSearch(二)在ElasticSearch 中使用中文分词器
  3. ElasticSearch(三)ElasticSearch索引操作
  4. ElasticSearch(四)ElasticSearch文档操作
  5. ElasticSearch(五)ElasticSearch字段类型

作者:lomtom

个人网站:lomtom.cn

个人公众号:博思奥园

你的支持就是我最大的动力。

ES系列:

  1. ElasticSearch(一) ElasticSearch入门
  2. ElasticSearch(二)在ElasticSearch 中使用中文分词器
  3. ElasticSearch(三)ElasticSearch索引操作
  4. ElasticSearch(四)ElasticSearch文档操作
  5. ElasticSearch(五)ElasticSearch字段类型

1、核心类型

1. 字符串类型

  • string:过期的字符串类型(在ES5之前使用,ES5后被Text和keyword替代)
  • text:全文本。通常用于基于文本的相关性搜索。全文本字段可以分词。全文本字段不用于排序,很少用于聚合等操作。
  • keyword:这种类型适用于结构化的字段

区别:

keyword:存储数据时候,不会分词建立索引
text:存储数据时候,会自动分词,并生成索引。

2. 数字类型

类型 取值范围
long -2^63 到 2^63-1
integer -2^31到 2^31-1
short -2^15到 2^15-1
byte -2^7 到 2^7-1
double 64位双精度
float 32位双精度
half_float 16位双精度
scaled_float 缩放类型的浮点类型

1、在满足需求的情况下,优先使用范围小的字段。字段长度越短,索引和搜索的效率越高。
2、浮点数,优先考虑使用 scaled_float。

3. 日期类型

由于 JSON 中没有日期类型,所以 es 中的日期类型形式就比较多样:

2020-11-11 或者 2020-11-11 11:11:11
一个从 1970.1.1 零点到现在的一个秒数或者毫秒数。

es 内部将时间转为 UTC,然后将时间按照 millseconds-since-the-epoch 的长整型来存储。

4. 布尔类型

5. 二进制类型

默认不存储,也不可搜索。

6. 范围类型

指定范围的时,可以使用 gt、gte、lt、lte。

  • integer_range
  • float_range
  • long_range
  • double_range
  • date_range
  • ip_range

2、复合类型

1. 数组类型

es 中没有专门的数组类型。默认情况下,任何字段都可以有一个或者多个值。需要注意的是,数组中的元素必须是同一种类型。

添加数组是,数组中的第一个元素决定了整个数组的类型。

2. 对象类型

由于 JSON 本身具有层级关系,所以文档包含内部对象。内部对象中,还可以再包含内部对象。

1
2
3
4
5
6
7
PUT product/_doc/2
{
"date":"2020-11-11T11:11:11Z",
"ext_info":{
"address":"China"
}
}

3. 嵌套类型

nested 是 object 中的一个特例。

如果使用 object 类型,假如有如下一个文档:

1
2
3
4
5
6
7
8
9
10
11
12
{
"user":[
{
"first":"Zhang",
"last":"san"
},
{
"first":"Li",
"last":"si"
}
]
}

由于 Lucene 没有内部对象的概念,所以 es 会将对象层次扁平化,将一个对象转为字段名和值构成的简单列表。即上面的文档,最终存储形式如下:

1
2
3
4
{
"user.first":["Zhang","Li"],
"user.last":["san","si"]
}

扁平化之后,用户名之间的关系没了。这样会导致如果搜索 Zhang si 这个人,会搜索到。

此时可以 nested 类型来解决问题,nested 对象类型可以保持数组中每个对象的独立性。nested 类型将数组中的每一饿对象作为独立隐藏文档来索引,这样每一个嵌套对象都可以独立被索引。

1
2
3
4
5
6
7
8
9
{
{
"user.first":"Zhang",
"user.last":"san"
},{
"user.first":"Li",
"user.last":"si"
}
}

优点

文档存储在一起,读取性能高。

缺点

更新父或者子文档时需要更新更个文档。

3、地理类型

4、特殊类型

本文基本取自江南一点雨,请支持原作者,作者录有视频,更容易理解哦

ElasticSearch(五)ElasticSearch字段类型

https://lomtom.cn/6217f2ba.html

作者

lomtom

发布于

2021-12-06

更新于

2021-12-22

许可协议