弹性Lucene查询不适用于日期

时间:2019-11-26 09:43:50

标签: elasticsearch lucene elastic-stack

我有一个简单的任务:

从弹性索引中获取上周状态为“已付款”或“已完成”的所有项目。

我尝试过的是这个

GET /my_index/_search?q=((status:paid or status:done) and (created_at > "now-7d/d"))

有趣的是,如果我这样做

GET /my_index/_search?q=((status:paid or status:done)

我得到大约4k的结果,但是如果我执行整个查询,我将得到600k。看来,如果我添加第二部分,则某些功能将无法正常工作。

我已经在Kibana的“发现”选项卡中测试了该查询,并且该查询在该查询中正常运行,但是由于某种原因,该查询不适用于API。任何帮助将不胜感激。

PS:我无法在正文中进行查询,因为那里存在其他聚合筛选器,至少没有找到与上述筛选器组合的方法。

1 个答案:

答案 0 :(得分:3)

您走在正确的轨道上,但是您遇到了三个微小的语法错误,这些错误使查询无法按预期运行。

  • (created_at > "now-7d/d")更改为(created_at :> "now-7d/d")

  • and更改为AND,目前(x and y)被解析为x OR and OR y,这就是为什么您获得如此众多结果的原因。

  • or更改为OR,同样的概念,因此您会得到错误的匹配。

总结一下,将查询更改为此:

GET /my_index/_search?q=((status:paid OR status:done) AND (created_at :> "now-7d/d"))