|
|
@@ -304,7 +304,7 @@ public class SearchServiceImpl implements SearchService {
|
|
|
}
|
|
|
logger.info(booleanQuery.toString());
|
|
|
|
|
|
- Sort sort = new Sort(sortComponent());
|
|
|
+ Sort sort = new Sort(sortComponent(keyword));
|
|
|
TopDocs hits;
|
|
|
if (pageParams.getPage() > 1) {// 不是第一页
|
|
|
TopDocs previousHits = indexSearcher.search(booleanQuery,
|
|
|
@@ -350,34 +350,30 @@ public class SearchServiceImpl implements SearchService {
|
|
|
new Term(SearchConstants.COMPONENT_CODE_FIELD, keyword.toLowerCase()));
|
|
|
prefixQuery.setBoost(100);
|
|
|
booleanQuery.add(prefixQuery, BooleanClause.Occur.SHOULD);
|
|
|
- BooleanQuery brandNameCnQuery = SearchUtils.getBooleanQuery(SearchConstants.COMPONENT_BR_NAMECN_FIELD,
|
|
|
- keyword);
|
|
|
- brandNameCnQuery.setBoost(10);
|
|
|
- booleanQuery.add(brandNameCnQuery, BooleanClause.Occur.SHOULD);
|
|
|
- BooleanQuery brandNameEnQuery = SearchUtils.getBooleanQuery(SearchConstants.COMPONENT_BR_NAMEEN_FIELD,
|
|
|
- keyword);
|
|
|
- brandNameEnQuery.setBoost(10);
|
|
|
- booleanQuery.add(brandNameEnQuery, BooleanClause.Occur.SHOULD);
|
|
|
- BooleanQuery kindNameQuery = SearchUtils.getBooleanQuery(SearchConstants.COMPONENT_KI_NAME_FIELD, keyword);
|
|
|
- kindNameQuery.setBoost(1);
|
|
|
- booleanQuery.add(kindNameQuery, BooleanClause.Occur.SHOULD);
|
|
|
+ booleanQuery.add(createQuery(SearchConstants.COMPONENT_BR_NAMECN_FIELD, keyword, 10), BooleanClause.Occur.SHOULD);
|
|
|
+ booleanQuery.add(createQuery(SearchConstants.COMPONENT_BR_NAMEEN_FIELD, keyword, 10), BooleanClause.Occur.SHOULD);
|
|
|
+ booleanQuery.add(createQuery(SearchConstants.COMPONENT_KI_NAME_FIELD, keyword, 1), BooleanClause.Occur.SHOULD);
|
|
|
return booleanQuery;
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
* @return 器件排序规则
|
|
|
*/
|
|
|
- private SortField[] sortComponent() {
|
|
|
+ private SortField[] sortComponent(String keyword) {
|
|
|
// 分数 > 器件(访问量 > 搜索次数) > 品牌(权重 > 访问量 > 搜索次数) > 类目(访问量 > 搜索次数)
|
|
|
return new SortField[]{
|
|
|
- SortField.FIELD_SCORE,
|
|
|
+ new SortField(SearchConstants.COMPONENT_CODE_FIELD, new StringFieldComparatorSource(keyword)),
|
|
|
sortField(SearchConstants.COMPONENT_VISIT_COUNT_FIELD, Type.LONG, true, Long.MIN_VALUE),
|
|
|
sortField(SearchConstants.COMPONENT_SEARCH_COUNT_FIELD, Type.LONG, true, Long.MIN_VALUE),
|
|
|
+ new SortField(SearchConstants.COMPONENT_BR_NAMEEN_UNTOKENIZED_FIELD, new StringFieldComparatorSource(keyword)),
|
|
|
+ new SortField(SearchConstants.COMPONENT_BR_NAMECN_UNTOKENIZED_FIELD, new StringFieldComparatorSource(keyword)),
|
|
|
sortField(SearchConstants.COMPONENT_BR_WEIGHT_FIELD, Type.DOUBLE, true, Double.MIN_VALUE),
|
|
|
sortField(SearchConstants.COMPONENT_BR_VISIT_COUNT_FIELD, Type.LONG, true, Long.MIN_VALUE),
|
|
|
sortField(SearchConstants.COMPONENT_BR_SEARCH_COUNT_FIELD, Type.LONG, true, Long.MIN_VALUE),
|
|
|
+ new SortField(SearchConstants.COMPONENT_KI_NAME_UNTOKENIZED_FIELD, new StringFieldComparatorSource(keyword)),
|
|
|
sortField(SearchConstants.COMPONENT_KI_VISIT_COUNT_FIELD, Type.LONG, true, Long.MIN_VALUE),
|
|
|
- sortField(SearchConstants.COMPONENT_KI_SEARCH_COUNT_FIELD, Type.LONG, true, Long.MIN_VALUE)
|
|
|
+ sortField(SearchConstants.COMPONENT_KI_SEARCH_COUNT_FIELD, Type.LONG, true, Long.MIN_VALUE),
|
|
|
+ SortField.FIELD_SCORE
|
|
|
};
|
|
|
}
|
|
|
|