Authored by hugufei

添加品牌品类的转化率召回

... ... @@ -17,28 +17,33 @@ public class SortBrandRecallRequestBuilder {
/**
* 构造品牌+品类的召回请求
*
* @param paramQueryFilter
* @param sortBrands
* @return
*/
public List<RecallRequest> buildSortBrandRecallRequests(ParamQueryFilter paramQueryFilter, List<SortBrand> sortBrands,SortBrandType sortBrandType){
public List<RecallRequest> buildSortBrandRecallRequests(ParamQueryFilter paramQueryFilter, List<SortBrand> sortBrands, SortBrandType sortBrandType) {
//1、构造召回请求
List<RecallRequest> requests = new ArrayList<>();
// 1) 人气
for (SortBrand sortBrand : sortBrands) {
requests.add(this.buildSortBrandHeatValueRequest(paramQueryFilter, sortBrand, SknCountConstants.SORT_BRAND_RECALL_STRATEGY_SKN_COUNT,sortBrandType));
requests.add(this.buildSortBrandHeatValueRequest(paramQueryFilter, sortBrand, SknCountConstants.SORT_BRAND_RECALL_STRATEGY_SKN_COUNT, sortBrandType));
}
// 2) 转化率
for (SortBrand sortBrand : sortBrands) {
requests.add(this.buildSortBrandCtrValueRequest(paramQueryFilter, sortBrand, SknCountConstants.SORT_BRAND_RECALL_STRATEGY_SKN_COUNT, sortBrandType));
}
// 2) 新品
// 3) 新品
for (SortBrand sortBrand : sortBrands) {
requests.add(this.buildSortBrandNewShelveRequest(paramQueryFilter, sortBrand, SknCountConstants.SORT_BRAND_RECALL_STRATEGY_SKN_COUNT,sortBrandType));
requests.add(this.buildSortBrandNewShelveRequest(paramQueryFilter, sortBrand, SknCountConstants.SORT_BRAND_RECALL_STRATEGY_SKN_COUNT, sortBrandType));
}
// 3) 新降价
// 4) 新降价
for (SortBrand sortBrand : sortBrands) {
requests.add(this.buildSortBrandReducePriceRequest(paramQueryFilter, sortBrand,SknCountConstants.SORT_BRAND_RECALL_STRATEGY_SKN_COUNT,sortBrandType));
requests.add(this.buildSortBrandReducePriceRequest(paramQueryFilter, sortBrand, SknCountConstants.SORT_BRAND_RECALL_STRATEGY_SKN_COUNT, sortBrandType));
}
// 4) 新开促销
// 5) 新开促销
for (SortBrand sortBrand : sortBrands) {
requests.add(this.buildSortBrandPromotionRequest(paramQueryFilter, sortBrand, SknCountConstants.SORT_BRAND_RECALL_STRATEGY_SKN_COUNT,sortBrandType));
requests.add(this.buildSortBrandPromotionRequest(paramQueryFilter, sortBrand, SknCountConstants.SORT_BRAND_RECALL_STRATEGY_SKN_COUNT, sortBrandType));
}
return requests;
}
... ... @@ -51,8 +56,21 @@ public class SortBrandRecallRequestBuilder {
* @param size
* @return
*/
private RecallRequest buildSortBrandHeatValueRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size,SortBrandType sortBrandType) {
IStrategy strategy = new SortBrandHeatValueStrategy(sortBrand, size,sortBrandType);
private RecallRequest buildSortBrandHeatValueRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size, SortBrandType sortBrandType) {
IStrategy strategy = new SortBrandHeatValueStrategy(sortBrand, size, sortBrandType);
return new RecallRequest(paramQueryFilter, strategy);
}
/**
* 【按品类+品牌召回转化率高的商品】
*
* @param paramQueryFilter
* @param sortBrand
* @param size
* @return
*/
private RecallRequest buildSortBrandCtrValueRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size, SortBrandType sortBrandType) {
IStrategy strategy = new SortBrandCtrValueStrategy(sortBrand, size, sortBrandType);
return new RecallRequest(paramQueryFilter, strategy);
}
... ... @@ -64,7 +82,7 @@ public class SortBrandRecallRequestBuilder {
* @param size
* @return
*/
private RecallRequest buildSortBrandNewShelveRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size,SortBrandType sortBrandType) {
private RecallRequest buildSortBrandNewShelveRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size, SortBrandType sortBrandType) {
IStrategy strategy = new SortBrandNewShelveStrategy(sortBrand, size, sortBrandType);
return new RecallRequest(paramQueryFilter, strategy);
}
... ... @@ -77,8 +95,8 @@ public class SortBrandRecallRequestBuilder {
* @param size
* @return
*/
private RecallRequest buildSortBrandReducePriceRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size,SortBrandType sortBrandType) {
IStrategy strategy = new SortBrandReducePriceStrategy(sortBrand, size,sortBrandType);
private RecallRequest buildSortBrandReducePriceRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size, SortBrandType sortBrandType) {
IStrategy strategy = new SortBrandReducePriceStrategy(sortBrand, size, sortBrandType);
return new RecallRequest(paramQueryFilter, strategy);
}
... ... @@ -90,8 +108,8 @@ public class SortBrandRecallRequestBuilder {
* @param size
* @return
*/
private RecallRequest buildSortBrandPromotionRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size,SortBrandType sortBrandType) {
IStrategy strategy = new SortBrandPromotionStrategy(sortBrand, size,sortBrandType);
private RecallRequest buildSortBrandPromotionRequest(ParamQueryFilter paramQueryFilter, SortBrand sortBrand, int size, SortBrandType sortBrandType) {
IStrategy strategy = new SortBrandPromotionStrategy(sortBrand, size, sortBrandType);
return new RecallRequest(paramQueryFilter, strategy);
}
... ...
... ... @@ -95,6 +95,23 @@ public class ExtendFilterHelper {
}
/**
* 【品类+品牌】人气-【除去新品,新降价和新开促销】
* @return
*/
public static QueryBuilder sortBrandCtrValue (SortBrand sortBrand){
BoolQueryBuilder filter = QueryBuilders.boolQuery();
//must
filter.must(sortBrandIdFilter(sortBrand));
filter.must(QueryBuilders.rangeQuery(ProductIndexEsField.ctrValue).gt(0));
//must not
filter.mustNot(notRecallFilter());
filter.mustNot(newFilter());
filter.mustNot(latestReducePriceFilter());
filter.mustNot(isNewPromotionFilter());
return filter;
}
/**
* 【品类+品牌】新品
* @return
*/
... ...
... ... @@ -21,6 +21,10 @@ public class SortBuilderHelper {
return SortBuilders.fieldSort(ProductIndexEsField.heatValue).order(SortOrder.DESC);
}
public static SortBuilder<?> getCtrValueDescSort(){
return SortBuilders.fieldSort(ProductIndexEsField.ctrValue).order(SortOrder.DESC);
}
public static SortBuilder<?> getFirstShelveTimeDescSort(){
return SortBuilders.fieldSort(ProductIndexEsField.firstShelveTime).order(SortOrder.DESC);
}
... ...
... ... @@ -12,16 +12,19 @@ public enum StrategyEnum {
REC_S_B_REDUCE_PRICE(42),//实时的品牌+品类的最新降价
REC_S_B_PROMOTION(43),//实时的品牌+品类的新开促销
REC_S_B_NEW(44),//实时的品牌+品类的新品
REC_S_B_CTR_VALUE(45),//实时的品牌+品类的转化率
VEC_S_B_HEAT_VALUE(31),//向量预测的品牌+品类的人气值
VEC_S_B_REDUCE_PRICE(32),//向量预测的品牌+品类的最新降价
VEC_S_B_PROMOTION(33),//向量预测的品牌+品类的新开促销
VEC_S_B_NEW(34),//向量预测的品牌+品类的新品
VEC_S_B_CTR_VALUE(35),//实时的品牌+品类的转化率
PRED_S_B_HEAT_VALUE(21),//预测的品牌+品类的人气值
PRED_S_B_REDUCE_PRICE(22),//预测的品牌+品类的最新降价
PRED_S_B_PROMOTION(23),//预测的品牌+品类的新开促销
PRED_S_B_NEW(24),//预测的品牌+品类的新品
PRED_S_B_CTR_VALUE(25),//预测的品牌+品类的转化率
ADD_FLOW(12),//流量补偿
NEW_SHOP(11),//新开店铺
... ... @@ -31,7 +34,7 @@ public enum StrategyEnum {
private Integer priority;
StrategyEnum(Integer priority){
StrategyEnum(Integer priority) {
this.priority = priority;
}
... ...
... ... @@ -37,16 +37,29 @@ public abstract class SortBrandAbstractStrategy implements IStrategy {
}
public StrategyEnum heatValueStrategyEnum(SortBrandType sortBrandType){
switch (sortBrandType){
case REC_SORT_BRAND:
return StrategyEnum.REC_S_B_HEAT_VALUE;
case PRED_SORT_BRAND:
return StrategyEnum.PRED_S_B_HEAT_VALUE;
case VEC_SORT_BRAND:
switch (sortBrandType){
case REC_SORT_BRAND:
return StrategyEnum.REC_S_B_HEAT_VALUE;
case PRED_SORT_BRAND:
return StrategyEnum.PRED_S_B_HEAT_VALUE;
case VEC_SORT_BRAND:
return StrategyEnum.VEC_S_B_HEAT_VALUE;
default:
return null;
}
default:
return null;
}
}
public StrategyEnum ctrValueStrategyEnum(SortBrandType sortBrandType){
switch (sortBrandType){
case REC_SORT_BRAND:
return StrategyEnum.REC_S_B_CTR_VALUE;
case PRED_SORT_BRAND:
return StrategyEnum.PRED_S_B_CTR_VALUE;
case VEC_SORT_BRAND:
return StrategyEnum.VEC_S_B_CTR_VALUE;
default:
return null;
}
}
public StrategyEnum newStrategyEnum(SortBrandType sortBrandType){
... ...
package com.yoho.search.recall.scene.beans.strategy.impls;
import com.yoho.search.core.personalized.models.SortBrand;
import com.yoho.search.recall.scene.beans.helper.ExtendFilterHelper;
import com.yoho.search.recall.scene.beans.helper.SortBuilderHelper;
import com.yoho.search.recall.scene.beans.strategy.SortBrandType;
import com.yoho.search.recall.scene.beans.strategy.StrategyEnum;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.search.sort.SortBuilder;
/**
* 品类+品牌的转化率的召回策略
*
* @author gufei.hu
*
*/
public class SortBrandCtrValueStrategy extends SortBrandAbstractStrategy {
public SortBrandCtrValueStrategy(SortBrand sortBrand, int size, SortBrandType sortBrandType) {
super(sortBrand,size,sortBrandType);
}
@Override
public StrategyEnum strategtEnum() {
return ctrValueStrategyEnum(this.sortBrandType);
}
@Override
public QueryBuilder extendFilter() {
return ExtendFilterHelper.sortBrandCtrValue(sortBrand);
}
@Override
public SortBuilder<?> sortBuilder() {
return SortBuilderHelper.getCtrValueDescSort();
}
}
... ...