表现层
@PostMapping("/list")
public PageDTO<ItemDoc> getlist(@RequestBody ParemDoc paremDoc){
return searchService.geetlist(paremDoc);
}
业务层
@Override
public PageDTO geetlist(ParemDoc paremDoc) {
try {
// 1.准备Request
SearchRequest request = new SearchRequest("item");
// 2.准备DSL
// 2.1.query
buildBasicQuery(paremDoc, request);
// 2.2.分页
int page = paremDoc.getPage();
int size = paremDoc.getSize();
request.source().from((page - 1) * size).size(size);
//排序
String sortBy = paremDoc.getSortBy();
if ("sold".equals(sortBy)) {
request.source().sort(sortBy, SortOrder.DESC);
} else if ("price".equals(sortBy)) {
request.source().sort(sortBy, SortOrder.ASC);
}
//高亮
request.source().highlighter(new HighlightBuilder().field("name").requireFieldMatch(false));
// 3.发送请求
SearchResponse response = restHighLevelClient.search(request, RequestOptions.DEFAULT);
// 4.解析响应
return handleResponse(response);
} catch (IOException e) {
throw new RuntimeException(e);
}
}
handleResponse 方法块
// 结果解析
private PageDTO handleResponse(SearchResponse response) {
// 4.解析响应
SearchHits searchHits = response.getHits();
// 4.1.获取总条数
long total = searchHits.getTotalHits().value;
// 4.2.文档数组
SearchHit[] hits = searchHits.getHits();
// 4.3.遍历
List<ItemDoc> items = new ArrayList<>();
for (SearchHit hit : hits) {
// 获取文档source
String json = hit.getSourceAsString();
// 反序列化
ItemDoc itemDoc = JSON.parseObject(json, ItemDoc.class);
//获取高亮结果
Map<String, HighlightField> highlightFields = hit.getHighlightFields();
if (highlightFields !=null && highlightFields.size() >0){
HighlightField name = highlightFields.get("name");
String s = name.getFragments()[0].toString();
itemDoc.setName(s);
}
// 放入集合
items.add(itemDoc);
}
// 4.4.封装返回
return new PageDTO(total, items);
}