Authored by hugufei

Merge branch 'recall_config' into 0510

@@ -89,39 +89,42 @@ public class QueryUserPersionalFactorBean { @@ -89,39 +89,42 @@ public class QueryUserPersionalFactorBean {
89 89
90 //3、获取页面中存在的所有的key 90 //3、获取页面中存在的所有的key
91 Set<String> pageSortBrandKeys = new HashSet<>(); 91 Set<String> pageSortBrandKeys = new HashSet<>();
92 - Set<String> filterSortBrandKeys = new HashSet<>();  
93 for (SortBrand pageSortBrand : pageFactor.getSortBrandList()) { 92 for (SortBrand pageSortBrand : pageFactor.getSortBrandList()) {
94 pageSortBrandKeys.add(pageSortBrand.key()); 93 pageSortBrandKeys.add(pageSortBrand.key());
95 } 94 }
96 - //4、构造实时【品类+品牌】 95 +
  96 + //4、构造临时过滤对象
  97 + Set<String> filterSortBrandKeys = new HashSet<>();
  98 +
  99 + //5、构造实时【品类+品牌】
97 int recSortBrandCount = recallConfigService.querySortBrandConfigCount(pageId, SortBrandType.REC_SORT_BRAND, 12); 100 int recSortBrandCount = recallConfigService.querySortBrandConfigCount(pageId, SortBrandType.REC_SORT_BRAND, 12);
98 - List<SortBrand> realTimeSortBrandList = this.getSortBrandListWithSort(pageSortBrandKeys, filterSortBrandKeys, userFactor.getRealTimeSortBrandList(), recSortBrandCount); 101 + List<SortBrand> realTimeSortBrandList = this.queryRealTimeSortBrandList(pageSortBrandKeys, filterSortBrandKeys, userFactor.getRealTimeSortBrandList(), recSortBrandCount);
99 //realTimeSortBrandList = Arrays.asList(new SortBrand(63,28)); 102 //realTimeSortBrandList = Arrays.asList(new SortBrand(63,28));
100 for (SortBrand existSortBrand : realTimeSortBrandList) { 103 for (SortBrand existSortBrand : realTimeSortBrandList) {
101 filterSortBrandKeys.add(existSortBrand.key()); 104 filterSortBrandKeys.add(existSortBrand.key());
102 } 105 }
103 - //5、构造基于RNN向量的【品牌+品牌】,去除实时的品类和品牌 106 + //6、构造基于RNN向量的【品牌+品牌】,去除实时的品类和品牌
104 int vectorRNNSortBrandCount = recallConfigService.querySortBrandConfigCount(pageId, SortBrandType.VEC_RNN_SORT_BRAND, 0); 107 int vectorRNNSortBrandCount = recallConfigService.querySortBrandConfigCount(pageId, SortBrandType.VEC_RNN_SORT_BRAND, 0);
105 List<SortBrand> vectorRnnSortBrandList = sortBrandVectorComponent.queryVectorSortBrandList(pageFactor, filterSortBrandKeys, userFactor.getBrandVector(), userFactor.getSortBrandVector(), true, vectorRNNSortBrandCount); 108 List<SortBrand> vectorRnnSortBrandList = sortBrandVectorComponent.queryVectorSortBrandList(pageFactor, filterSortBrandKeys, userFactor.getBrandVector(), userFactor.getSortBrandVector(), true, vectorRNNSortBrandCount);
106 //vectorRnnSortBrandList = Arrays.asList(new SortBrand(59,199)); 109 //vectorRnnSortBrandList = Arrays.asList(new SortBrand(59,199));
107 for (SortBrand existSortBrand : vectorRnnSortBrandList) { 110 for (SortBrand existSortBrand : vectorRnnSortBrandList) {
108 filterSortBrandKeys.add(existSortBrand.key()); 111 filterSortBrandKeys.add(existSortBrand.key());
109 } 112 }
110 - //6、构造基于W2V向量的【品牌+品牌】,去除实时的品类和品牌 113 + //7、构造基于W2V向量的【品牌+品牌】,去除实时的品类和品牌
111 int vecW2vSortBrandCount = recallConfigService.querySortBrandConfigCount(pageId, SortBrandType.VEC_W2V_SORT_BRAND, 12); 114 int vecW2vSortBrandCount = recallConfigService.querySortBrandConfigCount(pageId, SortBrandType.VEC_W2V_SORT_BRAND, 12);
112 List<SortBrand> vectorW2vSortBrandList = sortBrandVectorComponent.queryVectorSortBrandList(pageFactor, filterSortBrandKeys, userFactor.getBrandVectorW2v(), userFactor.getSortBrandVectorW2v(), false, vecW2vSortBrandCount); 115 List<SortBrand> vectorW2vSortBrandList = sortBrandVectorComponent.queryVectorSortBrandList(pageFactor, filterSortBrandKeys, userFactor.getBrandVectorW2v(), userFactor.getSortBrandVectorW2v(), false, vecW2vSortBrandCount);
113 //vectorW2vSortBrandList = Arrays.asList(new SortBrand(266,105)); 116 //vectorW2vSortBrandList = Arrays.asList(new SortBrand(266,105));
114 for (SortBrand existSortBrand : vectorW2vSortBrandList) { 117 for (SortBrand existSortBrand : vectorW2vSortBrandList) {
115 filterSortBrandKeys.add(existSortBrand.key()); 118 filterSortBrandKeys.add(existSortBrand.key());
116 } 119 }
117 - //7、构造基于配置的【品牌+品牌】,去除其他类型的品类和品牌 120 + //8、构造基于配置的【品牌+品牌】,去除其他类型的品类和品牌
118 int configSortBrandCount = recallConfigService.querySortBrandConfigCount(pageId, SortBrandType.CONFIG_SORT_BRAND, 0); 121 int configSortBrandCount = recallConfigService.querySortBrandConfigCount(pageId, SortBrandType.CONFIG_SORT_BRAND, 0);
119 - List<SortBrand> configSortBrandList = recallConfigService.queryConfigSortBrandList(pageFactor, filterSortBrandKeys, configSortBrandCount);  
120 - //8、返回最终结果 122 + List<SortBrand> configSortBrandList = recallConfigService.queryConfigSortBrandList(pageFactor,pageSortBrandKeys, filterSortBrandKeys, configSortBrandCount);
  123 + //9、返回最终结果
121 return new UserPersonalFactor(recommendSknList, realTimeSimilarSknList, sortPriceAreasList, realTimeSortBrandList, vectorRnnSortBrandList, vectorW2vSortBrandList, configSortBrandList); 124 return new UserPersonalFactor(recommendSknList, realTimeSimilarSknList, sortPriceAreasList, realTimeSortBrandList, vectorRnnSortBrandList, vectorW2vSortBrandList, configSortBrandList);
122 } 125 }
123 126
124 - private List<SortBrand> getSortBrandListWithSort(Set<String> pageSortBrandKeys, Set<String> filterSortBrandKeys, List<SortBrand> userSortBrands, int maxCount) { 127 + private List<SortBrand> queryRealTimeSortBrandList(Set<String> pageSortBrandKeys, Set<String> filterSortBrandKeys, List<SortBrand> userSortBrands, int maxCount) {
125 List<SortBrand> results = new ArrayList<>(); 128 List<SortBrand> results = new ArrayList<>();
126 if (pageSortBrandKeys == null || pageSortBrandKeys.isEmpty() || userSortBrands == null || userSortBrands.isEmpty()) { 129 if (pageSortBrandKeys == null || pageSortBrandKeys.isEmpty() || userSortBrands == null || userSortBrands.isEmpty()) {
127 return results; 130 return results;
@@ -142,8 +142,8 @@ public class RecallConfigService { @@ -142,8 +142,8 @@ public class RecallConfigService {
142 * @param configSortBrandCount 142 * @param configSortBrandCount
143 * @return 143 * @return
144 */ 144 */
145 - public List<SortBrand> queryConfigSortBrandList(PagePersonalFactor pageFactor, Set<String> filterSortBrandKeys, int configSortBrandCount) {  
146 - return recallConfigSortBrandService.queryConfigSortBrand(pageFactor, filterSortBrandKeys,configSortBrandCount); 145 + public List<SortBrand> queryConfigSortBrandList(PagePersonalFactor pageFactor,Set<String> pageSortBrandKeys, Set<String> filterSortBrandKeys, int configSortBrandCount) {
  146 + return recallConfigSortBrandService.queryConfigSortBrand(pageFactor,pageSortBrandKeys, filterSortBrandKeys,configSortBrandCount);
147 } 147 }
148 148
149 public static void main(String[] args) { 149 public static void main(String[] args) {
@@ -6,44 +6,67 @@ import com.yoho.search.recall.models.personal.PagePersonalFactor; @@ -6,44 +6,67 @@ import com.yoho.search.recall.models.personal.PagePersonalFactor;
6 import org.springframework.stereotype.Component; 6 import org.springframework.stereotype.Component;
7 7
8 import java.util.*; 8 import java.util.*;
  9 +import java.util.concurrent.Executors;
  10 +import java.util.concurrent.ScheduledExecutorService;
9 11
10 @Component 12 @Component
11 class RecallConfigSortBrandService { 13 class RecallConfigSortBrandService {
12 14
  15 +
  16 + private List<SortBrand> configSortBrands = new ArrayList<>();
  17 +
13 /** 18 /**
14 - * 随机获取页面中,属于配置的品牌品类 19 + * 随机获取size个品类品牌
15 * 20 *
16 - * @param pageFactor 21 + * @param pageSortBrandKeys
17 * @param filterSortBrandKeys 22 * @param filterSortBrandKeys
18 * @param size 23 * @param size
19 * @return 24 * @return
20 */ 25 */
21 - public List<SortBrand> queryConfigSortBrand(PagePersonalFactor pageFactor, Set<String> filterSortBrandKeys, int size) {  
22 - //return new ArrayList<>();  
23 - List<SortBrand> pageSortBrands = new ArrayList<>();  
24 - if(pageFactor.getMisortIds().contains(26)){  
25 - if(pageFactor.getBrandIds().contains(650)){  
26 - pageSortBrands.add(new SortBrand(26,650)); 26 + private List<SortBrand> randomConfigSortBrands(List<SortBrand> configSortBrands, Set<String> pageSortBrandKeys, Set<String> filterSortBrandKeys, int size) {
  27 + List<SortBrand> copyList = new ArrayList<>(configSortBrands);
  28 + Collections.shuffle(copyList);
  29 + List<SortBrand> results = new ArrayList<>();
  30 + for (SortBrand sortBrand : copyList) {
  31 + if (results.size() >= size) {
  32 + break;
27 } 33 }
28 - if(pageFactor.getBrandIds().contains(661)){  
29 - pageSortBrands.add(new SortBrand(26,661)); 34 + if (!pageSortBrandKeys.contains(sortBrand.key())) {
  35 + continue;
30 } 36 }
31 - if(pageFactor.getBrandIds().contains(336)){  
32 - pageSortBrands.add(new SortBrand(26,336)); 37 + if (filterSortBrandKeys.contains(sortBrand.key())) {
  38 + continue;
33 } 39 }
34 - if(pageFactor.getBrandIds().contains(518)){  
35 - pageSortBrands.add(new SortBrand(26,518)); 40 + results.add(sortBrand);
36 } 41 }
37 - if(pageFactor.getBrandIds().contains(417)){  
38 - pageSortBrands.add(new SortBrand(26,417)); 42 + return results;
39 } 43 }
40 - if(pageFactor.getBrandIds().contains(218)){  
41 - pageSortBrands.add(new SortBrand(26,218)); 44 +
  45 + private List<SortBrand> randomConfigSortBrandForTest(PagePersonalFactor pageFactor, Set<String> pageSortBrandKeys, Set<String> filterSortBrandKeys, int size) {
  46 + List<SortBrand> randomReultsForTest = new ArrayList<>();
  47 + randomReultsForTest.add(new SortBrand(26, 650));
  48 + randomReultsForTest.add(new SortBrand(26, 661));
  49 + randomReultsForTest.add(new SortBrand(26, 336));
  50 + randomReultsForTest.add(new SortBrand(26, 417));
  51 + randomReultsForTest.add(new SortBrand(26, 218));
  52 + return this.randomConfigSortBrands(randomReultsForTest, pageSortBrandKeys, filterSortBrandKeys, size);
42 } 53 }
  54 +
  55 + /**
  56 + * 随机获取页面中,属于配置的品牌品类
  57 + *
  58 + * @param pageFactor
  59 + * @param pageSortBrandKeys
  60 + * @param filterSortBrandKeys
  61 + * @param size
  62 + * @return
  63 + */
  64 + public List<SortBrand> queryConfigSortBrand(PagePersonalFactor pageFactor, Set<String> pageSortBrandKeys, Set<String> filterSortBrandKeys, int size) {
  65 + if (size <= 0) {
  66 + return new ArrayList<>();
43 } 67 }
44 -// pageSortBrands.addAll(pageFactor.getSortBrandList());  
45 -// Collections.shuffle(pageSortBrands);  
46 -// return CollectionUtils.safeSubList(pageSortBrands, 0, size);  
47 - return CollectionUtils.safeSubList(pageSortBrands, 0, size); 68 + //return this.randomConfigSortBrands(this.configSortBrands,pageSortBrandKeys, filterSortBrandKeys,size);
  69 + return this.randomConfigSortBrandForTest(pageFactor, pageSortBrandKeys, filterSortBrandKeys, size);
48 } 70 }
  71 +
49 } 72 }