Elasticsearch(018):es常见的字段映射类型之范围类型(range)
程序员文章站
2024-03-20 10:41:58
...
范围类型(range)是es中比较具有特色的数据类型。下面我们就先来看看官方对其的定义。
定义
数字范围类数据。主要类型及范围如下。
数据范围类型的使用
映射定义
假设我们有一张会议表。我们知道实际中党政机关会议都有一个出席率的问题,需要出席率在某个点或某个区间内才能算作是有效的。所以我们的映射结构来了。
示例如下。
PUT example
PUT example/docs/_mapping
{
"properties": {
"expectedAttendees":{
"type": "integer_range"
},
"time": {
"type": "date_range",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
数据新增
假如这时我们需要添加一个10-20人参与,并且在2019-12-01到2019-12-02期间举行的会议。
PUT example/docs/112313213?refresh
{
"expectedAttendees": {
"gte": 10,
"lte": 20
},
"time": {
"gte": "2019-12-01 12:00:00",
"lte": "2019-12-02 17:00:00"
}
}
数据查询
怎么查询呢?假如我们需要查询参会人数满足12人的会议记录。
GET example/docs/_search
{
"query": {
"term": {
"expectedAttendees": {
"value": 12
}
}
}
}
结果如下
{
"took": 13,
"timed_out": false,
"_shards" : {
"total": 2,
"successful": 2,
"skipped" : 0,
"failed": 0
},
"hits" : {
"total" : 1,
"max_score" : 1.0,
"hits" : [
{
"_index" : "range_index",
"_type" : "my_type",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"expected_attendees" : {
"gte" : 10, "lte" : 20
},
"time" : {
"gte" : "2019-12-01 12:00:00", "lte" : "2019-12-02 17:00:00"
}
}
}
]
}
}
当然我们可以按照日期进行筛选。例如下面这个查询。
POST example/docs/_search
{
"query": {
"range": {
"time": {
"gte": "2019-12-01",
"lte": "2019-12-02",
"relation": "within"
}
}
}
}
聪明的同学肯定注意到relation
关键字。relation
字段上的范围查询支持一个关系参数,该参数可以是WITHIN
,CONTAINS
,INTERSECTS
之一(默认)。
结果如下
{
"took": 13,
"timed_out": false,
"_shards" : {
"total": 2,
"successful": 2,
"skipped" : 0,
"failed": 0
},
"hits" : {
"total" : 1,
"max_score" : 1.0,
"hits" : [
{
"_index" : "range_index",
"_type" : "my_type",
"_id" : "1",
"_score" : 1.0,
"_source" : {
"expected_attendees" : {
"gte" : 10, "lte" : 20
},
"time" : {
"gte" : "2019-12-01 12:00:00", "lte" : "2019-12-02 17:00:00"
}
}
}
]
}
}
基于ip的数据类型也有很有趣的用法,感兴趣的同学可以深入研究下,这里就不展开。
上一篇: 你所熟悉又不熟悉的加强for循环
下一篇: MySQL数据库 拷贝数据
推荐阅读
-
Elasticsearch(018):es常见的字段映射类型之范围类型(range)
-
Elasticsearch(017):es常见的字段映射类型之嵌套类型(nested)
-
Elasticsearch(023):es常见的字段映射类型之IP类型
-
Elasticsearch(021):es常见的字段映射类型之地理点类型(geo-point)
-
Elasticsearch(025):es常见的字段映射类型之单词计数类型(token count)
-
Elasticsearch(019):es常见的字段映射类型之数组类型(arrays)
-
Elasticsearch(020):es常见的字段映射类型之二进制类型(binary)
-
Elasticsearch(016):es常见的字段映射类型之对象类型(object)
-
Elasticsearch(024):es常见的字段映射类型之 连接类型(join type)
-
Elasticsearch(022):es常见的字段映射类型之地理形状类型(geo_shape、多边的复杂的地址形状)