我有一个简单的任务:
从弹性索引中获取上周状态为“已付款”或“已完成”的所有项目。
我尝试过的是这个
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:我无法在正文中进行查询,因为那里存在其他聚合筛选器,至少没有找到与上述筛选器组合的方法。
答案 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"))