【问题标题】:Advice on ElasticSearch query design关于 ElasticSearch 查询设计的建议
【发布时间】:2019-01-11 16:18:10
【问题描述】:

我的 ES 文档看起来像这样:

{
   "auctionOn": "2018-01-01",
   "inspections: [
    {
       "startsOn": "2018-01-02 09:00",
       "endsOn": "2018-01-02 10:00"
    }
    ]
}

我需要从一次搜索(或多次搜索)中得到以下答案

  1. 未来(例如 > 现在)具有 auctionOn 的文档数量
  2. 未来(例如 > 现在)具有 inspection.startsOn 的文档数量
  3. 接下来 7 天的日期直方图(日期细分),其中包含当天带有 auctionOn 的文档数
  4. 接下来 7 天的日期直方图(日期细分),其中包含当天带有 inspection.startsOn 的文档数

所以,我试图弄清楚如何有效地获得这些答案。我知道我可以/应该测试所有不同的方法,但我对 ES 比较陌生,所以说起来容易做起来难。

有人可以就如何获得这 4 个值给我一个建议(或者最好是一个查询)吗?

我的想法:

  1. 查询所有在未来进行检查/拍卖的文件。为拍卖和检查创建过滤到未来 7 天的日期直方图聚合。使用范围聚合来获取具有拍卖/检查 > 今天的文档数量。 优点:一次搜索所有答案。缺点:要汇总大量文档?

  2. 创建单独的搜索(例如 msearch):

    • 查询未来 7 天内检查的所有文档。按天汇总。
    • 查询未来 7 天内拍卖的所有文档。按天汇总。
    • 查询所有将来需要检查的文档。使用点击数获得总数
    • 查询所有在未来进行拍卖的文档。使用点击数来获得总数。 优点:查询更简单.. 更多缓存命中?缺点:4 次单独搜索。

有人可以指导我正确的道路,并给我有关如何进行查询/聚合的提示吗?

谢谢

【问题讨论】:

  • 致因“过于宽泛”而投票关闭的人,想解释一下如何?我认为这个问题非常具体..

标签: elasticsearch elasticsearch-aggregation


【解决方案1】:
  1. 使用 range 查询字段 auctionOn 设置 from 为当前日期,to 日期为 null。
  2. inspection.startsOn 字段的嵌套查询中使用 range 查询,如上所述。
  3. 使用 date histogram 聚合,使用 interval 作为 day
  4. 与 3.) 相同,但在 嵌套 聚合内
  5. 您可以在一个查询中调整所有这些。

【讨论】:

  • 感谢您的回答。但是,不确定如何在一个查询中完成此操作。您可以使用示例查询来编辑您的答案吗?
  • 而且,1 和 2 会提前 7 天过滤结果,那么我怎样才能得到最后 2 个数字呢? (未来拍卖/检查的数量)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-06-16
  • 2012-08-11
  • 2017-10-18
  • 2014-11-08
  • 2013-06-12
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多