我试图用elasticsearch做一个相当简单的查询,但是我不知道我做错了什么,所以我在这里发布一些提示。
我有一个弹性索引,每个文档都有这样的日期:
{
// edited for brevity
"releasedate": "2020-10-03T15:55:03+00:00",
}
我使用django drf来进行这样的查询,在这里传递这个值 &releasedate__gt=now-3d/d
最终得到这样一个弹性范围查询。
{
"from": 0,
"query": {
"bool": {
"filter": [
{
"range": {
"releasedate": {
"gt": "now/d-3d"
}
}
}
]
}
},
"size": 10,
"sort": [
"_score"
]
}
如果我想看到所有的“昨天以来的文件”,我会把它看作是所有有文件的文件 releasedate
昨天午夜之后,我想查询的关键部分应该是这样的:
{
"query": {
"bool": {
"filter": [
{
"range": {
"releasedate": {
"gt": "now/d-1d"
}
}
}
]
}
}
}
所以我想这会一直持续到今天00:00,然后有一天再回去。
所以如果我在2020-10-04运行这个。我想这会捕捉到一个发布日期为 2020-10-03T15:55:03+00:00
.
这是我的理由
四舍五入 now/d
会带我们去 2020-10-04T00:00
.
然后有一天和我一起回去 -1d
会带我们去 2020-10-03T00:00
.
这应该包括文件,但我没有看到。我需要一天以上的时间来查找文件,所以我需要使用 now/d-2d
查找匹配的文档。
知道为什么会这样吗?我不知道该怎么看 now/d-1d
以时区感知对象的方式进行评估,以检查-这是我可能达到的目标,但我不知道如何使用弹性。
fwiw,这是弹性5.6。我们很快就会更新。
1条答案
按热度按时间soat7uwm1#
我要说的是,一旦你四舍五入到最近的一天
now-2d/d
或者now/d-2d
--正如你所做的那样)gt
查询的时间间隔实际上是以天为基础的。换句话说,
gt : 2020-10-03T00:00
是>= 2020-10-0
4T00:00
. 所以你需要什么而不是gt
是gte
那会起作用的>=2020-10-03T00:00
.