【问题标题】:I need to get average document count by date in elasticsearch我需要在弹性搜索中按日期获取平均文档数
【发布时间】:2020-06-25 13:21:26
【问题描述】:

我想按日期获取平均文档计数,而不需要获取整个桶数据并手动获取平均值,因为有多年的数据,当我按日期分组时,我得到 too_many_buckets_exception。 所以我目前的查询是

{
  "query": {
    "bool": {
      "must": [],
      "filter": []
    }
  },
  "aggs": {
    "groupByChannle": {
      "terms": {
        "field": "channel"
      },
      "aggs": {
        "docs_per_day": {
          "date_histogram": {
            "field": "message_date",
            "fixed_interval": "1d"
          }
        }
      }
    }
  }
}

如何在不获取此数据的 buckets 数组的情况下获得按 message_date(day) 和频道分组的平均文档计数

"buckets" : [
              {
                "key_as_string" : "2018-03-17 00:00:00",
                "key" : 1521244800000,
                "doc_count" : 4027
              },
              {
                "key_as_string" : "2018-03-18 00:00:00",
                "key" : 1521331200000,
                "doc_count" : 10133
              },
...thousands of rows
]

我的索引结构是这样的

  "mappings" : {
      "properties" : {
        "channel" : {
          "type" : "keyword"
        }, 
        "message" : {
          "type" : "text"
        },
        "message_date" : {
          "type" : "date",
          "format" : "yyyy-MM-dd HH:mm:ss"
        },
      }
    }

通过这个查询,我只想得到一个 AVERAGE DOC COUNT BY DATE 而没有别的

【问题讨论】:

    标签: elasticsearch elastic-stack


    【解决方案1】:
    "avg_count": {
      "avg_bucket": {
        "buckets_path": "docs_per_day>_count"
      }
    }
    

    在docs_per_day 结束之后。

    avg_count 提供平均计数。 _count 指的是桶数

    【讨论】:

    • 感谢您的回答,只要代码有效并且它会获得平均计数,但我的问题是我也不想获取存储桶数据,因为它非常大,我只想获得平均计数
    • 抱歉来晚了 :( 我已经对答案投了赞成票,但由于我的声誉低于 15 岁,所以它还不可见。但我不能接受答案,因为它不能满足我的所有要求(也许我没有很好地解释我的主要目标)我也不想获取存储桶数组,因为有数千行,我想获得平均每日文档计数而不对它们进行分组并获取我想获得的存储桶数据只是一个平均文档计数,仅此而已。“avg_bucket”:{“buckets_path”:“docs_per_day>_count”}这个东西只有在我按日期汇总数据时才有效。
    【解决方案2】:

    我认为,您可以在脚本中使用统计信息聚合:

    {
      "size": 0,
      "aggs": {
        "term": {
          "terms": {
            "field": "chanel"
          },
          "aggs": {
            "stats": {
              "stats": {
                "field": "message_date"
              }
            },
            "result": {
              "bucket_script": {
                "buckets_path": {
                  "max" : "stats.max",
                  "min" : "stats.min",
                  "count" : "stats.count"
                },
                "script": "params.count/(params.max - params.min)/1000/86400)"
              }
            }
          }
        }
      }
    }
    

    【讨论】:

      猜你喜欢
      • 2021-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-10-13
      • 2015-06-01
      • 2023-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多