StyleAggregation.java 2.07 KB
package com.yoho.search.aggregations.impls;

import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;

import org.apache.commons.lang.StringUtils;
import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation;
import org.elasticsearch.search.aggregations.bucket.MultiBucketsAggregation.Bucket;

import com.yoho.search.aggregations.AbstractAggregation;
import com.yoho.search.service.SearchCommonService;
import com.yoho.search.utils.ISearchConstans;

public class StyleAggregation extends AbstractAggregation {

	private SearchCommonService searchCommonService;
	private Map<String, String> paramMap;

	StyleAggregation(SearchCommonService searchCommonService, Map<String, String> paramMap) {
		this.searchCommonService = searchCommonService;
		this.paramMap = paramMap;
	}

	@Override
	public String aggName() {
		return "styleAgg";
	}

	@Override
	public AbstractAggregationBuilder getBuilder() {
		return AggregationBuilders.terms(aggName()).field("styleIds").size(100);
	}

	@Override
	public Object getAggregationResponseMap(Map<String, Aggregation> aggMaps) {
		MultiBucketsAggregation aggregation = this.getAggregation(aggMaps);
		if (aggregation == null) {
			return null;
		}
		Set<String> styleIdsSet = new LinkedHashSet<String>();
		Iterator<? extends Bucket> itSizeAgg = aggregation.getBuckets().iterator();
		while (itSizeAgg.hasNext()) {
			Bucket ltSize = itSizeAgg.next();
			for (String sizeId : ltSize.getKey().split(",")) {
				styleIdsSet.add(sizeId);
			}
		}
		if (paramMap.containsKey("style") && StringUtils.isNotBlank(paramMap.get("style"))) {
			String[] ids = paramMap.get("style").split(",");
			for (String id : ids) {
				styleIdsSet.add(id);
			}
		}
		try {
			return searchCommonService.doMultiGet(ISearchConstans.INDEX_NAME_STYLE, styleIdsSet, null);
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}

}