Elastic Lucene 查询无法正常使用日期

Elastic Lucene query not working properly with date

我有一个简单的任务:

获取上周状态为 'paid' 或 'done' 的弹性索引中的所有项目。

我试过的是这样的:

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:我无法在正文中进行查询,因为那里有额外的聚合过滤器,我至少还没有找到与上述过滤器结合的方法。

您的方向是正确的,但您有三个微小的语法错误,导致查询无法按预期工作。

  • (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"))