Authored by hugufei

配置的品类品牌优化

... ... @@ -89,39 +89,42 @@ public class QueryUserPersionalFactorBean {
//3、获取页面中存在的所有的key
Set<String> pageSortBrandKeys = new HashSet<>();
Set<String> filterSortBrandKeys = new HashSet<>();
for (SortBrand pageSortBrand : pageFactor.getSortBrandList()) {
pageSortBrandKeys.add(pageSortBrand.key());
}
//4、构造实时【品类+品牌】
//4、构造临时过滤对象
Set<String> filterSortBrandKeys = new HashSet<>();
//5、构造实时【品类+品牌】
int recSortBrandCount = recallConfigService.querySortBrandConfigCount(pageId, SortBrandType.REC_SORT_BRAND, 12);
List<SortBrand> realTimeSortBrandList = this.getSortBrandListWithSort(pageSortBrandKeys, filterSortBrandKeys, userFactor.getRealTimeSortBrandList(), recSortBrandCount);
List<SortBrand> realTimeSortBrandList = this.queryRealTimeSortBrandList(pageSortBrandKeys, filterSortBrandKeys, userFactor.getRealTimeSortBrandList(), recSortBrandCount);
//realTimeSortBrandList = Arrays.asList(new SortBrand(63,28));
for (SortBrand existSortBrand : realTimeSortBrandList) {
filterSortBrandKeys.add(existSortBrand.key());
}
//5、构造基于RNN向量的【品牌+品牌】,去除实时的品类和品牌
//6、构造基于RNN向量的【品牌+品牌】,去除实时的品类和品牌
int vectorRNNSortBrandCount = recallConfigService.querySortBrandConfigCount(pageId, SortBrandType.VEC_RNN_SORT_BRAND, 0);
List<SortBrand> vectorRnnSortBrandList = sortBrandVectorComponent.queryVectorSortBrandList(pageFactor, filterSortBrandKeys, userFactor.getBrandVector(), userFactor.getSortBrandVector(), true, vectorRNNSortBrandCount);
//vectorRnnSortBrandList = Arrays.asList(new SortBrand(59,199));
for (SortBrand existSortBrand : vectorRnnSortBrandList) {
filterSortBrandKeys.add(existSortBrand.key());
}
//6、构造基于W2V向量的【品牌+品牌】,去除实时的品类和品牌
//7、构造基于W2V向量的【品牌+品牌】,去除实时的品类和品牌
int vecW2vSortBrandCount = recallConfigService.querySortBrandConfigCount(pageId, SortBrandType.VEC_W2V_SORT_BRAND, 12);
List<SortBrand> vectorW2vSortBrandList = sortBrandVectorComponent.queryVectorSortBrandList(pageFactor, filterSortBrandKeys, userFactor.getBrandVectorW2v(), userFactor.getSortBrandVectorW2v(), false, vecW2vSortBrandCount);
//vectorW2vSortBrandList = Arrays.asList(new SortBrand(266,105));
for (SortBrand existSortBrand : vectorW2vSortBrandList) {
filterSortBrandKeys.add(existSortBrand.key());
}
//7、构造基于配置的【品牌+品牌】,去除其他类型的品类和品牌
//8、构造基于配置的【品牌+品牌】,去除其他类型的品类和品牌
int configSortBrandCount = recallConfigService.querySortBrandConfigCount(pageId, SortBrandType.CONFIG_SORT_BRAND, 0);
List<SortBrand> configSortBrandList = recallConfigService.queryConfigSortBrandList(pageFactor, filterSortBrandKeys, configSortBrandCount);
//8、返回最终结果
List<SortBrand> configSortBrandList = recallConfigService.queryConfigSortBrandList(pageFactor,pageSortBrandKeys, filterSortBrandKeys, configSortBrandCount);
//9、返回最终结果
return new UserPersonalFactor(recommendSknList, realTimeSimilarSknList, sortPriceAreasList, realTimeSortBrandList, vectorRnnSortBrandList, vectorW2vSortBrandList, configSortBrandList);
}
private List<SortBrand> getSortBrandListWithSort(Set<String> pageSortBrandKeys, Set<String> filterSortBrandKeys, List<SortBrand> userSortBrands, int maxCount) {
private List<SortBrand> queryRealTimeSortBrandList(Set<String> pageSortBrandKeys, Set<String> filterSortBrandKeys, List<SortBrand> userSortBrands, int maxCount) {
List<SortBrand> results = new ArrayList<>();
if (pageSortBrandKeys == null || pageSortBrandKeys.isEmpty() || userSortBrands == null || userSortBrands.isEmpty()) {
return results;
... ...
... ... @@ -142,8 +142,8 @@ public class RecallConfigService {
* @param configSortBrandCount
* @return
*/
public List<SortBrand> queryConfigSortBrandList(PagePersonalFactor pageFactor, Set<String> filterSortBrandKeys, int configSortBrandCount) {
return recallConfigSortBrandService.queryConfigSortBrand(pageFactor, filterSortBrandKeys,configSortBrandCount);
public List<SortBrand> queryConfigSortBrandList(PagePersonalFactor pageFactor,Set<String> pageSortBrandKeys, Set<String> filterSortBrandKeys, int configSortBrandCount) {
return recallConfigSortBrandService.queryConfigSortBrand(pageFactor,pageSortBrandKeys, filterSortBrandKeys,configSortBrandCount);
}
public static void main(String[] args) {
... ...
... ... @@ -6,44 +6,67 @@ import com.yoho.search.recall.models.personal.PagePersonalFactor;
import org.springframework.stereotype.Component;
import java.util.*;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
@Component
class RecallConfigSortBrandService {
private List<SortBrand> configSortBrands = new ArrayList<>();
/**
* 随机获取页面中,属于配置的品牌品类
* 随机获取size个品类品牌
*
* @param pageFactor
* @param pageSortBrandKeys
* @param filterSortBrandKeys
* @param size
* @return
*/
public List<SortBrand> queryConfigSortBrand(PagePersonalFactor pageFactor, Set<String> filterSortBrandKeys, int size) {
//return new ArrayList<>();
List<SortBrand> pageSortBrands = new ArrayList<>();
if(pageFactor.getMisortIds().contains(26)){
if(pageFactor.getBrandIds().contains(650)){
pageSortBrands.add(new SortBrand(26,650));
}
if(pageFactor.getBrandIds().contains(661)){
pageSortBrands.add(new SortBrand(26,661));
}
if(pageFactor.getBrandIds().contains(336)){
pageSortBrands.add(new SortBrand(26,336));
private List<SortBrand> randomConfigSortBrands(List<SortBrand> configSortBrands, Set<String> pageSortBrandKeys, Set<String> filterSortBrandKeys, int size) {
List<SortBrand> copyList = new ArrayList<>(configSortBrands);
Collections.shuffle(copyList);
List<SortBrand> results = new ArrayList<>();
for (SortBrand sortBrand : copyList) {
if (results.size() >= size) {
break;
}
if(pageFactor.getBrandIds().contains(518)){
pageSortBrands.add(new SortBrand(26,518));
if (!pageSortBrandKeys.contains(sortBrand.key())) {
continue;
}
if(pageFactor.getBrandIds().contains(417)){
pageSortBrands.add(new SortBrand(26,417));
}
if(pageFactor.getBrandIds().contains(218)){
pageSortBrands.add(new SortBrand(26,218));
if (filterSortBrandKeys.contains(sortBrand.key())) {
continue;
}
results.add(sortBrand);
}
// pageSortBrands.addAll(pageFactor.getSortBrandList());
// Collections.shuffle(pageSortBrands);
// return CollectionUtils.safeSubList(pageSortBrands, 0, size);
return CollectionUtils.safeSubList(pageSortBrands, 0, size);
return results;
}
private List<SortBrand> randomConfigSortBrandForTest(PagePersonalFactor pageFactor, Set<String> pageSortBrandKeys, Set<String> filterSortBrandKeys, int size) {
List<SortBrand> randomReultsForTest = new ArrayList<>();
randomReultsForTest.add(new SortBrand(26, 650));
randomReultsForTest.add(new SortBrand(26, 661));
randomReultsForTest.add(new SortBrand(26, 336));
randomReultsForTest.add(new SortBrand(26, 417));
randomReultsForTest.add(new SortBrand(26, 218));
return this.randomConfigSortBrands(randomReultsForTest, pageSortBrandKeys, filterSortBrandKeys, size);
}
/**
* 随机获取页面中,属于配置的品牌品类
*
* @param pageFactor
* @param pageSortBrandKeys
* @param filterSortBrandKeys
* @param size
* @return
*/
public List<SortBrand> queryConfigSortBrand(PagePersonalFactor pageFactor, Set<String> pageSortBrandKeys, Set<String> filterSortBrandKeys, int size) {
if (size <= 0) {
return new ArrayList<>();
}
//return this.randomConfigSortBrands(this.configSortBrands,pageSortBrandKeys, filterSortBrandKeys,size);
return this.randomConfigSortBrandForTest(pageFactor, pageSortBrandKeys, filterSortBrandKeys, size);
}
}
... ...