Authored by wangnan

【自定义标签】 品类+模糊搜索 聚合,筛选

package com.yoho.search.service.aggregations.impls;
import java.util.Map;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yoho.search.core.es.agg.IAggregation;
import com.yoho.search.service.base.index.BrandIndexBaseService;
import com.yoho.search.service.base.index.ColorIndexBaseService;
import com.yoho.search.service.base.index.ProductIndexBaseService;
import com.yoho.search.service.base.index.PromotionIndexBaseService;
import com.yoho.search.service.base.index.ShopsIndexBaseService;
import com.yoho.search.service.base.index.SizeIndexBaseService;
import com.yoho.search.service.base.index.StandardIndexBaseService;
import com.yoho.search.service.base.index.StyleIndexBaseService;
import com.yoho.search.service.base.index.*;
import com.yoho.search.service.helper.SearchAfterCacheHelper;
import com.yoho.search.service.scorer.personal.PersonalVectorFeatureSearch;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
@Service
public class AggregationFactoryService {
... ... @@ -40,6 +32,8 @@ public class AggregationFactoryService {
private PersonalVectorFeatureSearch personalVectorFeatureSearch;
@Autowired
private ProductIndexBaseService productIndexBaseService;
@Autowired
private CustomizeTagBaseService customizeTagBaseService;
public IAggregation getAgeLevelAggregation() {
return new AgeLevelAggregation();
... ... @@ -136,4 +130,7 @@ public class AggregationFactoryService {
public IAggregation getShopAggregation(int aggCount) {
return new ShopAggregation(shopsIndexBaseService, aggCount);
}
public IAggregation getCustomizeTagAggregation(){return new CustomizeTagAggregation(customizeTagBaseService);}
}
... ...
package com.yoho.search.service.aggregations.impls;
import com.yoho.search.base.utils.ProductIndexEsField;
import com.yoho.search.core.es.agg.AbstractAggregation;
import com.yoho.search.service.base.index.CustomizeTagBaseService;
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.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.Iterator;
import java.util.LinkedHashSet;
import java.util.Map;
import java.util.Set;
/**
* Created by wangnan on 2017/9/12.
*/
public class CustomizeTagAggregation extends AbstractAggregation {
private final Logger logger = LoggerFactory.getLogger(getClass());
private CustomizeTagBaseService customizeTagBaseService;
CustomizeTagAggregation(CustomizeTagBaseService colorIndexBaseService) {
this.customizeTagBaseService = colorIndexBaseService;
}
@Override
public String aggName() {
return "customizeTagAgg";
}
@Override
public String filterName() {
return "customize_tag";
}
@Override
public AbstractAggregationBuilder<?> getBuilder() {
return AggregationBuilders.terms(aggName()).field(ProductIndexEsField.customizeTagId).size(100);
}
@Override
public Object getAggregationResponseMap(Map<String, Aggregation> aggMaps) {
MultiBucketsAggregation aggregation = this.getAggregation(aggMaps);
if (aggregation == null) {
return null;
}
Set<String> tagIdSet = new LinkedHashSet<String>();
Iterator<? extends MultiBucketsAggregation.Bucket> itTagAgg = aggregation.getBuckets().iterator();
while (itTagAgg.hasNext()) {
MultiBucketsAggregation.Bucket ltTag = itTagAgg.next();
for (String tagId : ltTag.getKeyAsString().split(",")) {
tagIdSet.add(tagId);
}
}
try {
return customizeTagBaseService.getTagListByIds(tagIdSet);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
... ...
... ... @@ -6,7 +6,7 @@ public class SearchRequestParams {
public static final String PARAM_SEARCH_PAGEID = "pageId"; // 页面id
public static final String PARAM_SEARCH_VIEWNUM = "viewNum"; // 数量
public static final String PARAM_SEARCH_QUERY = "query";// 检索关键词
public static final String PARAM_SEARCH_QUERY = "query";// 检索关键词
public static final String PARAM_SEARCH_SHOPS_KEYWORD = "keyword";// 店铺检索词
public static final String PARAM_SEARCH_GENDER = "gender"; // 性别ids[1,2,3]
... ... @@ -120,4 +120,6 @@ public class SearchRequestParams {
public static final String SHOPS_PARAM_STATUS = "status";
public static final String SHOPS_PARAM_ISGLOBAL = "isGlobal";
public static final String SHOPS_PARAM_CUSTOMIZE_TAG = "customize_tag";
}
... ...
package com.yoho.search.service.base.index;
import com.yoho.search.base.utils.ISearchConstants;
import com.yoho.search.service.base.SearchCommonService;
import org.apache.commons.collections.MapUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
/**
* Created by wangnan on 2017/9/12.
*/
@Service
public class CustomizeTagBaseService {
private final Logger logger = LoggerFactory.getLogger(getClass());
private static final String ACTIVITY_TAG_INDEX_NAME = ISearchConstants.INDEX_NAME_ACTIVITY_TAG;
@Autowired
private SearchCommonService searchCommonService;
public List<Map<String, Object>> getTagListByIds(final Collection<?> tagIds) {
List<Map<String, Object>> resultList = new ArrayList<Map<String, Object>>();
try {
List<Map<String, Object>> sizeEsMapList = searchCommonService.doMultiGetCommon(ACTIVITY_TAG_INDEX_NAME, tagIds);
for (Map<String, Object> sizeEsMap : sizeEsMapList) {
resultList.add(this.getTagMap(sizeEsMap));
}
} catch (Exception e) {
logger.error(e.getMessage(), e);
}
return resultList;
}
private Map<String, Object> getTagMap(Map<String, Object> esMap) {
Map<String, Object> map = new HashMap<String, Object>();
map.put("id", MapUtils.getIntValue(esMap, "id", 0));
map.put("name", MapUtils.getString(esMap, "activityName", ""));
return map;
}
}
... ...
package com.yoho.search.service.base.index;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import javax.annotation.PostConstruct;
import com.alibaba.fastjson.JSONArray;
import com.yoho.search.base.utils.ProductIndexEsField;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONArray;
import com.yoho.search.base.utils.ProductIndexEsField;
import javax.annotation.PostConstruct;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
@Service
public class ProductIndexBaseService {
... ... @@ -98,6 +96,9 @@ public class ProductIndexBaseService {
productIndexIncludeFields.add(ProductIndexEsField.tblBrandId);
productIndexIncludeFields.add(ProductIndexEsField.tblCountryId);
productIndexIncludeFields.add(ProductIndexEsField.tblCountryName);
productIndexIncludeFields.add(ProductIndexEsField.customizeTag);
productIndexIncludeFields.add(ProductIndexEsField.promotionTag);
}
public List<String> getProductIndexIncludeFields() {
... ... @@ -196,6 +197,11 @@ public class ProductIndexBaseService {
productMap.put("tbl_brand_id", MapUtils.getIntValue(map, ProductIndexEsField.tblBrandId, 0));
productMap.put("tbl_country_name", MapUtils.getString(map, ProductIndexEsField.tblCountryName, ""));
productMap.put("tbl_plane", (tbl_country_id > 0 && tbl_country_id != 86) ? "Y" : "N");
//标签
productMap.put("customize_tag", MapUtils.getObject(map, ProductIndexEsField.customizeTag, new JSONArray()));
productMap.put("promotion_tag", MapUtils.getObject(map, ProductIndexEsField.promotionTag, new JSONArray()));
return productMap;
}
... ...
package com.yoho.search.service.helper;
import java.util.Arrays;
import java.util.Date;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.lucene.search.join.ScoreMode;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.MultiMatchQueryBuilder;
import org.elasticsearch.index.query.Operator;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.index.query.RangeQueryBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.yoho.search.base.constants.ProductModelValueConstants;
import com.yoho.search.base.utils.ConvertUtils;
import com.yoho.search.base.utils.DateUtil;
... ... @@ -26,6 +7,15 @@ import com.yoho.search.base.utils.ISearchConstants;
import com.yoho.search.base.utils.ProductIndexEsField;
import com.yoho.search.common.utils.SearchKeyWordUtils;
import com.yoho.search.service.base.SearchRequestParams;
import org.apache.commons.lang.StringUtils;
import org.apache.lucene.search.join.ScoreMode;
import org.elasticsearch.index.query.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.*;
@Service
public class SearchServiceHelper {
... ... @@ -224,6 +214,11 @@ public class SearchServiceHelper {
int[] storeShowStatuss = ConvertUtils.stringToIntArray(paramMap.get(SearchRequestParams.PARAM_SEARCH_STORESHOWSTATUS), ",");
boolFilter.must(QueryBuilders.termsQuery(ProductIndexEsField.storeShowStatus, storeShowStatuss));
}
//个性化标签
if (this.checkParamNotFiltered(paramMap, filterParamName, SearchRequestParams.SHOPS_PARAM_CUSTOMIZE_TAG)) {
int[] ids = ConvertUtils.stringToIntArray(paramMap.get(SearchRequestParams.SHOPS_PARAM_CUSTOMIZE_TAG), ",");
boolFilter.must(QueryBuilders.termsQuery(ProductIndexEsField.customizeTagId, ids));
}
// //////////////////////////////////////////不支持多个参数///////////////////////////////////////////////////////////
// 是否特价
if (this.checkParamNotFiltered(paramMap, filterParamName, SearchRequestParams.PARAM_SEARCH_SPECIALOFFER)) {
... ...
package com.yoho.search.service.scene;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
import com.yoho.search.base.utils.SearchPageIdDefine;
import com.yoho.search.common.utils.SearchApiResultUtils;
... ... @@ -19,7 +11,18 @@ import com.yoho.search.service.helper.SearchKeyWordHelper;
import com.yoho.search.service.scene.common.AbstractSceneService;
import com.yoho.search.service.scene.common.SceneProductListService;
import com.yoho.search.service.scene.common.SceneSelectionsService;
import com.yoho.search.service.service.IProductIndexService;
import com.yoho.search.service.service.ISearchRecommendService;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@Service
public class FuzzySceneService extends AbstractSceneService {
... ... @@ -38,6 +41,10 @@ public class FuzzySceneService extends AbstractSceneService {
private SearchDynamicConfigService searchDynamicConfigService;
@Autowired
private SearchKeyWordHelper searchKeyWordService;
@Autowired
private IProductIndexService productIndexService;
private ExecutorService executorService = Executors.newFixedThreadPool(100);
// 当少于20个商品时 返回智能搜索词提示
private static final int SMART_SUGGESTION_PRODUCT_LIMIT = 20;
... ... @@ -62,22 +69,29 @@ public class FuzzySceneService extends AbstractSceneService {
@Override
public SearchApiResult productList(Map<String, String> paramMap) {
try {
// 0、参数校验
// 1、参数校验
if (StringUtils.isBlank(paramMap.get(SearchRequestParams.PARAM_SEARCH_QUERY))) {
return new SearchApiResult().setCode(400).setMessage("请传query参数");
}
// 1、添加默认参数
// 2、添加默认参数
this.addParamsToParamMap(paramMap);
// 2、获取商品列表
// 3、获取商品列表
SearchApiResult searchApiResult = sceneProductListService.productList(paramMap);
// 3、加入建议词
// 4、加入建议词
this.addSuggestion(searchApiResult, paramMap);
// 4、模糊搜索页记录关键字对应的查询结果
// 5、模糊搜索页记录关键字对应的查询结果
String queryWord = paramMap.get("query");
if (!StringUtils.isBlank(queryWord) && !searchCommonHelper.isQuerySknOrSku(queryWord)) {
long total = ((JSONObject) searchApiResult.getData()).getLongValue("total");
searchKeyWordService.recordKeyWordByResultCount(queryWord, total);
}
// 6、获取自定义标签聚合结果
CompletableFuture<SearchApiResult> customizeTagFuture = CompletableFuture.supplyAsync(() -> {
return productIndexService.aggCustomizeTag(paramMap);
}, executorService);
SearchApiResult customizeTags = customizeTagFuture.get();
JSONObject dataMap = (JSONObject)searchApiResult.getData();
dataMap.put("customize_tag", customizeTags.getData());
return searchApiResult;
} catch (Exception e) {
logger.error(e.getMessage(), e);
... ...
package com.yoho.search.service.scene;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
import com.yoho.search.base.utils.SearchPageIdDefine;
import com.yoho.search.models.SearchApiResult;
... ... @@ -25,6 +10,20 @@ import com.yoho.search.service.scene.common.AbstractSceneService;
import com.yoho.search.service.scene.common.SceneProductListService;
import com.yoho.search.service.scene.common.SceneSelectionsService;
import com.yoho.search.service.service.IProductIndexService;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@Service
public class SortSceneService extends AbstractSceneService {
... ... @@ -94,15 +93,20 @@ public class SortSceneService extends AbstractSceneService {
return null;
}
}, executorService);
// 3、获取规则的聚合结果
// 3、获取规则和自定义标签的聚合结果
CompletableFuture<SearchApiResult> standardsFuture = CompletableFuture.supplyAsync(() -> {
return productIndexService.aggStandard(paramMap);
}, executorService);
CompletableFuture<SearchApiResult> customizeTagFuture = CompletableFuture.supplyAsync(() -> {
return productIndexService.aggCustomizeTag(paramMap);
}, executorService);
// 4、组合结果
SearchApiResult productList = productListFuture.get();
SearchApiResult standards = standardsFuture.get();
SearchApiResult customizeTags = customizeTagFuture.get();
JSONObject jsonObject = (JSONObject) productList.getData();
jsonObject.put("standard", standards.getData());
jsonObject.put("customize_tag", customizeTags.getData());
return productList;
} catch (Exception e) {
logger.error(e.getMessage(), e);
... ...
package com.yoho.search.service.scene.common;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
import org.elasticsearch.search.aggregations.Aggregation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.yoho.search.base.utils.ISearchConstants;
... ... @@ -29,6 +13,21 @@ import com.yoho.search.service.aggregations.impls.AggregationFactoryService;
import com.yoho.search.service.base.SearchCommonService;
import com.yoho.search.service.helper.SearchParamHelper;
import com.yoho.search.service.service.IAggRecommendService;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
import org.elasticsearch.search.aggregations.Aggregation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
@Service
public class SceneSelectionsService extends AbstractCacheAbleService {
... ...
package com.yoho.search.service.service;
import java.util.Arrays;
import java.util.Map;
import javax.annotation.PostConstruct;
import org.elasticsearch.search.aggregations.Aggregation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
import com.yoho.error.event.SearchEvent;
import com.yoho.search.base.utils.EventReportEnum;
... ... @@ -28,6 +15,17 @@ import com.yoho.search.service.base.SearchCacheService;
import com.yoho.search.service.base.SearchCommonService;
import com.yoho.search.service.base.SearchRequestParams;
import com.yoho.search.service.helper.SearchParamHelper;
import org.elasticsearch.search.aggregations.Aggregation;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.stereotype.Service;
import javax.annotation.PostConstruct;
import java.util.Arrays;
import java.util.Map;
@Service
public class AggregationService implements ApplicationEventPublisherAware {
... ... @@ -262,4 +260,14 @@ public class AggregationService implements ApplicationEventPublisherAware {
return this.getAggNameAndResponseWithCache(standardAggregation, searchParam);
}
/**
* 获取自定义标签的聚合结果
*/
public JSONObject getCustomizeTagResult(Map<String, String> paramMap) throws Exception {
IAggregation customizeAggregation = aggregationFactoryService.getCustomizeTagAggregation();
String filterParamName = null;
SearchParam searchParam = this.genSearchParamForAgg(customizeAggregation, paramMap, filterParamName, 0);
return this.getAggNameAndResponseWithCache(customizeAggregation, searchParam);
}
}
... ...
... ... @@ -8,75 +8,75 @@ public interface IProductIndexService {
/**
* 获取年龄层面的聚合结果
*
*
* @param paramMap
* @return
*/
public SearchApiResult aggAgeLevel(Map<String, String> paramMap);
/**
* 获取性别层面的聚合结果
* @param paramMap
* @return
*/
public SearchApiResult aggGender(Map<String, String> paramMap);
/**
* 获取价格层面的聚合结果
* @param paramMap
* @return
*/
public SearchApiResult aggPrice(Map<String, String> paramMap);
/**
* 获取颜色层面的聚合结果
* @param paramMap
* @return
*/
public SearchApiResult aggColor(Map<String, String> paramMap);
/**
* 获取风格层面的聚合结果
* @param paramMap
* @return
*/
public SearchApiResult aggStyle(Map<String, String> paramMap);
/**
* 获取品牌的聚合结果
* @param paramMap
* @return
*/
public SearchApiResult aggBrand(Map<String, String> paramMap);
/**
* 获取标准的聚合结果
* @param paramMap
* @return
*/
public SearchApiResult aggStandard(Map<String, String> paramMap);
/**
* 获取尺码的聚合结果
* @param paramMap
* @return
*/
public SearchApiResult aggSize(Map<String, String> paramMap);
/**
* 是否新品的聚合结果
* @param paramMap
* @return
*/
public SearchApiResult aggNew(Map<String, String> paramMap);
/**
* 是否限量的聚合结果
* @param paramMap
* @return
*/
public SearchApiResult aggLimited(Map<String, String> paramMap);
/**
* 是否促销的聚合结果
* @param paramMap
... ... @@ -99,5 +99,18 @@ public interface IProductIndexService {
*/
SearchApiResult aggKeywords(Map<String, String> paramMap);
/**
* 店铺
* @param paramMap
* @return
*/
SearchApiResult aggShops(Map<String, String> paramMap);
/**
* 自定义标签
* @param paramMap
* @return
*/
SearchApiResult aggCustomizeTag(Map<String, String> paramMap);
}
... ...
package com.yoho.search.service.service.impl;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.stream.Collectors;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.stereotype.Service;
import com.alibaba.fastjson.JSONObject;
import com.yoho.error.event.SearchEvent;
import com.yoho.search.base.utils.EventReportEnum;
... ... @@ -22,6 +9,18 @@ import com.yoho.search.models.SearchApiResult;
import com.yoho.search.service.base.SearchCommonService;
import com.yoho.search.service.service.AggregationService;
import com.yoho.search.service.service.IProductIndexService;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationEventPublisher;
import org.springframework.context.ApplicationEventPublisherAware;
import org.springframework.stereotype.Service;
import java.util.List;
import java.util.Map;
import java.util.Random;
import java.util.stream.Collectors;
@Service
public class ProductIndexServiceImpl implements IProductIndexService, ApplicationEventPublisherAware {
... ... @@ -188,7 +187,8 @@ public class ProductIndexServiceImpl implements IProductIndexService, Applicatio
});
}
@Override
@Override
public SearchApiResult aggNew(Map<String, String> paramMap) {
return this.getSearchApiResult("aggNew", paramMap, new Searcher() {
@Override
... ... @@ -256,4 +256,16 @@ public class ProductIndexServiceImpl implements IProductIndexService, Applicatio
}
return new Random().ints(0, keywordList.size()).distinct().limit(randomKeywordCount).mapToObj(index -> keywordList.get(index)).collect(Collectors.toList());
}
@Override
public SearchApiResult aggCustomizeTag(Map<String, String> paramMap) {
return this.getSearchApiResult("aggCustomizeTag", paramMap, new Searcher() {
@Override
public Object getResult() throws Exception {
JSONObject jsonObject = aggregationService.getCustomizeTagResult(paramMap);
return jsonObject.get("customizeTagAgg");
}
});
}
}
... ...