在elasticsearch中,我们还可以实现范围查询,也就是这篇文章介绍的range查询和range过滤器。
在range查询里面,只是4种条件,分别是:
1、gt 搜索大于某个值的字段,不包含该值本身。 2、gte 搜索大于等于某个值的字段,包含该值本身。 3、lt 搜索小于某个值的字段,不包含该值本身。 4、lte 搜索小于等于某个值的字段,包含该值本身。
下面我们来演示一下range范围查询。
一、创建一个test的索引
PUT /test
{
"mappings": {
"properties": {
"name": {
"type": "keyword"
},
"type": {
"type": "keyword"
},
"cts": {
"type": "date",
"format": "yyyy-MM-dd HH:mm:ss"
}
}
},
"settings": {
"index": {
"number_of_shards": "1",
"number_of_replicas": "0"
}
}
}二、向test索引添加几条测试数据
post /test/_doc/1
{"name":"张三","type":1,"cts":"2020-01-12 15:16:17"}
post /test/_doc/2
{"name":"李四","type":2,"cts":"2022-11-12 15:16:17"}三、使用range范围查询2020年的用户数据
post /test/_search
{
"query": {
"range": {
"cts": {
"gte": "2020-01-01 00:00:00",
"lt": "2021-01-01 00:00:00"
}
}
}
}上面演示的是使用range范围查询,我们也可以使用rangefilter进行交互,例如:
post /test/_search
{
"query": {
"bool": {
"must": [
{
"match_all": {}
}
],
"filter": [
{
"range": {
"cts": {
"gte": "2020-01-01 00:00:00",
"lt": "2021-01-01 00:00:00"
}
}
}
]
}
}
}备注:
1、range查询一般应用于日期类查询和数值类查询,不支持其他类型的查询
2、range查询仅支持gt、gte、lt、lte4种条件的查询。





还没有评论,来说两句吧...