|
|
@@ -32,6 +32,8 @@ import java.io.IOException;
|
|
|
import java.net.URLDecoder;
|
|
|
import java.util.ArrayList;
|
|
|
import java.util.Arrays;
|
|
|
+import java.util.Collections;
|
|
|
+import java.util.Comparator;
|
|
|
import java.util.HashMap;
|
|
|
import java.util.HashSet;
|
|
|
import java.util.List;
|
|
|
@@ -102,6 +104,11 @@ public class SearchServiceImpl implements SearchService {
|
|
|
*/
|
|
|
private static final int PAGE_SIZE = 20;
|
|
|
|
|
|
+ /**
|
|
|
+ * 默认每页的大小
|
|
|
+ */
|
|
|
+ private static final int BRAND_PAGE_SIZE = 100;
|
|
|
+
|
|
|
private static Logger logger = LoggerFactory.getLogger(SearchServiceImpl.class);
|
|
|
|
|
|
/**
|
|
|
@@ -1662,9 +1669,9 @@ public class SearchServiceImpl implements SearchService {
|
|
|
sPage.setFirst(true);
|
|
|
}
|
|
|
if (size != null && size > 0) {
|
|
|
- sPage.setSize(size);
|
|
|
+ sPage.setSize(indexName.equals(SearchConstants.BRAND) ? BRAND_PAGE_SIZE : size);
|
|
|
} else {
|
|
|
- sPage.setSize(PAGE_SIZE);
|
|
|
+ sPage.setSize(indexName.equals(SearchConstants.BRAND) ? BRAND_PAGE_SIZE : PAGE_SIZE);
|
|
|
}
|
|
|
|
|
|
DuplicateFilter duplicateFilter = null;
|
|
|
@@ -1704,13 +1711,6 @@ public class SearchServiceImpl implements SearchService {
|
|
|
}
|
|
|
|
|
|
int totalHits = topDocs.totalHits;
|
|
|
- // 设置总元素个数、页数等信息
|
|
|
- sPage.setTotalElement(totalHits);
|
|
|
- int totalPage = (int) Math.ceil(totalHits / (1.0 * sPage.getSize()));
|
|
|
- sPage.setTotalPage(totalPage);
|
|
|
- if (totalPage == sPage.getPage()) {
|
|
|
- sPage.setLast(true);
|
|
|
- }
|
|
|
|
|
|
List<Document> documents = new ArrayList<>();
|
|
|
for (ScoreDoc scoreDoc : topDocs.scoreDocs) {
|
|
|
@@ -1719,14 +1719,45 @@ public class SearchServiceImpl implements SearchService {
|
|
|
|
|
|
List<Object> content = new ArrayList<>();
|
|
|
if (indexName.equals(SearchConstants.GOODS_TABLE_NAME)) {
|
|
|
+ Map<String, List<Object>> map = new HashMap<>();
|
|
|
+ List<Object> allStoreUuids = new ArrayList<>();
|
|
|
for (Document document : documents) {
|
|
|
- content.add(document.get(SearchConstants.GOODS_ST_UUID_FIELD));
|
|
|
+ allStoreUuids.add(document.get(SearchConstants.GOODS_ST_UUID_FIELD));
|
|
|
+ }
|
|
|
+ // 按店铺分组
|
|
|
+ for (Object object : allStoreUuids) {
|
|
|
+ if (map.get(String.valueOf(object)) == null) {
|
|
|
+ List<Object> storeUuids = new ArrayList<>();
|
|
|
+ storeUuids.add(String.valueOf(object));
|
|
|
+ map.put(String.valueOf(object), storeUuids);
|
|
|
+ } else {
|
|
|
+ map.get(String.valueOf(object)).add(object);
|
|
|
+ totalHits --;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ List<Map.Entry<String, List<Object>>> stuuids = new ArrayList<>(map.entrySet());
|
|
|
+ Collections.sort(stuuids, new Comparator<Map.Entry<String, List<Object>>> () {
|
|
|
+ @Override
|
|
|
+ public int compare(Map.Entry<String, List<Object>> o1, Map.Entry<String, List<Object>> o2) {
|
|
|
+ return o1.getValue().size() - o2.getValue().size();
|
|
|
+ }
|
|
|
+ });
|
|
|
+ size = size == null ? PAGE_SIZE : size;
|
|
|
+ for (int i = 0; i < (stuuids.size() < size ? stuuids.size() : size) ; i ++) {
|
|
|
+ content.add(stuuids.get(i).getKey());
|
|
|
}
|
|
|
} else if (indexName.equals(SearchConstants.PRODUCTS_PRIVATE_TABLE_NAME)) {
|
|
|
for (Document document : documents) {
|
|
|
content.add(Long.parseLong(document.get(SearchConstants.PRODUCT_PRIVATE_ENUU_FIELD)));
|
|
|
}
|
|
|
}
|
|
|
+ // 设置总元素个数、页数等信息
|
|
|
+ int totalPage = (int) Math.ceil(totalHits / (1.0 * sPage.getSize()));
|
|
|
+ sPage.setTotalPage(totalPage);
|
|
|
+ if (totalPage == sPage.getPage()) {
|
|
|
+ sPage.setLast(true);
|
|
|
+ }
|
|
|
+ sPage.setTotalElement(totalHits);
|
|
|
sPage.setContent(content);
|
|
|
} finally {
|
|
|
releaseIndexSearcher(indexSearcher);
|