通过Aggregation来分组查询:
SearchResponse response = client.prepareSearch(INDEX_DOUBAN).setTypes(TYPE_DOUBAN)
.addAggregation(
AggregationBuilders.terms("by_"+tag).field(tag).size(1000)
)
.execute().actionGet();
Terms terms = response.getAggregations().get("by_"+tag);
for(Bucket b:terms.getBuckets()){
// Sum sum = b.getAggregations().get("sum");
list.add((String) b.getKey());
//System.out.println("filedname:"+b.getKey()+" docCount:"+b.getDocCount());
}
这里要注意的是:返回数量不是和之前一样setSize(),而是要设置AggregationBuilders的size才行;其次:对于非数字和英文的字段,这样的组合查询默认会进行分词处理,所以要用mapping来设置字段的分词与否,这部分后面详细叙述。
时间: 2024-10-18 12:02:12