Commit b1006535 by xupeng

修正逻辑

parent c331db5d
......@@ -219,13 +219,26 @@ public class SuggestTask {
ObjectUtils.safeSleep(5000);
}
// 将品牌词、品类词、人工干预词都写入es
Set<String> fillKeywordSet = new HashSet<>();
fillKeywordSet.addAll(brandMap.keySet());
fillKeywordSet.addAll(categoryMap.keySet());
fillKeywordSet.addAll(manualMap.keySet());
for (String fillKeyword : fillKeywordSet) {
if (!esSuggestKeywordMap.containsKey(fillKeyword)) {
esSuggestKeywordMap.put(fillKeyword, buildDefaultEsSuggestKeywordInfo(fillKeyword));
}
}
// 过滤词
List<EsSuggestKeywordInfo> suggestKeywordInfoList = new ArrayList<>();
int processCount = 0;
int totalCount = esSuggestKeywordMap.values().size();
for (EsSuggestKeywordInfo suggestKeywordInfo : esSuggestKeywordMap.values()) {
// 不过滤的suggest词,计算分值写es
// 不过滤的suggest词写es
if (!isFilterSuggestKeyword(suggestKeywordInfo)) {
// 转拼音
......@@ -252,6 +265,46 @@ public class SuggestTask {
}
}
private static EsSuggestKeywordInfo buildDefaultEsSuggestKeywordInfo(String keyword) {
EsSuggestKeywordInfo esSuggestKeywordInfo = new EsSuggestKeywordInfo();
esSuggestKeywordInfo.setKeyword(keyword);
esSuggestKeywordInfo.setKeywordVersion(DateUtils.formatDate(startTime, "yyyy-MM-dd"));
esSuggestKeywordInfo.setUpdateTime(startTime);
esSuggestKeywordInfo.setYearCount(0);
esSuggestKeywordInfo.setYearClickCount(0);
esSuggestKeywordInfo.setYearCartCount(0);
esSuggestKeywordInfo.setWeekCount(0L);
esSuggestKeywordInfo.setWeekClickCount(0L);
esSuggestKeywordInfo.setWeekCartCount(0L);
SearchKeywordInfo searchKeywordInfo = new SearchKeywordInfo();
searchKeywordInfo.setId(0L);
searchKeywordInfo.setKeyword(keyword);
searchKeywordInfo.setPrepareTags(null);
searchKeywordInfo.setYearPv(0);
searchKeywordInfo.setYearProductClickCount(0);
searchKeywordInfo.setYearAddCartCount(0);
searchKeywordInfo.setWeekPv(0L);
searchKeywordInfo.setWeekProductClickCount(0L);
searchKeywordInfo.setWeekAddCartCount(0L);
searchKeywordInfo.setWeekUv(0L);
searchKeywordInfo.setWeekProductClickUv(0L);
searchKeywordInfo.setWeekAddCartUv(0L);
searchKeywordInfo.setMonthPv(0L);
searchKeywordInfo.setMonthProductClickCount(0L);
searchKeywordInfo.setMonthAddCartCount(0L);
searchKeywordInfo.setMonthUv(0L);
searchKeywordInfo.setMonthProductClickUv(0L);
searchKeywordInfo.setMonthAddCartUv(0L);
searchKeywordInfo.setPDay(DateUtils.formatDate(startTime, "yyyy-MM-dd"));
// 计算suggestKeyword权重等属性
processEsSuggestKeywordInfo(esSuggestKeywordInfo, searchKeywordInfo);
return esSuggestKeywordInfo;
}
/**
* 处理搜索词
*/
......@@ -278,13 +331,6 @@ public class SuggestTask {
suggestKeywordInfo.setKeywordVersion(searchKeywordInfo.getPDay());
suggestKeywordInfo.setUpdateTime(startTime);
suggestKeywordInfo.setIsBrand(brandMap.containsKey(keyword));
suggestKeywordInfo.setIsCategory(categoryMap.containsKey(keyword));
suggestKeywordInfo.setIsSensitive(sensitiveMap.containsKey(keyword));
suggestKeywordInfo.setIsEuropeWord(europeWordMap.containsKey(keyword));
suggestKeywordInfo.setIsManual(manualMap.containsKey(keyword));
suggestKeywordInfo.setManualValue(suggestKeywordInfo.getIsManual() ? manualMap.get(keyword) : 0);
esSuggestKeywordMap.put(keyword, suggestKeywordInfo);
} else {
suggestKeywordInfo.setYearCount(suggestKeywordInfo.getYearCount() + searchKeywordInfo.getYearPv());
......@@ -293,6 +339,9 @@ public class SuggestTask {
suggestKeywordInfo.setWeekCount(suggestKeywordInfo.getWeekCount() + searchKeywordInfo.getWeekPv());
suggestKeywordInfo.setWeekClickCount(suggestKeywordInfo.getWeekClickCount() + searchKeywordInfo.getWeekProductClickCount());
suggestKeywordInfo.setWeekCartCount(suggestKeywordInfo.getWeekCartCount() + searchKeywordInfo.getWeekAddCartCount());
if (StringUtils.isBlank(suggestKeywordInfo.getSuggestTags()) && "null".equalsIgnoreCase(suggestKeywordInfo.getSuggestTags())) {
suggestKeywordInfo.setSuggestTags(suggestKeywordInfo.getSuggestTags());
}
}
// 计算suggestKeyword权重等属性
......@@ -409,14 +458,14 @@ public class SuggestTask {
return true;
}
// 判断是否是热搜词 一年内搜索次数大于50或者一周内搜索次数大于5
if (isHotSearchWord(suggestKeywordInfo)) {
// 搜索次数比较多 转化率或者点击率较高的 不过滤
return !isHighCartRatio(suggestKeywordInfo);
} else {
// 搜索次数不多 但是转化率很高的 或者有加购 不过滤
return !isHighClickRatio(suggestKeywordInfo);
if (isHotSearchWord(suggestKeywordInfo) // 判断是否是热搜词 一年内搜索次数大于50或者一周内搜索次数大于5
|| (suggestKeywordInfo.getYearCount() > 5 && isHighCartRatio(suggestKeywordInfo)) // 搜索次数比较多 转化率或者点击率较高的 不过滤
|| isHighClickRatio(suggestKeywordInfo)) { // 搜索次数不多 但是转化率很高的 或者有加购 不过滤
return false;
}
return true;
}
private static void cleanBeforeSaveToEs(EsSuggestKeywordInfo suggestKeywordInfo) {
......@@ -450,6 +499,15 @@ public class SuggestTask {
private static void processEsSuggestKeywordInfo(EsSuggestKeywordInfo suggestKeywordInfo, SearchKeywordInfo searchKeywordInfo) {
String keyword = suggestKeywordInfo.getKeyword();
suggestKeywordInfo.setIsBrand(brandMap.containsKey(keyword));
suggestKeywordInfo.setIsCategory(categoryMap.containsKey(keyword));
suggestKeywordInfo.setIsSensitive(sensitiveMap.containsKey(keyword));
suggestKeywordInfo.setIsEuropeWord(europeWordMap.containsKey(keyword));
suggestKeywordInfo.setIsManual(manualMap.containsKey(keyword));
suggestKeywordInfo.setManualValue(suggestKeywordInfo.getIsManual() ? manualMap.get(keyword) : 0);
// 年点击加购率
suggestKeywordInfo.setYearClickRatio(CalculateUtils.calculateRatio(suggestKeywordInfo.getYearClickCount(), suggestKeywordInfo.getYearCount()));
suggestKeywordInfo.setYearCartRatio(CalculateUtils.calculateRatio(suggestKeywordInfo.getYearCartCount(), suggestKeywordInfo.getYearCount()));
......
......@@ -1935,21 +1935,29 @@ public abstract class StringUtils {
StringBuilder buf = new StringBuilder();
if (StringUtils.isNotBlank(str)) {
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
if (ch == 12288) { // 全角空格
ch = 32; // 半角空格
} else {
ch -= 65248; // 全角半角转换间隔
}
char ch = str.charAt(i);
String chStr = String.valueOf(ch);
if (ChCharToEnMapping.containsKey(chStr)) { // 中文字符转英文字符
buf.append(ChCharToEnMapping.get(chStr));
} else if (ch >= 32 && ch <= 126) {
buf.append(chStr);
} else if (ch == 12288) { // 全角空格
ch = 32;
buf.append(ch); // 半角空格
} else {
buf.append(str.charAt(i));
ch -= 65248; // 全角半角转换间隔
String fixChStr = String.valueOf(ch);
if (ChCharToEnMapping.containsKey(fixChStr)) { // 中文字符转英文字符
buf.append(ChCharToEnMapping.get(fixChStr));
} else if (ch >= 32 && ch <= 126) {
buf.append(fixChStr);
} else {
buf.append(chStr);
}
}
}
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment