学习了聚合es聚合的例子,如何对结果进行过滤呢?
"terms": {
"field": "color.keyword",
"include": [],
"exclude": []
}
里面有include 和 exclude属性。
看Java里面的 new IncludeExclude 支持多种属性,正则,各种数据类型。
具体怎么操作,看实际的需要去尝试。
Es例子
只统计红色和蓝色的
GET /car_statics_index/_search
{
"size": 0,
"aggs": {
"colors": {
"terms": {
"field": "color.keyword",
"include": ["red","blue"]
}
}
}
}
排除红色的:
GET /car_statics_index/_search
{
"size": 0,
"aggs": {
"colors": {
"terms": {
"field": "color.keyword",
"exclude": ["red"]
}
}
}
}
Java 参数处理:
如果是java要es的怎么处理参数呢?
代码目前只考虑数组类型的
String[] includeArr = null, excludeArr = new String[0];
List<Object> includes = (List<Object>) aggParam.get("include");
List<Object> excludes = (List<Object>) aggParam.get("exclude");
if(includes != null){
includeArr = ListUtils.emptyIfNull(includes).stream().map(Object::toString).toArray(String[]::new);
}
if(excludes != null){
excludeArr = ListUtils.emptyIfNull(excludes).stream().map(Object::toString).toArray(String[]::new);
}
IncludeExclude includeExclude = new IncludeExclude(includeArr , excludeArr);
aggregationBuilder = AggregationBuilders.terms(aggName).field(fieldValue).includeExclude(includeExclude).size(size);
包括includeArr的默认为null,取全部; 排除的excludeArr默认为空数组
数组的类型比较多,都改成字符串数组的去处理。
总结:
写es的时候,对一些语法不熟悉的时候,先去es官网 看看相关的内容,或是去dev控制台那去敲一敲,看看其中有没什么属性。网上找不到答案的时候,多试试其中的属性,有时候会找到想要的答案。