【Elasticsearch教程14】Mapping字段类型之range
elasticsearch教程 类型 14 字段 range Mapping
2023-09-27 14:26:50 时间
Elasticsearch Mapping字段类型之range
一、简介
range
字段类型表示一个字段的值是一个数值范围
- 例如一个
range
类型的字段的值是[10, 20],用12来匹配该字段,则会命中该文档.
range
字段类型如下:
类型 | 说明 |
---|---|
integer_range | [-231, 231-1 ] |
long_range | [-263, 263-1] |
float_range | 单精度、符合IEEE 754标准的浮点数的范围 |
double_range | 双精度、符合IEEE 754标准的浮点数的范围 |
date_range | 日期范围, 在es内部,日期以64位long 类型表示的毫秒数存储 |
ip_range | IP范围, 支持IPv4和IPv6的范围 |
1.1 区间的开闭
设定一个范围可以有多种选择, 可以包含边界值,也可以不包含边界值,还可以一个边界是无界限的。
定义的时候可以用gt
、gte
、lt
、lte
表示左右界限的开闭。
下面举例说明:
类型 | 说明 | 表达 |
---|---|---|
左闭, 右闭 | [10, 20] | gte: 10, lte: 20 |
左闭, 右开 | [10, 20) | gte: 10, lt: 20 |
左闭, 右无限大 | [10, +∞) | gte: 10 |
二、实验
2.1 创建一个新的索引
PUT pigg_test_range
{
"mappings": {
"properties": {
"range_of_integer": {
"type": "integer_range"
},
"range_of_date": {
"type": "date_range",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
2.2 新增测试文档
PUT pigg_test_range/_doc/1
{
"range_of_integer": {
"gte": 10,
"lte": 20
},
"range_of_date": {
"gte": "2020-09-01 10:20:00",
"lte": "2020-09-02"
}
}
PUT pigg_test_range/_doc/2
{
"range_of_integer": {
"gt": 10,
"lt": 20
},
"range_of_date": {
"gt": "2020-09-01 10:20:00",
"lt": "2020-09-02"
}
}
PUT pigg_test_range/_doc/3
{
"range_of_integer": {
"gt": 20
},
"range_of_date": {
"gt": "2020-09-01 10:20:00"
}
}
2.3 使用term查询
匹配
查询包含10的文档,
GET pigg_test_range/_search
{
"query": {
"term": {
"range_of_integer": {
"value": 10
}
}
}
}
查询日期范围包含"2020-09-01 10:20:00"的数据
GET pigg_test_range/_search
{
"query": {
"term": {
"range_of_date": {
"value": "2020-09-01 10:20:00"
}
}
}
}
上面2个查询返回都是如下:
{
...省略...
"_source":{
"range_of_integer":{
"gte":10,
"lte":20
},
"range_of_date":{
"gte":"2020-09-01 10:20:00",
"lte":"2020-09-02"
}
}
}
2.4 使用range查询
匹配
range查询
有个参数relation
,它可以有3个值INTERSECTS
、CONTAINS
、WITHIN
类型 | 说明 |
---|---|
INTERSECTS | 默认设置, 有交集的文档才匹配 |
CONTAINS | 目标文档的值的范围包含查询条件 |
WITHIN | 查询条件的范围包含目标文档的值的范围 |
GET pigg_test_range/_search
{
"query": {
"range": { # 注意这里是range,不再是term了
"range_of_integer": {
"gte": 18,
"lte": 20,
"relation" : "INTERSECTS"
}
}
}
}
GET pigg_test_range/_search
{
"query": {
"range": {
"range_of_integer": {
"gte": 18,
"lte": 20,
"relation" : "CONTAINS"
}
}
}
}
GET pigg_test_range/_search
{
"query": {
"range": {
"range_of_integer": {
"gte": 18,
"lte": 20,
"relation" : "WITHIN"
}
}
}
}
如果本文对您有帮助,就给亚瑟王点个赞👍吧。
相关文章
- Elasticsearch-字符串类型
- Elasticsearch-配置
- Elasticsearch-数据的存储、搜索(干货)
- Elasticsearch倒排索引结构
- Elasticsearch 日志配置详解
- ElasticSearch中的过滤查询(filter)
- ElasticSearch中判断文档是否存在(GET、HEAD)
- ElasticSearch中的文档和查询响应数据
- 分布式系列教程(27) -Linux环境下安装Elasticsearch
- 淘东电商项目(44) -Docker下搭建ElasticSearch集群
- Elasticsearch 用Filebeat进行日志管理
- Elasticsearch 单字符串多字段查询:Dis Max Query详解
- 网络安全系列-四十四:使用Filebeat、ElasticSearch、Kinaba 针对Suricata的分析结果eve.json进行可视化展示
- ElasticSearch系列二 ES基本使用及文档
- Elasticsearch Java REST Client 批量操作(Bulk API)
- Elasticsearch
- ElasticSearch索引与搜索
- ElasticSearh更新nested字段(Array数组)。怎么根据查询条件(query)复制一个(index)到新的Index how to update by query a nested fields data for elasticsearch
- linux下elasticsearch 安装、配置及示例
- ElasticSearch学习笔记