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白名单
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"
}
}
}
}