Authored by hugufei

直通车和流量补偿召回时不召回已经断码的商品

... ... @@ -19,7 +19,10 @@ public class ExtendFilterHelper {
* @return
*/
public static QueryBuilder addFlowFilter (){
return QueryBuilders.termQuery(ProductIndexEsField.flowType, "1");
BoolQueryBuilder filter = QueryBuilders.boolQuery();
filter.must(QueryBuilders.termQuery(ProductIndexEsField.flowType, "1"));
filter.mustNot(QueryBuilders.rangeQuery(ProductIndexEsField.breakSizePercent).gt(50));
return filter;
}
/**
... ... @@ -27,7 +30,10 @@ public class ExtendFilterHelper {
* @return
*/
public static QueryBuilder directTrainFilter (){
return QueryBuilders.termQuery(ProductIndexEsField.toAddScore, "Y");
BoolQueryBuilder filter = QueryBuilders.boolQuery();
filter.must(QueryBuilders.termQuery(ProductIndexEsField.toAddScore, "Y"));
filter.mustNot(QueryBuilders.rangeQuery(ProductIndexEsField.breakSizePercent).gt(50));
return filter;
}
/**
... ... @@ -46,6 +52,7 @@ public class ExtendFilterHelper {
return QueryBuilders.termQuery(ProductIndexEsField.productSkn, productSkn);
}
/**
* 新开店铺的过滤器-开店时间30天内,非流量惩罚的
* @return
... ... @@ -55,9 +62,7 @@ public class ExtendFilterHelper {
//must
filter.must(QueryBuilders.rangeQuery(ProductIndexEsField.shopCreateTime).gte(DateUtil.getFirstTimeSecond(DateUtil.addDay(new Date(), -30))));
//must not
filter.mustNot(forbiddenFlowFilter());
filter.mustNot(isGlobalFilter());
filter.mustNot(breakSizeFilter());
filter.mustNot(notRecallFilter());
return filter;
}
... ... @@ -69,55 +74,51 @@ public class ExtendFilterHelper {
return null;
}
/**
* 【品类+品牌】新品
* 【品类+品牌】人气-【除去新品,新降价和新开促销】
* @return
*/
public static QueryBuilder sortBrandNewFilter (SortBrand sortBrand){
public static QueryBuilder sortBrandHeatValue (SortBrand sortBrand){
BoolQueryBuilder filter = QueryBuilders.boolQuery();
//must
filter.must(sortBrandIdFilter(sortBrand));
filter.must(newFilter());
//must not
filter.mustNot(forbiddenFlowFilter());
filter.mustNot(notRecallFilter());
filter.mustNot(newFilter());
filter.mustNot(latestReducePriceFilter());
filter.mustNot(isGlobalFilter());
filter.mustNot(breakSizeFilter());
filter.mustNot(isNewPromotionFilter());
return filter;
}
/**
* 【品类+品牌】新降价
* 【品类+品牌】新
* @return
*/
public static QueryBuilder sortBrandReducePrice (SortBrand sortBrand){
public static QueryBuilder sortBrandNewFilter (SortBrand sortBrand){
BoolQueryBuilder filter = QueryBuilders.boolQuery();
//must
filter.must(sortBrandIdFilter(sortBrand));
filter.must(latestReducePriceFilter());
filter.must(newFilter());
//must not
filter.mustNot(forbiddenFlowFilter());
filter.mustNot(newFilter());
filter.mustNot(isGlobalFilter());
filter.mustNot(breakSizeFilter());
filter.mustNot(notRecallFilter());
filter.mustNot(latestReducePriceFilter());
filter.mustNot(isNewPromotionFilter());
return filter;
}
/**
* 【品类+品牌】人气
* 【品类+品牌】新降价
* @return
*/
public static QueryBuilder sortBrandHeatValue (SortBrand sortBrand){
public static QueryBuilder sortBrandReducePrice (SortBrand sortBrand){
BoolQueryBuilder filter = QueryBuilders.boolQuery();
//must
filter.must(sortBrandIdFilter(sortBrand));
filter.must(latestReducePriceFilter());
//must not
filter.mustNot(forbiddenFlowFilter());
filter.mustNot(notRecallFilter());
filter.mustNot(newFilter());
filter.mustNot(latestReducePriceFilter());
filter.mustNot(isGlobalFilter());
filter.mustNot(breakSizeFilter());
filter.mustNot(isNewPromotionFilter());
return filter;
}
... ... @@ -131,29 +132,12 @@ public class ExtendFilterHelper {
filter.must(sortBrandIdFilter(sortBrand));
filter.must(isNewPromotionFilter());
//must not
filter.mustNot(forbiddenFlowFilter());
filter.mustNot(notRecallFilter());
filter.mustNot(newFilter());
filter.mustNot(latestReducePriceFilter());
filter.mustNot(isGlobalFilter());
filter.mustNot(breakSizeFilter());
return filter;
}
private static QueryBuilder forbiddenFlowFilter (){
return QueryBuilders.termQuery(ProductIndexEsField.flowType, "2");
}
private static QueryBuilder isGlobalFilter (){
return QueryBuilders.termQuery(ProductIndexEsField.isGlobal, "Y");
}
private static QueryBuilder newFilter (){
return QueryBuilders.termsQuery(ProductIndexEsField.isnew,"Y");
}
private static QueryBuilder breakSizeFilter (){
return QueryBuilders.rangeQuery(ProductIndexEsField.breakSizePercent).gt(50);
}
private static QueryBuilder sortBrandIdFilter (SortBrand sortBrand){
BoolQueryBuilder filter = QueryBuilders.boolQuery();
... ... @@ -162,12 +146,17 @@ public class ExtendFilterHelper {
return filter;
}
private static final List<String> PromotionsTypes = Arrays.asList("Cashreduce", "Cheapestfree", "Degressdiscount", "Discount", "SpecifiedAmount");
private static QueryBuilder newFilter (){
return QueryBuilders.termsQuery(ProductIndexEsField.isnew,"Y");
}
private static QueryBuilder latestReducePriceFilter (){
return QueryBuilders.termQuery(ProductIndexEsField.isLatestReducePrice, "Y");
}
private static final List<String> PromotionsTypes = Arrays.asList("Cashreduce", "Cheapestfree", "Degressdiscount", "Discount", "SpecifiedAmount");
private static QueryBuilder isNewPromotionFilter (){
BoolQueryBuilder nestedFilter = QueryBuilders.boolQuery();
long hourFirstTime = DateUtil.getHourFirstTimeSecond(new Date());
... ... @@ -177,4 +166,16 @@ public class ExtendFilterHelper {
return QueryBuilders.nestedQuery(ProductIndexEsField.matchedPromotions, nestedFilter, ScoreMode.None);
}
/**
* 不召回的过滤条件
* @return
*/
public static QueryBuilder notRecallFilter(){
BoolQueryBuilder filter = QueryBuilders.boolQuery();
filter.should(QueryBuilders.termQuery(ProductIndexEsField.flowType, "2"));
filter.should(QueryBuilders.termQuery(ProductIndexEsField.isGlobal, "Y"));
filter.should(QueryBuilders.rangeQuery(ProductIndexEsField.breakSizePercent).gt(50));
return filter;
}
}
... ...
... ... @@ -5,11 +5,15 @@ import com.yoho.search.base.utils.ISearchConstants;
import com.yoho.search.base.utils.ProductIndexEsField;
import com.yoho.search.core.es.model.SearchParam;
import com.yoho.search.core.es.model.SearchResult;
import com.yoho.search.recall.scene.beans.helper.ExtendFilterHelper;
import com.yoho.search.recall.scene.constants.CacheTimeConstants;
import com.yoho.search.recall.scene.models.common.ParamQueryFilter;
import com.yoho.search.recall.scene.models.personal.PagePersonalFactor;
import com.yoho.search.recall.scene.models.personal.PageBrandSorts;
import com.yoho.search.service.base.SearchCommonService;
import org.apache.lucene.queryparser.xml.builders.BooleanQueryBuilder;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
... ... @@ -51,7 +55,12 @@ public class PagePersionalFactorComponent extends AbstractPageComponent {
//1、构造参数
SearchParam searchParam = new SearchParam();
searchParam.setQuery(paramQueryFilter.getParamQuery());
searchParam.setFiter(paramQueryFilter.getParamFilter());
BoolQueryBuilder filter = QueryBuilders.boolQuery();
filter.must(paramQueryFilter.getParamFilter());
filter.mustNot(ExtendFilterHelper.notRecallFilter());//聚合的时候带上不召回的数据
searchParam.setFiter(filter);
searchParam.setSize(0);
//2、构造聚合参数
... ...
... ... @@ -5,10 +5,13 @@ import com.yoho.search.base.utils.ISearchConstants;
import com.yoho.search.base.utils.ProductIndexEsField;
import com.yoho.search.core.es.model.SearchParam;
import com.yoho.search.core.es.model.SearchResult;
import com.yoho.search.recall.scene.beans.helper.ExtendFilterHelper;
import com.yoho.search.recall.scene.constants.CacheTimeConstants;
import com.yoho.search.recall.scene.models.common.ParamQueryFilter;
import com.yoho.search.recall.scene.models.personal.PageProductIdBitSet;
import com.yoho.search.service.base.SearchCommonService;
import org.elasticsearch.index.query.BoolQueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.aggregations.AbstractAggregationBuilder;
import org.elasticsearch.search.aggregations.Aggregation;
import org.elasticsearch.search.aggregations.AggregationBuilders;
... ... @@ -35,8 +38,8 @@ public class PageProductIdBitSetComponent extends AbstractPageComponent {
* @return
*/
public PageProductIdBitSet queryPageProductIdBitSet(ParamQueryFilter paramQueryFilter) {
Object value = super.queryWithCache(paramQueryFilter);
return value==null?null:(PageProductIdBitSet)value;
Object value = super.queryWithCache(paramQueryFilter);
return value == null ? null : (PageProductIdBitSet) value;
}
@Override
... ... @@ -54,7 +57,12 @@ public class PageProductIdBitSetComponent extends AbstractPageComponent {
//1、构造请求参数
SearchParam searchParam = new SearchParam();
searchParam.setQuery(paramQueryFilter.getParamQuery());
searchParam.setFiter(paramQueryFilter.getParamFilter());
BoolQueryBuilder filter = QueryBuilders.boolQuery();
filter.must(paramQueryFilter.getParamFilter());
filter.mustNot(ExtendFilterHelper.notRecallFilter());//聚合的时候带上不召回的数据
searchParam.setFiter(filter);
searchParam.setSize(0);
//2、构造聚合参数
... ... @@ -67,12 +75,12 @@ public class PageProductIdBitSetComponent extends AbstractPageComponent {
//4、构造结果
Map<String, Aggregation> aggregationMap = searchResult.getAggMaps();
PageProductIdBitSet pageProductIdBitSet = this.getPageSknBitSetFromAggregationMap(aggregationMap,"productIdAgg");
PageProductIdBitSet pageProductIdBitSet = this.getPageSknBitSetFromAggregationMap(aggregationMap, "productIdAgg");
return pageProductIdBitSet;
}
private PageProductIdBitSet getPageSknBitSetFromAggregationMap(Map<String, Aggregation> aggregationMap, String firstAggName){
if(!aggregationMap.containsKey(firstAggName)){
private PageProductIdBitSet getPageSknBitSetFromAggregationMap(Map<String, Aggregation> aggregationMap, String firstAggName) {
if (!aggregationMap.containsKey(firstAggName)) {
return null;
}
List<Integer> productIdList = new ArrayList<Integer>();
... ... @@ -84,7 +92,7 @@ public class PageProductIdBitSetComponent extends AbstractPageComponent {
productIdList.add(value);
}
PageProductIdBitSet pageProductIdBitSet = new PageProductIdBitSet();
for (Integer productId: productIdList) {
for (Integer productId : productIdList) {
pageProductIdBitSet.add(productId);
}
return pageProductIdBitSet;
... ...