Bläddra i källkod

sort by weight of Brand

sunyj 8 år sedan
förälder
incheckning
2cd5cdbbf4

+ 4 - 2
src/main/java/com/uas/search/service/impl/SearchServiceImpl.java

@@ -102,7 +102,8 @@ public class SearchServiceImpl implements SearchService {
 		booleanQuery.add(SearchUtils.getBooleanQuery(SearchConstants.BRAND_NAMEEN_FIELD, keyword),
 		booleanQuery.add(SearchUtils.getBooleanQuery(SearchConstants.BRAND_NAMEEN_FIELD, keyword),
 				BooleanClause.Occur.SHOULD);
 				BooleanClause.Occur.SHOULD);
 		logger.info(booleanQuery.toString());
 		logger.info(booleanQuery.toString());
-		SPage<Document> documents = SearchUtils.getDocuments(SearchConstants.BRAND_TABLE_NAME, booleanQuery, page,
+		Sort sort = new Sort(new SortField(SearchConstants.BRAND_WEIGHT_FIELD, Type.DOUBLE, true));
+		SPage<Document> documents = SearchUtils.getDocuments(SearchConstants.BRAND_TABLE_NAME, booleanQuery, sort, page,
 				size);
 				size);
 		SPage<Long> sPage = new SPage<Long>(documents.getTotalPage(), documents.getTotalElement(), documents.getPage(),
 		SPage<Long> sPage = new SPage<Long>(documents.getTotalPage(), documents.getTotalElement(), documents.getPage(),
 				documents.getSize(), documents.isFirst(), documents.isLast());
 				documents.getSize(), documents.isFirst(), documents.isLast());
@@ -125,7 +126,8 @@ public class SearchServiceImpl implements SearchService {
 		booleanQuery.add(SearchUtils.getBooleanQuery(SearchConstants.BRAND_NAMEEN_FIELD, keyword),
 		booleanQuery.add(SearchUtils.getBooleanQuery(SearchConstants.BRAND_NAMEEN_FIELD, keyword),
 				BooleanClause.Occur.SHOULD);
 				BooleanClause.Occur.SHOULD);
 		logger.info(booleanQuery.toString());
 		logger.info(booleanQuery.toString());
-		SPage<Document> documents = SearchUtils.getDocuments(SearchConstants.BRAND_TABLE_NAME, booleanQuery, page,
+		Sort sort = new Sort(new SortField(SearchConstants.BRAND_WEIGHT_FIELD, Type.DOUBLE, true));
+		SPage<Document> documents = SearchUtils.getDocuments(SearchConstants.BRAND_TABLE_NAME, booleanQuery, sort, page,
 				size);
 				size);
 		SPage<Map<String, Object>> sPage = new SPage<Map<String, Object>>(documents.getTotalPage(),
 		SPage<Map<String, Object>> sPage = new SPage<Map<String, Object>>(documents.getTotalPage(),
 				documents.getTotalElement(), documents.getPage(), documents.getSize(), documents.isFirst(),
 				documents.getTotalElement(), documents.getPage(), documents.getSize(), documents.isFirst(),

+ 24 - 5
src/main/java/com/uas/search/util/SearchUtils.java

@@ -226,6 +226,24 @@ public class SearchUtils {
 	 * @return
 	 * @return
 	 */
 	 */
 	public static SPage<Document> getDocuments(String tableName, Query query, Integer page, Integer size) {
 	public static SPage<Document> getDocuments(String tableName, Query query, Integer page, Integer size) {
+		return getDocuments(tableName, query, null, page, size);
+	}
+
+	/**
+	 * 根据查询条件获取指定表的Document列表
+	 *
+	 * @param tableName
+	 *            表名
+	 * @param query
+	 *            查询条件
+	 * @param sort 排序规则
+	 * @param page
+	 *            页码
+	 * @param size
+	 *            页大小
+	 * @return
+	 */
+	public static SPage<Document> getDocuments(String tableName, Query query, Sort sort, Integer page, Integer size) {
 		if (query == null) {
 		if (query == null) {
 			throw new SearchException("query不能为null");
 			throw new SearchException("query不能为null");
 		}
 		}
@@ -247,18 +265,19 @@ public class SearchUtils {
 		try {
 		try {
 			// 如果页码不为1
 			// 如果页码不为1
 			if (sPage.getPage() > 1) {
 			if (sPage.getPage() > 1) {
-				TopDocs previousTopDocs = null;
-				previousTopDocs = indexSearcher.search(query, (sPage.getPage() - 1) * sPage.getSize());
+				TopDocs previousTopDocs;
+				previousTopDocs = sort == null ? indexSearcher.search(query, (sPage.getPage() - 1) * sPage.getSize()) :
+						indexSearcher.search(query, (sPage.getPage() - 1) * sPage.getSize(), sort);
 				int totalHits = previousTopDocs.totalHits;
 				int totalHits = previousTopDocs.totalHits;
 				ScoreDoc[] previousScoreDocs = previousTopDocs.scoreDocs;
 				ScoreDoc[] previousScoreDocs = previousTopDocs.scoreDocs;
 				if ((sPage.getPage() - 1) * sPage.getSize() >= totalHits) {
 				if ((sPage.getPage() - 1) * sPage.getSize() >= totalHits) {
 					throw new SearchException("页码过大:元素总数量为" + totalHits);
 					throw new SearchException("页码过大:元素总数量为" + totalHits);
 				}
 				}
-				topDocs = indexSearcher.searchAfter(previousScoreDocs[previousScoreDocs.length - 1], query,
-						sPage.getSize());
+				topDocs = sort == null ? indexSearcher.searchAfter(previousScoreDocs[previousScoreDocs.length - 1], query, sPage.getSize()) :
+						indexSearcher.searchAfter(previousScoreDocs[previousScoreDocs.length - 1], query, sPage.getSize(), sort);
 			} else {
 			} else {
 				sPage.setFirst(true);
 				sPage.setFirst(true);
-				topDocs = indexSearcher.search(query, sPage.getSize());
+				topDocs = sort == null ? indexSearcher.search(query, sPage.getSize()) : indexSearcher.search(query, sPage.getSize(), sort);
 			}
 			}
 
 
 			int totalHits = topDocs.totalHits;
 			int totalHits = topDocs.totalHits;