版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_24228375/article/details/82529682
Elasticsearch区间匹配规则
先从官网看看range datatypes的类型简介:
一、数字类型
1、通过kibana创建integer_range类型索引字段
PUT integer_range_example
{
"mappings": {
"integerIndex": {
"properties": {
"num": {
"type": "integer_range"
}
}
}
}
}
2、索引中加入数据(项目中,可利用datax脚本导入)
PUT integer_range_example/integerIndex/1?refresh
{
"num" : {
"gte" : 10,
"lte" : 20
}
}
其中 gte(大于等于),lte(小于等于),也可以结合使用gt(大于),lt(小于)
也可以以数组的形式put进去,进而达到多区间匹配
PUT integer_range_example/integerIndex/1?refresh
{
"num" : [
{
"gte" : 10,
"lte" : 20
},{
"gt" : 30,
"lt" : 40
},{
"gte" : 50,
"lt" : 60
},{
"gt" : 70,
"lte" : 80
}
]
}
3、根据num检索结果
GET integer_range_example/_search
{
"query" : {
"term" : {
"num" : {
"value": 12
}
}
}
}
结果如下:
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "integer_range_example",
"_type": "integerIndex",
"_id": "1",
"_score": 1,
"_source": {
"num": {
"gte": 10,
"lte": 20 }
}
}
]
}
}
其他数字类型也基本类似,date_range和ip_range有些不一样
二、日期类型date_range
1、通过kibana创建date_range类型索引字段
PUT date_range_example
{
"mappings": {
"dateIndex": {
"properties": {
"time_frame": {
"type": "date_range",
"format": "yyyy-MM-dd HH:mm:ss||yyyy-MM-dd||epoch_millis"
}
}
}
}
}
2、索引中加入数据(项目中,可利用datax脚本导入)
PUT date_range_example/dateIndex/1?refresh
{
"time_frame" : {
"gte" : "2018-07-01 12:00:00",
"lte" : "2018-09-01"
}
}
数组插入
PUT date_range_example/dateIndex/1?refresh
{
"time_frame" : [
{
"gte" : "2018-01-01 12:00:00",
"lte" : "2018-02-01"
},{
"gt" : "2018-03-01 12:00:00",
"lt" : "2018-04-01"
},{
"gte" : "2018-05-01 12:00:00",
"lt" : "2018-06-01"
},{
"gt" : "2018-07-01 12:00:00",
"lte" : "2018-08-01"
}
]
}
3、检索
GET date_range_example/_search
{
"query" : {
"range" : {
"time_frame" : {
"gte" : "2018-05-31",
"lte" : "2018-09-02",
"relation" : "within"
}
}
}
}
这里的relation参数是个可选参数,WITHIN, CONTAINS, INTERSECTS (默认)。该参数可用于任何range类型,不仅仅是date_range。
结果
{
"took": 0,
"timed_out": false,
"_shards": {
"total": 5,
"successful": 5,
"skipped": 0,
"failed": 0
},
"hits": {
"total": 1,
"max_score": 1,
"hits": [
{
"_index": "date_range_example",
"_type": "dateIndex",
"_id": "1",
"_score": 1,
"_source": {
"time_frame": [
{
"gte": "2018-01-01 12:00:00",
"lte": "2018-02-01" },
{
"gt": "2018-03-01 12:00:00",
"lt": "2018-04-01" },
{
"gte": "2018-05-01 12:00:00",
"lt": "2018-06-01" },
{
"gt": "2018-07-01 12:00:00",
"lte": "2018-08-01" }
]
}
}
]
}
}
三、ip类型ip_range
PUT ip_range_example
{
"mappings": {
"ipIndex": {
"properties": {
"ip_whitelist": {
"type": "ip_range"
}
}
}
}
}
PUT ip_range_example/ipIndex/1
{
"ip_whitelist" : "192.168.151.0/16"
}
GET ip_range_example/_search