ElasticSearch:如何使用月份和日期范围筛选器查询日期字段

8dtrkrch  于 2022-11-02  发布在  ElasticSearch
关注(0)|答案(1)|浏览(261)

目前,我已经知道如何从(时间戳)日期字段中筛选日期范围。这很简单:

"range": {
    "date": {
        "gte": "2015-11-01",
        "lte": "2015-11-30"
    }
}

但是当你对基于月份的范围感兴趣时,比如gte:"02-22"lte:"03-21",如何过滤日期呢?这可能吗?
Map:

PUT dob
{
    "mappings": {
        "test":{
            "properties": {
                "dob":{
                    "type": "date",
                    "format": "dateOptionalTime"
                }
            }
        }
    }     
}

查询:

GET /dob/test/_search
{
    "query": {
        "filtered": {
            "filter": {
                "bool": {
                    "must": [
                        {
                            "range": {
                                "date": {
                                    "gte": "02-11",
                                    "lte": "03-20"
                                }
                            }
                        },
                        {
                            "script": {
                                "script": "doc.dob.date.getDayOfMonth() >= min && doc.dob.date.getMonthOfYear() <= max",
                                "params": {
                                    "min": 12,
                                    "max": 2
                                }
                            }
                        }
                    ]
                }
            }
        }
    }
}

我想输出类似date greater than:02-11 & less than:03-20的东西,但我不想改变我的日期类型格式(yyyy-mm-dd),我也不想搜索它的字符串。如果我做错了什么,请让我纠正。

v1uwarro

v1uwarro1#

您可以在日期筛选器中指定格式,如

"date":
{
    "gte":"02-22","lte":03-20","format":"mm-dd"
}

相关问题