Authored by hugufei

aggGender 的 BUG

... ... @@ -72,6 +72,10 @@ public class AggregationFactoryService {
public IAggregation getGenderAggregation(Map<String, String> paramMap) {
return new GenderAggregation(paramMap);
}
public IAggregation getGenderNewAggregation() {
return new GenderNewAggregation();
}
public IAggregation getPriceAggregation() {
return new PriceAggregation();
... ...
package com.yoho.search.aggregations.impls;
import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.Map;
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;
public class GenderNewAggregation extends AbstractAggregation {
@Override
public String aggName() {
return "genderAgg";
}
@Override
public AbstractAggregationBuilder getBuilder() {
return AggregationBuilders.terms(aggName()).field("gender").size(5);
}
@Override
public Object getAggregationResponseMap(Map<String, Aggregation> aggMaps) {
MultiBucketsAggregation aggregation = this.getAggregation(aggMaps);
if (aggregation == null) {
return null;
}
Map<String, Object> genderMap = new LinkedHashMap<String, Object>();
Iterator<? extends Bucket> itgenderAgg = aggregation.getBuckets().iterator();
while (itgenderAgg.hasNext()) {
Bucket ltgender = itgenderAgg.next();
String genderId = ltgender.getKey();
if ("1".equals(genderId)) {
genderMap.put("1,3", "BOYS");
} else if ("2".equals(genderId)) {
genderMap.put("2,3", "GIRLS");
} else if ("3".equals(genderId)) {
genderMap.put("1,3", "BOYS");
genderMap.put("2,3", "GIRLS");
}
}
return genderMap;
}
}
... ...
... ... @@ -139,6 +139,20 @@ public class AggregationService implements ApplicationEventPublisherAware{
String filterParamName = needPreAggregation ? ISearchConstans.PARAM_SEARCH_GENDER : null;
return this.getAggNameAndResponse(aggregation, searchParam, paramMap, filterParamName);
}
/**
* 获取性别层面的聚合结果
*
* @param searchParam
* @param paramMap
* @return
* @throws Exception
*/
public JSONObject getGenderNewAggregationResult(SearchParam searchParam, Map<String, String> paramMap, boolean needPreAggregation) throws Exception {
IAggregation aggregation = aggregationFactoryService.getGenderNewAggregation();
String filterParamName = needPreAggregation ? ISearchConstans.PARAM_SEARCH_GENDER : null;
return this.getAggNameAndResponse(aggregation, searchParam, paramMap, filterParamName);
}
/**
* 获取价格层面的聚合结果[结果经过缓存之后会变成无序的,此时需要手动转一下]
... ...
... ... @@ -121,7 +121,7 @@ public class ProductIndexServiceImpl implements IProductIndexService,Application
@Override
public Object getResult() throws Exception {
SearchParam searchParam = getSearchParamFromMap(paramMap);
JSONObject jsonObject = aggregationService.getGenderAggregationResult(searchParam, paramMap, false);
JSONObject jsonObject = aggregationService.getGenderNewAggregationResult(searchParam, paramMap, false);
return jsonObject.get("genderAgg");
}
});
... ...