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"))
我有一个简单的任务:
获取上周状态为 '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"))