我正在尝试构建一个elasticsearch查询,以便在所有日期的午夜和当前时间之间返回文档。例如,如果我在09:00:00运行查询,那么无论日期如何,查询都将返回时间戳在午夜和09:00:00之间的任何文档。
以下是一个示例数据集:
curl -XPUT localhost:9200/test/dt/_mapping -d '{"dt" : {"properties" : {"created_at" : {"type" : "date", "format": "YYYY-MM-DD HH:mm:ss" }}}}'
curl -XPOST localhost:9200/test/dt/1 -d '{ "created_at": "2014-10-09 07:00:00" }'
curl -XPOST localhost:9200/test/dt/2 -d '{ "created_at": "2014-10-09 14:00:00" }'
curl -XPOST localhost:9200/test/dt/3 -d '{ "created_at": "2014-10-08 08:00:00" }'
curl -XPOST localhost:9200/test/dt/4 -d '{ "created_at": "2014-10-08 15:00:00" }'
curl -XPOST localhost:9200/test/dt/5 -d '{ "created_at": "2014-10-07 09:00:00" }'
curl -XPOST localhost:9200/test/dt/6 -d '{ "created_at": "2014-10-07 16:00:00" }'
和示例过滤器:
curl -XPOST localhost:9200/test/dt/_search?pretty -d '{
"query": {
"filtered" : {
"filter" : {
"bool": {
"must": [
{
"script" : {
"script" : "doc[\"created_at\"].date.getMinuteOfDay() < 600"
}
}
]
}
}
}
}
}'
其中600是一个静态参数,我想用动态分钟参数替换,具体取决于查询运行的时间。
我最好的尝试是使用getMinuteOfDay()方法来过滤每个文档,但我的问题是如何获取当前时间的getMinuteOfDay()。我在上面的查询中尝试使用time()而不是硬编码参数600进行变换,但无法弄明白。
有什么想法吗?
答案 0 :(得分:0)
这已经很晚了,但可以使用DateTime.now()
完成,您应该将查询更改为
GET test/dt/_search
{
"query": {
"filtered": {
"filter": {
"bool": {
"must": [
{
"script": {
"script": "doc[\"created_at\"].date.getMinuteOfDay() < DateTime.now().getMinuteOfDay()"
}
}
]
}
}
}
}
}
希望这有帮助!