ElasticSearch学习笔记十六 Range数据类型和检索

* Range数据类型
<https://blog.csdn.net/weixin_43430036/article/details/83272018#Range_1>
* 数据和日期 <https://blog.csdn.net/weixin_43430036/article/details/83272018#_15>
* IP范围 <https://blog.csdn.net/weixin_43430036/article/details/83272018#IP_151>


<>Range数据类型

Elasticsearch支持以下范围数据类型:

数据类型 说明
integer_range 有符号32位整数范围 2-32 ~ 232-1
float_range 单精度32位IEEE 754 浮点数范围
long_range 有符号64位整数范围 2-64 ~ 264-1
double_range 双精度64位IEEE 754 浮点数范围
date_range 自系统历元以来无符号64位整数范围内的毫秒数范围
ip_range 支持 IPv4 或者 IPv6 (or mixed) 地址的IP范围
<>数据和日期

假设我们有一个纪录会议室相关范围要求的索引
PUT range_index { "mappings": { "metting": { "properties": {
"expected_attendees_age_range": { "type": "integer_range" }, "time_frame_range":
{ "type": "date_range", "format": "yyyy-MM-dd
HH:mm:ss||yyyy-MM-dd||epoch_millis" } } } } }
例如我们假如一个要求只有10岁到20岁可以参加,参加会议的时间在11月31号中午12点到凌晨。
PUT range_index/metting/1?refresh { "expected_attendees_age_range" : { "gte" :
10, "lte" : 20 }, "time_frame_range" : { "gte" : "2015-10-31 12:00:00", "lte" :
"2015-11-01" } }
此时又一位15岁的同学跑过来询问有没有我合适参加的会议呢,我们应该怎么查询呢?
GET range_index/metting/_search? { "query" : { "term" : {
"expected_attendees_age_range" : { "value": 12 } } } }
结果如下
{ "took": 0, "timed_out": false, "_shards": { "total": 5, "successful": 5,
"skipped": 0, "failed": 0 }, "hits": { "total": 1, "max_score": 1, "hits": [ {
"_index": "range_index", "_type": "metting", "_id": "1", "_score": 1, "_source":
{ "expected_attendees_age_range": { "gte": 10, "lte": 20 }, "time_frame_range":
{ "gte": "2015-10-31 12:00:00", "lte": "2015-11-01" } } } ] } }
此时我们需要判断一个时间范围呢,有没有会议开展呢?
GET range_index/metting/_search { "query" : { "range" : { "time_frame_range" :
{ "gte" : "2015-10-31", "lte" : "2015-11-01", "relation" : "within" } } } }
结果如下:
{ "took": 3, "timed_out": false, "_shards": { "total": 5, "successful": 5,
"skipped": 0, "failed": 0 }, "hits": { "total": 1, "max_score": 1, "hits": [ {
"_index": "range_index", "_type": "metting", "_id": "1", "_score": 1, "_source":
{ "expected_attendees_age_range": { "gte": 10, "lte": 20 }, "time_frame_range":
{ "gte": "2015-10-31 12:00:00", "lte": "2015-11-01" } } } ] } }
<>IP范围

此时假如我们需要纪录一系列IP白名单
PUT ip_range_index { "mappings":{ "_doc":{ "properties": { "ip_whitelist": {
"type": "ip_range" } } } } }
加入纪录:
PUT ip_range_index/_doc/2 { "ip_whitelist" : "192.168.0.0/16" }
查询IP是否在白名单里面
GET ip_range_index/_doc/_search { "query" : { "term" : { "ip_whitelist" : {
"value": "192.168.0.12" } } } }