目前,我已经知道如何从(时间戳)日期字段中过滤日期范围.这很简单:
"range": {
"date": {
"gte": "2015-11-01",
"lte": "2015-11-30"
}
}
Run Code Online (Sandbox Code Playgroud)
但是如果你对gte:"8:00:00"和lte:"10:00:00"等小时的范围感兴趣,如何过滤日期?这可能吗?
换句话说,我的要求是:如何在本月(15-11-01/15-11-30)发生所有事件,但仅限于上午8:00至10:00之间?
Val*_*Val 17
您可以使用range过滤器过滤正确的日期,然后使用script过滤器过滤所需的小时数,如下所示:
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"range": {
"date": {
"gte": "2015-11-01",
"lte": "2015-11-30"
}
}
},
{
"script": {
"script": {
"source": "doc.date.date.getHourOfDay() >= params.min && doc.date.date.getHourOfDay() <= params.max",
"params": {
"min": 8,
"max": 10
}
}
}
}
]
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,您需要确保启用动态脚本以使此查询起作用.
如果我正确理解你的问题,那么我认为你必须添加新字段,该字段仅索引时间,例如
PUT your_index
{
"mappings": {
"your_type": {
"properties": {
"time": {
"type": "date",
"format": "HH:mm:ss"
}
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后你可以这样查询
{
"query": {
"bool": {
"must": [
{
"range": {
"date": {
"gte": "2015-11-01",
"lte": "2015-11-30"
}
}
},
{
"range": {
"time": {
"gte": "08:00:00",
"lte": "10:00:00"
}
}
}
]
}
}
}
Run Code Online (Sandbox Code Playgroud)
这有帮助吗?
| 归档时间: |
|
| 查看次数: |
31032 次 |
| 最近记录: |