【问题标题】:Elasticsearch: Aggregation with filtering by timestampElasticsearch:按时间戳过滤的聚合
【发布时间】:2021-02-05 15:25:49
【问题描述】:

我需要获取特定日期的不同 ID 列表。我正在尝试将“聚合”与“过滤”一起使用。尝试了几种方法,但它不起作用。正确的格式是什么?

  {
    "size": "1000",
    "_source": ["Id"],
    "query": {
      "range": {
        "@timestamp": {
          "gte": "2020-10-20T00:00:00",
          "lt": "2020-10-21T00:00:00"
        }
      }
    },
     "aggs": {
      "ids": {
        "terms": { "field": "Id.keyword" }
      }
    }
  }

我尝试的另一种方法:

  {
    "size": "1000",
    "_source": ["Id"],
     "aggs": {
      "ids": {
        "filter": {
          "range": {
            "@timestamp": {
              "gte": "2020-10-20T00:00:00",
              "lt": "2020-10-21T00:00:00"
            }
          }
        },
        "terms": { "field": "Id.keyword" }
      }
    }
  }

这是@timestamp 映射:

"@timestamp": {
   "type": "date",
   "format": "dateOptionalTime"
 }

【问题讨论】:

  • 能否添加您的映射?谢谢!
  • 你能详细说明什么“不起作用”吗?有什么错误要分享吗?
  • 过滤不工作。它返回具有“时间戳”值的行:2020 年 10 月 18 日,07:59:32.842

标签: elasticsearch kibana elasticsearch-aggregation


【解决方案1】:

实际上,第一个选项几乎是正确的。您只需在查询中将 size 设置为 0,删除不需要的 _source,然后在 terms 聚合中将 size 设置为 1000:

{
  "size": "0",
  "query": {
    "range": {
      "@timestamp": {
        "gte": "2020-10-20T00:00:00",
        "lt": "2020-10-21T00:00:00"
      }
    }
  },
  "aggs": {
    "ids": {
      "terms": {
        "field": "Id.keyword",
        "size": 1000
      }
    }
  }
}

【讨论】:

  • 过滤不工作。它返回具有“时间戳”值的行:2020 年 10 月 18 日,07:59:32.842
  • 你的索引的映射是什么?在响应中,您不应该有任何点击,只是聚合。您如何发送查询?
  • 是的,响应只有 Id,但是当我转到 Kibana 并按其中一个 Id 进行过滤以确保该 Id 的所有行都从 10 月 18 日开始工作时。
  • 不确定“您的索引的映射是什么?”是什么意思?我怎么会找到那个?抱歉,ELK 堆栈相对较新。
  • 在 Kibana 开发工具中运行 GET your-index-name/_mapping 会得到什么?
猜你喜欢
  • 2015-10-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-02-06
  • 1970-01-01
  • 2015-09-17
  • 2014-02-02
  • 2019-03-03
相关资源
最近更新 更多