【问题标题】:combine query_string and aggregations结合 query_string 和聚合
【发布时间】:2026-02-04 09:35:01
【问题描述】:

我在一个索引中有来自不同应用程序的文档,应用程序名称在每个文档中都有一个字段。现在我想计算每天每个申请的文件数量。应用程序名称是字符串格式,所以我不能使用过滤器术语。 虽然下面的 GET 查询对每个应用程序进行过滤

{
  "query": {
    "filtered": {
      "query": {
        "query_string": {
           "query": "+environmentType:prod +application:app1",
           "analyze_wildcard": true
        }
      }
    }
  }
}

我可以将这个聚合用于简单的每日计数

{
  "aggs": {
    "simpleDatehHistogram": {
      "date_histogram": {
        "field": "timestamp",
        "interval": "day"
      }
    }
  }
}

我似乎无法将它们组合起来,以便将应用程序过滤器应用于我的聚合结果。

这是我的索引的映射。

{
  "myIndex" : {
    "mappings" : {
      "myType" : {
        "properties" : {
          "application" : {
            "type" : "string"
          },
          "environmentType" : {
            "type" : "string"
          },
          "event" : {
            "properties" : {
              "Id" : {
                "type" : "long"
              },
              "documentId" : {
                "type" : "string"
              },
            }
          },
          "hostname" : {
            "type" : "string"
          },
          "id" : {
            "type" : "string"
          },
          "timestamp" : {
            "type" : "date",
            "format" : "dateOptionalTime"
          },
          "timestampEpoch" : {
            "type" : "long"
          },
          "type" : {
            "type" : "string"
          },
          "version" : {
            "type" : "string"
          }
        }
      }
    }
  }
}

【问题讨论】:

    标签: elasticsearch query-string elasticsearch-aggregation


    【解决方案1】:

    使用它来组合它们:

    {
       "size":0,
       "query":{
          "filtered":{
             "query":{
                "query_string":{
                   "query":"+environmentType:prod +application:app1",
                   "analyze_wildcard":true
                }
             }
          }
       },
       "aggs":{
          "simpleDatehHistogram":{
             "date_histogram":{
                "field":"timestamp",
                "interval":"day"
             }
          }
       }
    }
    

    【讨论】:

    • 这是我实际尝试的第一件事,但无论我的应用程序名称如何,结果都是相同的,所以我猜这个过滤器没有应用......
    • 你能发布你的索引映射吗? GET index/type/_mapping
    • 我刚刚尝试了上面的查询,它确实为我带来了基于上面应用的查询的聚合桶。你能详细说明一下吗?
    • 好的,我只是尝试对我的应用程序进行聚合,发现带有“-”的应用程序名称没有按我的预期划分,因此应用程序名称为“app_one”和“app_two” ,我得到三个桶,分别是“app”、“one”和“two”,其中一个上的 query_string 返回“app”桶。
    • 乐于助人:)