Elasticsearch terms使用脚本修改统计的数据源
如:索引中有两个 styleCode(类似spu)跟 goodsCode(类似sku)区分商品;现在需要根据品牌信息为七匹狼的数据使用goodsCode就行统计。
POST xxx_goods_info/_search
{"query": {"bool": {"must": [{"term": {"brand": {"value": "七匹狼"}}},{"match": {"ngStatus": "sj"}}]}},"aggs": {"brand_terms_count": {"terms": {"script": "if(doc.brand.value=='七匹狼'){return doc.goodsCode}else{return doc.styleCode}","size": 10}}}
}
- 查询时使用term和match过滤指定的品牌信息和商品状态
- aggs.brand_terms_count 使用script对统计来源进行处理,逻辑较为简单,如果是七匹狼品牌,返回goodsCode,其他使用styleCode。
参数也可以使用params传递,script脚本改成如下:
POST xxx_goods_info/_search
{"query": {"bool": {"must": [{"term": {"brand": {"value": "七匹狼"}}},{"match": {"ngStatus": "sj"}}]}},"aggs": {"brand_terms_count": {"terms": {"script": {"source": "if(doc.brand.value==params.brand){return doc.goodsCode}else{return doc.styleCode}","lang": "painless", "params": {"brand":"七匹狼"}},"size": 10}}}
}