Elasticsearch 范围查询,Elasticsearch范围
范围查询(range query)
范围查询用于匹配某些字段的字段值位于特定范围内的文档。Lucene查询的类型依赖于字段的类型,对于字符串字段,是TermRangeQuery,而对于数字/日期字段,查询是NumericRangeQuery。
GET _search
{
"query": {
"range": {
"age": {
"gte": 25,
"lte": 30
}
}
}
}
note:查询age字段大于等于25小于等于30的文档。
范围查询接收以下参数:
- gte:大于等于
- gt:大于
- lte:小于等于
- lt:小于
- boost:设置查询的推动值(boost),默认为1.0
日期字段的范围
当范围查询运行在日期类型的字段上时,可以通过日期数学指定范围。
GET _search
{
"query": {
"range" : {
"date" : {
"gte" : "now-1d/d",
"lt" : "now/d"
}
}
}
}
日期数学与舍入
当使用日期数学将日期舍入到最近的天、月、小时等时,舍入后的日期依赖于范围的边界是否被包含。
向上舍入移动到舍入范围的最后一毫秒,向下舍入移动到舍入范围的第一毫秒。
- gt:大于舍入的日期,2014-11-18||/M变为2014-11-30T23:59:59.999,即不包括整个月。
- gte:大于等于舍入的日期,2014-11-18||/M变为2014-11-01,即包括整个月。
- lt:小于舍入的日期,204-11-18||/M变为2014-11-01,即不包括整个月。
- lte:小于等于舍入的日期,2014-11-18||/M变为2014-11-30T23:59:59.999,即包含整个月。
范围查询中的日期格式
默认使用设置在日期字段中的format参数解析格式化日期,但是,此参数可以通过在范围查询中设置format参数来进行覆盖。
GET _search
{
"query": {
"range" : {
"born" : {
"gte": "01/01/2012",
"lte": "2013",
"format": "dd/MM/yyyy||yyyy"
}
}
}
}
范围查询中的时区
通过在日期值中指定时区或使用time_zone参数指定时区,可以转换日期时区。
GET _search
{
"query": {
"range" : {
"timestamp" : {
"gte": "2015-01-01 00:00:00",
"lte": "now",
"time_zone": "+01:00"
}
}
}
}
note:gte参数的日期值将会被转化为2014-12-31T23:00:00 UTC
note:now不会被time_zone参数影响(日期必须存储为UTC)
翻译源:Elasticsearch 6.4 文档
本站文章为和通数据库网友分享或者投稿,欢迎任何形式的转载,但请务必注明出处.
同时文章内容如有侵犯了您的权益,请联系QQ:970679559,我们会在尽快处理。