在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种条件的查询。
还没有评论,来说两句吧...