一、范围数据类型
| 数据类型 | 说明 |
|---|---|
| integer_range | 有符号32位整数范围2 ~ 2-1 |
| float_range | 单精度32位IEEE 754 浮点数范围 |
| long_range | 有符号64位整数范围2 ~ 2-1 |
| double_range | 双精度64位IEEE 754 浮点数范围 |
| date_range | 自系统纪元以来无符号64位整数范围内的毫秒数范围 |
| ip_range | 支持 IPv4 或者 IPv6 地址的IP范围 |
二、应用实例
假设我们有一张会议表。我们知道实际党政机关会议都有一个出席率的问题,需要出席率在某个点或某个区间内才能算作是有效的。所以我们的映射结构来了。
1、字段映射定义
PUT range_index{"settings": {"number_of_shards": 2},"mappings": {"_doc": {"properties": {"expected_attendees": {"type": "integer_range"},"time_frame": {"type": "date_range","format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"}}}}}
2. 添加数据
假如我们需要添加一个10-20人参与,并且在2020-01-01到2020-05-02期间举行的会议记录到ES中。
PUT range_index/_doc/1?refresh{"expected_attendees" : {"gte" : 10,"lte" : 20},"time_frame" : {"gte" : "2020-01-01 00:00:00","lte" : "2020-05-02 23:59:59"}}
3. 数据查询
假如我们需要查询参会人数满足12人的会议记录
GET range_index/_search{"query" : {"term" : {"expected_attendees" : {"value": 12}}}}
可以按照日期进行筛选,查询指定时间内的会议记录relation字段上的范围查询支持一个关系参数,该参数可以是WITHIN,CONTAINS,INTERSECTS之一(默认)。
GET range_index/_search{"query" : {"range": {"time_frame": {"gte": "2019-12-30 00:00:00","lte": "2020-05-03 23:59:59","relation": "within"}}}}
三、ip范围查询
IP范围可以用CIDR符号表示法查询ip范围数据。
PUT range_index/_mapping/_doc{"properties": {"ip_whitelist": {"type": "ip_range"}}}PUT range_index/_doc/2{"ip_whitelist" : "192.168.0.0/16"}
