繁体   English   中英

Elasticsearch中按参数分组的聚合

[英]Aggregations group by parameters in Elasticsearch

我在Elasticsearch中有一些类似的文档:

{ "numberOfBedrooms": 2, "price": 1500, "type": flat }

我想获取统计信息,例如按房间划分的平均价格是多少,按类型划分的平均价格是多少,以及诸如pernumberOfBedroom + type组合的平均价格是多少的组合。 如何在弹性搜索中使用聚合来实现这一目标?

谢谢!

要按房间数显示平均价格,请创建一个具有两个嵌套聚合级别的查询。

  • 1级-使用术语汇总来逐步调整卧室的大小
  • 2级-计算当前卧室大小的平均价格

例如此查询:

curl -XGET 'http://localhost:9200/myindex/houses/_search?pretty&search_type=count' -d '{
   "query" : {
        "match_all" : { }
   },
   "aggs": {
     "bed_agg": {
       "terms": {"field": "numberOfBedrooms"},        
         "aggs" : {
             "avg_price" : { "avg" : { "field" : "price" } }
         }
       }
     }
   }
 }'

应该返回类似:

  "aggregations" : {
    "bed_agg" : {
      "doc_count_error_upper_bound" : 0,
      "sum_other_doc_count" : 0,
      "buckets" : [ {
    "key" : 2,
    "doc_count" : 2,
    "avg_price" : {
      "value" : 1750.0
    }
      }, {
    "key" : 3,
    "doc_count" : 1,
    "avg_price" : {
      "value" : 2100.0
    }
      } ]
    }

要在另一个级别上进行聚合(例如添加建筑物类型),您可以创建一个新级别的聚合-例如,将“类型”聚合嵌套在“卧室”聚合中。

curl -XGET 'http://localhost:9200/myindex/houses/_search?pretty&search_type=count' -d '{
  "query" : {
       "match_all" : { }
  },
  "aggs": {
    "bed_agg": {
      "terms": {"field": "numberOfBedrooms"},
      "aggs": {
      "type_agg": {
        "terms": {"field": "type"},          
        "aggs" : {
          "avg_price" : { "avg" : { "field" : "price" } }
         }
        }
       }
      }
    }
  }
}'

或者,您可以使用脚本创建一个包含两个字段的单个存储桶:

 "aggs": {
        "bed_type_agg": {
          "terms": { "script" : "doc[\"numberOfBedrooms\"].value+doc[\"type\"].value"},       
              "aggs" : {
               "avg_price" : { "avg" : { "field" : "price" } }
            }
          }
        }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM