elasticsearch 多次聚合
curl -XGET 'http://localhost:9200/alias-product/product/_search?pretty' -d '{ "size" : 0, "query" : { "function_score" : { "query" : { "filtered" : { "filter" : { "bool" : { "should" : [ { "match" : { "_all" : { "query" : "电子", "type" : "boolean", "operator" : "AND" } } }, { "match" : { "company_name" : { "query" : "电子", "type" : "boolean", "operator" : "AND" } } }, { "match" : { "title" : { "query" : "电子", "type" : "boolean", "operator" : "AND" } } } ], "minimum_should_match" : "1" } } } }, "functions" : [ { "filter" : { "match" : { "_all" : { "query" : "电子", "type" : "boolean", "operator" : "AND" } } }, "weight" : 2.0 }, { "filter" : { "match" : { "company_name" : { "query" : "电子", "type" : "boolean", "operator" : "AND" } } }, "weight" : 8.0 }, { "filter" : { "match" : { "title" : { "query" : "电子", "type" : "boolean", "operator" : "AND" } } }, "weight" : 4.0 }, { "filter" : { "range" : { "seling_auction_cnt" : { "from" : 0, "to" : null, "include_lower" : false, "include_upper" : true } } }, "weight" : 1.0 }, { "field_value_factor" : { "field" : "company_score", "factor" : 1.0E-6 } } ], "score_mode" : "sum" } }, "aggs" : { "agg" : { "terms" : { "field" : "member_id", "size" : 0, "order" : { "top_hit" : "desc" } }, "aggregations" : { "top_hit" : { "max" : { "script" : { "inline" : "_score" } } } } }, "agg1" : { "scripted_metric": { "init_script": "_agg[\"prd\"] = []", "map_script": "if(doc[\"cat2_id\"].value) {_agg.prd.add(doc[\"cat2_id\"].value.toString())}", "combine_script": "combined = [:]; for (tmp in _agg.prd) { if(!combined[tmp]) { combined[tmp] = 1 } }; return combined", "reduce_script": "reduced = []; for (a in _aggs) { for (entry in a) { reduced.add(entry.key); } }; return reduced" } }, "agg2" : { "scripted_metric": { "init_script": "_agg[\"prd\"] = []", "map_script": "if(doc[\"cat2_id\"].value) {_agg.prd.add(doc[\"cat2_id\"].value.toString())}", "combine_script": "combined = [:]; for (tmp in _agg.prd) { if(!combined[tmp]) { combined[tmp] = 1 } }; return combined", "reduce_script": "reduced = [:]; for (a in _aggs) { for (entry in a) { word = entry.key; if (!reduced[word] ) { reduced[word] = entry.value; } } }; return reduced" } } } }' 本文转自whk66668888 51CTO博客,原文链接:http://blog.51cto.com/12597095/1908017