Elasticsearch中文名聚合分组

版权声明:本文为博主原创文章,未经博主允许不得转载 https://blog.csdn.net/weixin_43841760/article/details/84643236

Elasticsearch中文名聚合分组


在用Elasticsearch对中文字段进行聚合统计的时候,出现中文被分词的情况,这个时候需要设置需要被聚合字段的mapping属性。
请求地址: http://192.168.0.1:9200/index/_mapping/type/

{
  "properties": {
		"author": {
             "type": "text",
             "fielddata" : true,
             "fields": {"raw": {"type": "keyword"}}
		}
	}
}

在java代码里调用

public JSONArray queryRelation(Integer evnetId) {
		Client client = ElasticsearchWrapper.getTransportClient();
		BoolQueryBuilder bq = QueryBuilders.boolQuery();
		bq.must(QueryBuilders.matchQuery("eventId", evnetId));
		bq.must(QueryBuilders.matchQuery("docType", "event"));
		TermsAggregationBuilder authorTermsBuilder = AggregationBuilders.terms("authorAgg").size(100)
				.field("author.keyword");
		SearchResponse sr = client.prepareSearch(indexName).setTypes(esType).setSearchType(SearchType.QUERY_THEN_FETCH)
				.setQuery(bq).addAggregation(authorTermsBuilder).execute().actionGet();
		StringTerms hhf = sr.getAggregations().get("authorAgg");
		JSONArray jsonArray = new JSONArray();
		for (StringTerms.Bucket bb : hhf.getBuckets()) {
			JSONObject json = new JSONObject();
			json.put("name", bb.getKey());
			json.put("value", bb.getDocCount());
			jsonArray.add(json);
		}
		return jsonArray;
	}

返回结果效果:

[ {
    "name" : "魔都之家",
    "value" : 34
  }, {
    "name" : "TG实习狗",
    "value" : 19
  }, {
    "name" : "上海温度",
    "value" : 19
  }, {
    "name" : "拾实咨询",
    "value" : 14
  }, {
    "name" : "宝山就业",
    "value" : 13
  }, {
    "name" : "成长无忧选好课",
    "value" : 11
  }, {
    "name" : "浦东国际人才城",
    "value" : 10
  }]

猜你喜欢

转载自blog.csdn.net/weixin_43841760/article/details/84643236