|
|
@@ -317,7 +317,7 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
|
|
|
ids.add(Long.parseLong(componentId));
|
|
|
// System.out.println(indexSearcher.explain(booleanQuery,
|
|
|
// scoreDoc.doc).toString());
|
|
|
-// System.out.println(componentId + "\t" + scoreDoc.score);
|
|
|
+ // System.out.println(componentId + "\t" + scoreDoc.score);
|
|
|
}
|
|
|
map.put("componentIds", ids);
|
|
|
map.put("page", pageParams.getPage());
|
|
|
@@ -870,31 +870,26 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
|
|
|
if (!CollectionUtils.isEmpty(filters)) {
|
|
|
// 筛选类目
|
|
|
if (!StringUtils.isEmpty(filters.get(FilterField.GOODS_KINDID))) {
|
|
|
- String kindId = filters.get(FilterField.GOODS_KINDID).toString();
|
|
|
- TermQuery query = new TermQuery(new Term(SearchConstants.GOODS_KI_ID_FIELD, kindId));
|
|
|
- booleanQuery.add(query, BooleanClause.Occur.FILTER);
|
|
|
+ Object kindIds = filters.get(FilterField.GOODS_KINDID);
|
|
|
+ filter(kindIds, SearchConstants.GOODS_KI_ID_FIELD, booleanQuery);
|
|
|
}
|
|
|
|
|
|
// 筛选品牌
|
|
|
if (!StringUtils.isEmpty(filters.get(FilterField.GOODS_BRANDID))) {
|
|
|
- String brandId = filters.get(FilterField.GOODS_BRANDID).toString();
|
|
|
- TermQuery query = new TermQuery(new Term(SearchConstants.GOODS_BR_ID_FIELD, brandId));
|
|
|
- booleanQuery.add(query, BooleanClause.Occur.FILTER);
|
|
|
+ Object brandIds = filters.get(FilterField.GOODS_BRANDID);
|
|
|
+ filter(brandIds, SearchConstants.GOODS_BR_ID_FIELD, booleanQuery);
|
|
|
}
|
|
|
|
|
|
// 筛选货源
|
|
|
if (!StringUtils.isEmpty(filters.get(FilterField.GOODS_STORE_TYPE))) {
|
|
|
- String storeType = filters.get(FilterField.GOODS_STORE_TYPE).toString();
|
|
|
- booleanQuery.add(
|
|
|
- new TermQuery(new Term(SearchConstants.GOODS_ST_TYPE_FIELD, storeType.toLowerCase())),
|
|
|
- BooleanClause.Occur.FILTER);
|
|
|
+ Object storeTypes = filters.get(FilterField.GOODS_STORE_TYPE);
|
|
|
+ filter(storeTypes, SearchConstants.GOODS_ST_TYPE_FIELD, booleanQuery);
|
|
|
}
|
|
|
|
|
|
// 筛选货币
|
|
|
if (!StringUtils.isEmpty(filters.get(FilterField.GOODS_CRNAME))) {
|
|
|
- String crName = filters.get(FilterField.GOODS_CRNAME).toString();
|
|
|
- booleanQuery.add(new TermQuery(new Term(SearchConstants.GOODS_CRNAME_FIELD, crName.toLowerCase())),
|
|
|
- BooleanClause.Occur.FILTER);
|
|
|
+ Object crNames = filters.get(FilterField.GOODS_CRNAME);
|
|
|
+ filter(crNames, SearchConstants.GOODS_CRNAME_FIELD, booleanQuery);
|
|
|
}
|
|
|
|
|
|
// 价格筛选
|
|
|
@@ -993,7 +988,8 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
|
|
|
cmpIds.add(StringUtils.isEmpty(cmpId) ? null : Long.valueOf(cmpId));
|
|
|
String goId = document.get(SearchConstants.GOODS_GO_ID_FIELD);
|
|
|
goIds.add(StringUtils.isEmpty(goId) ? null : Long.valueOf(goId));
|
|
|
-// System.out.println(cmpId + "\t" + goId + "\t" + scoreDoc.score);
|
|
|
+ // System.out.println(cmpId + "\t" + goId + "\t" +
|
|
|
+ // scoreDoc.score);
|
|
|
}
|
|
|
map.put("componentIds", cmpIds);
|
|
|
map.put("goodsIds", goIds);
|
|
|
@@ -1027,24 +1023,16 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
|
|
|
for (Entry<FilterField, Object> entry : entrySet) {
|
|
|
switch (entry.getKey()) {
|
|
|
case GOODS_KINDID:
|
|
|
- booleanQuery.add(
|
|
|
- new TermQuery(new Term(SearchConstants.GOODS_KI_ID_FIELD, entry.getValue().toString())),
|
|
|
- BooleanClause.Occur.FILTER);
|
|
|
+ filter(entry.getValue(), SearchConstants.GOODS_KI_ID_FIELD, booleanQuery);
|
|
|
break;
|
|
|
case GOODS_BRANDID:
|
|
|
- booleanQuery.add(
|
|
|
- new TermQuery(new Term(SearchConstants.GOODS_BR_ID_FIELD, entry.getValue().toString())),
|
|
|
- BooleanClause.Occur.FILTER);
|
|
|
+ filter(entry.getValue(), SearchConstants.GOODS_BR_ID_FIELD, booleanQuery);
|
|
|
break;
|
|
|
case GOODS_STORE_TYPE:
|
|
|
- booleanQuery.add(new TermQuery(
|
|
|
- new Term(SearchConstants.GOODS_ST_TYPE_FIELD, entry.getValue().toString().toLowerCase())),
|
|
|
- BooleanClause.Occur.FILTER);
|
|
|
+ filter(entry.getValue(), SearchConstants.GOODS_ST_TYPE_FIELD, booleanQuery);
|
|
|
break;
|
|
|
case GOODS_CRNAME:
|
|
|
- booleanQuery.add(new TermQuery(
|
|
|
- new Term(SearchConstants.GOODS_CRNAME_FIELD, entry.getValue().toString().toLowerCase())),
|
|
|
- BooleanClause.Occur.FILTER);
|
|
|
+ filter(entry.getValue(), SearchConstants.GOODS_CRNAME_FIELD, booleanQuery);
|
|
|
break;
|
|
|
default:
|
|
|
throw new SearchException("不支持该过滤字段:" + entry.getKey());
|
|
|
@@ -1091,6 +1079,30 @@ public class SearchServiceImpl implements SearchService, InnerSearchService {
|
|
|
|
|
|
}
|
|
|
|
|
|
+ /**
|
|
|
+ * 过滤
|
|
|
+ *
|
|
|
+ * @param list
|
|
|
+ * 过滤值列表
|
|
|
+ * @param field
|
|
|
+ * 过滤的字段
|
|
|
+ * @param booleanQuery
|
|
|
+ * 查询条件
|
|
|
+ */
|
|
|
+ @SuppressWarnings("unchecked")
|
|
|
+ private void filter(Object list, String field, BooleanQuery booleanQuery) {
|
|
|
+ if (!(list instanceof List)) {
|
|
|
+ throw new SearchException("并非" + List.class + "类型:" + list);
|
|
|
+ }
|
|
|
+ List<Object> values = (List<Object>) list;
|
|
|
+ BooleanQuery booleanQuery2 = new BooleanQuery();
|
|
|
+ for (Object value : values) {
|
|
|
+ TermQuery query = new TermQuery(new Term(field, value.toString().toLowerCase()));
|
|
|
+ booleanQuery2.add(query, BooleanClause.Occur.SHOULD);
|
|
|
+ }
|
|
|
+ booleanQuery.add(booleanQuery2, BooleanClause.Occur.FILTER);
|
|
|
+ }
|
|
|
+
|
|
|
@Override
|
|
|
public KindSimpleInfo getKind(Long id) {
|
|
|
return DocumentToObjectUtils.toKind(
|