【问题标题】:Elastic Lucene query not working properly with date弹性 Lucene 查询不能与日期一起正常工作
【发布时间】:2020-03-21 16:42:38
【问题描述】:

我有一个简单的任务:

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

我尝试的是这样的:

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

【问题讨论】:

    标签: elasticsearch lucene elastic-stack


    【解决方案1】:

    您在正确的轨道上,但您有三个微小的语法错误,导致查询无法按预期工作。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-11
      • 2018-11-10
      • 2014-07-01
      • 1970-01-01
      • 2016-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多