弹性搜索中多个字段的Groupby功能

时间:2015-09-04 07:14:16

标签: elasticsearch

我有一个要求,我需要按照给定日期按地区和地区分组status_value。同样我写了一个查询,它并没有完全在ES中工作。如果有人对此进行调查并向我提供解决方案,那将是一个很大的帮助。

注意:我想得到最后一天(即前一天)的结果。

{
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "term": {
          "UsagePoint_Asset_lifecycle_installationDate": "2014-07-13T16:55:00.0-07:00"
        }
      }
    }
  },
    "aggs" : {
        "product" : {
            "terms" : {
                "field" : "UsagePoint_ServiceLocation_region"
            },
            "aggs" : {
                "material" : {
                    "terms" : {
                        "field" : "UsagePoint_status_value"
                    }
                }
            }
        }       
    }
}

我的SQL查询可能如下所示:

select count(status_value)
from products 
where date = "yesterday"
group by region , date

请检查以下查询是否正常,但我想获取特定日期或某些日期的值。

{
    "agg1": {
        "terms": {
           "field":"UsagePoint_Asset_lifecycle_installationDate"
        },
        "aggs" : {
        "product" : {
            "terms" : {
                "field" : "UsagePoint_ServiceLocation_region"
            },
            "aggs" : {
                "material" : {
                    "terms" : {
                        "field" : "UsagePoint_status_value"
                    }
                }
            }
        }       
    }
    }
}

1 个答案:

答案 0 :(得分:1)

如果您需要昨天的信息组,以下是一个解决方案。 对于任何其他自定义日期,请更改gte(大于或等于)和lt(小于)

中的值
{
  "query": {
    "filtered": {
      "query": {
        "match_all": {}
      },
      "filter": {
        "range": {
          "UsagePoint_Asset_lifecycle_installationDate": {
            "gte": "now-1d",
            "lt": "now"
          }
        }
      }
    }
  },
  "aggs": {
    "product": {
      "terms": {
        "field": "UsagePoint_ServiceLocation_region"
      },
      "aggs": {
        "material": {
          "terms": {
            "field": "UsagePoint_status_value"
          }
        }
      }
    }
  }
}