ElasticSearch 搜索,需要進行分類的搜索,同時搜索關鍵字。
public Map search(Map<String, String> searchMap) {
//1.獲取關鍵字的值
String keywords = searchMap.get("keywords");
if (StringUtils.isEmpty(keywords)) {
keywords = "華爲";//賦值給一個默認的值
}
//2.創建查詢對象 的構建對象
NativeSearchQueryBuilder nativeSearchQueryBuilder = new NativeSearchQueryBuilder();
//3.設置查詢的條件
//設置分組條件 商品分類
nativeSearchQueryBuilder.addAggregation(AggregationBuilders.terms("skuCategorygroup").field("categoryName").size(50));
nativeSearchQueryBuilder.withQuery(QueryBuilders.matchQuery("name", keywords));
//4.構建查詢對象
NativeSearchQuery query = nativeSearchQueryBuilder.build();
//5.執行查詢
AggregatedPage<SkuInfo> skuPage = esTemplate.queryForPage(query, SkuInfo.class);
//獲取分組結果
StringTerms stringTerms = (StringTerms) skuPage.getAggregation("skuCategorygroup");
List<String> categoryList = new ArrayList<>();
if (stringTerms != null) {
for (StringTerms.Bucket bucket : stringTerms.getBuckets()) {
String keyAsString = bucket.getKeyAsString();//分組的值
categoryList.add(keyAsString);
}
}
//6.返回結果
Map resultMap = new HashMap<>();
resultMap.put("categoryList", categoryList);
resultMap.put("rows", skuPage.getContent());
resultMap.put("total", skuPage.getTotalElements());
resultMap.put("totalPages", skuPage.getTotalPages());
return resultMap;
}