|
|
@@ -1000,7 +1000,7 @@ public class SearchServiceImpl implements SearchService {
|
|
|
} else{
|
|
|
sortFieldList.add(SortField.FIELD_SCORE);
|
|
|
}
|
|
|
- sortFieldList.addAll(Arrays.asList(sortGoods()));
|
|
|
+ sortFieldList.addAll(Arrays.asList(sortGoods(keyword)));
|
|
|
SortField[] sortFields = new SortField[sortFieldList.size()];
|
|
|
sortFieldList.toArray(sortFields);
|
|
|
Sort sort = new Sort(sortFields);
|
|
|
@@ -1056,12 +1056,15 @@ public class SearchServiceImpl implements SearchService {
|
|
|
/**
|
|
|
* @return 批次排序规则
|
|
|
*/
|
|
|
- private SortField[] sortGoods() {
|
|
|
- // 批次(访问量) > 器件(访问量 > 搜索次数) > 品牌(权重 > 访问量 > 搜索次数) > 类目(访问量 > 搜索次数)
|
|
|
+ private SortField[] sortGoods(String keyword) {
|
|
|
+ // 批次(访问量) > 器件(自定义排序 > 访问量 > 搜索次数) > 品牌(自定义排序 > 权重 > 访问量 > 搜索次数) > 类目(访问量 > 搜索次数)
|
|
|
return new SortField[]{
|
|
|
+ new SortField(SearchConstants.GOODS_CMP_CODE_FIELD, new StringFieldComparatorSource(keyword)),
|
|
|
sortField(SearchConstants.GOODS_GO_VISIT_COUNT_FIELD, Type.LONG, true, Long.MIN_VALUE),
|
|
|
sortField(SearchConstants.GOODS_CMP_VISIT_COUNT_FIELD, Type.LONG, true, Long.MIN_VALUE),
|
|
|
sortField(SearchConstants.GOODS_CMP_SEARCH_COUNT_FIELD, Type.LONG, true, Long.MIN_VALUE),
|
|
|
+ new SortField(SearchConstants.GOODS_BR_NAME_CN_UNTOKENIZED_FIELD, new StringFieldComparatorSource(keyword)),
|
|
|
+ new SortField(SearchConstants.GOODS_BR_NAME_EN_UNTOKENIZED_FIELD, new StringFieldComparatorSource(keyword)),
|
|
|
sortField(SearchConstants.GOODS_BR_WEIGHT_FIELD, Type.DOUBLE, true, Double.MIN_VALUE),
|
|
|
sortField(SearchConstants.GOODS_BR_VISIT_COUNT_FIELD, Type.LONG, true, Long.MIN_VALUE),
|
|
|
sortField(SearchConstants.GOODS_BR_SEARCH_COUNT_FIELD, Type.LONG, true, Long.MIN_VALUE),
|
|
|
@@ -1194,7 +1197,7 @@ public class SearchServiceImpl implements SearchService {
|
|
|
for (String keywordField : keywordFields) {
|
|
|
// 是否分词
|
|
|
if (tokenized == null || !tokenized.booleanValue()) {
|
|
|
- booleanQuery2.add(new TermQuery(new Term(keywordField, keyword)), BooleanClause.Occur.SHOULD);
|
|
|
+ booleanQuery2.add(new TermQuery(new Term(keywordField, keyword.toLowerCase())), BooleanClause.Occur.SHOULD);
|
|
|
} else {
|
|
|
booleanQuery2.add(SearchUtils.getBooleanQuery(keywordField, keyword),
|
|
|
BooleanClause.Occur.SHOULD);
|
|
|
@@ -1214,13 +1217,13 @@ public class SearchServiceImpl implements SearchService {
|
|
|
*/
|
|
|
private Query setGoodsBoost(String keyword) {
|
|
|
BooleanQuery booleanQuery = new BooleanQuery();
|
|
|
- BooleanQuery componentCodeQuery = createQuery(SearchConstants.GOODS_CMP_CODE_FIELD, keyword);
|
|
|
+ BooleanQuery componentCodeQuery = createQuery(SearchConstants.GOODS_CMP_CODE_FIELD, keyword, true);
|
|
|
componentCodeQuery.setBoost(100);
|
|
|
booleanQuery.add(componentCodeQuery, BooleanClause.Occur.SHOULD);
|
|
|
- BooleanQuery brandNameCnQuery = createQuery(SearchConstants.GOODS_BR_NAME_CN_FIELD, keyword);
|
|
|
+ BooleanQuery brandNameCnQuery = createQuery(SearchConstants.GOODS_BR_NAME_CN_UNTOKENIZED_FIELD, keyword, true);
|
|
|
brandNameCnQuery.setBoost(10);
|
|
|
booleanQuery.add(brandNameCnQuery, BooleanClause.Occur.SHOULD);
|
|
|
- BooleanQuery brandNameEnQuery = createQuery(SearchConstants.GOODS_BR_NAME_EN_FIELD, keyword);
|
|
|
+ BooleanQuery brandNameEnQuery = createQuery(SearchConstants.GOODS_BR_NAME_EN_UNTOKENIZED_FIELD, keyword, true);
|
|
|
brandNameEnQuery.setBoost(10);
|
|
|
booleanQuery.add(brandNameEnQuery, BooleanClause.Occur.SHOULD);
|
|
|
BooleanQuery kindNameQuery = createQuery(SearchConstants.GOODS_KI_NAME_CN_FIELD, keyword);
|
|
|
@@ -1232,7 +1235,12 @@ public class SearchServiceImpl implements SearchService {
|
|
|
return booleanQuery;
|
|
|
}
|
|
|
|
|
|
- private BooleanQuery createQuery(String field, String keyword){
|
|
|
+ private BooleanQuery createQuery(String field, String keyword){
|
|
|
+ return createQuery(field, keyword, false);
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ private BooleanQuery createQuery(String field, String keyword, boolean useRegexpQuery){
|
|
|
if (StringUtils.isEmpty(field) || StringUtils.isEmpty(keyword)) {
|
|
|
return null;
|
|
|
}
|
|
|
@@ -1241,7 +1249,7 @@ public class SearchServiceImpl implements SearchService {
|
|
|
String[] array = keyword.split(" ");
|
|
|
for(String str : array){
|
|
|
if(!StringUtils.isEmpty(str)){
|
|
|
- booleanQuery.add(SearchUtils.getBooleanQuery(field, str), Occur.SHOULD);
|
|
|
+ booleanQuery.add(SearchUtils.getBooleanQuery(field, str, useRegexpQuery), Occur.SHOULD);
|
|
|
}
|
|
|
}
|
|
|
return booleanQuery;
|