配置关联elasticsearch
elasticsearch:
rest:
uris: 127.0.0.1:9200
批量新增接口
// 配置rest高级客户端
@Autowired
private RestHighLevelClient restHighLevelClient;
public boolean saveKnowLedge(List<DataKnowledgeDocument> params) throws Exception {
// 创建批量请求
BulkRequest bulkRequest = new BulkRequest();
bulkRequest.timeout("10s");
params.stream().forEach(o->{
bulkRequest.add(
// IndexRequest 为添加 update 为更新 delete删除 不一一演示
new IndexRequest(INDEX_NAME)
.source(JSON.toJSONString(o), XContentType.JSON)
);
});
// 请求
BulkResponse bulkItemResponses = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
return !bulkItemResponses.hasFailures();
}
通过查询返回高亮结果
public BasePageDTO<List<KnowledgeListDTO>> listPage(TDataKnowledgeListParams params) {
BasePageDTO<List<KnowledgeListDTO>> pageDTO = new BasePageDTO<>();
List<KnowledgeListDTO> dtoList = new ArrayList<>();
// 条件搜索
SearchRequest searchRequest = new SearchRequest(INDEX_NAME);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
// 分页
sourceBuilder.from(params.getPageNum()-1);
sourceBuilder.size(params.getPageSize());
// 精确匹配
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
sourceBuilder.query(boolQueryBuilder.filter(QueryBuilders.termQuery("categoryType",params.getCategoryType())));
sourceBuilder.query(boolQueryBuilder.filter(QueryBuilders.matchQuery("content",params.getContent())));
// 高亮查询
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("content");
// 多个高亮显示 目前为关闭
highlightBuilder.requireFieldMatch(false);
highlightBuilder.preTags("<span style = 'color:red'>");
highlightBuilder.postTags("</span>");
sourceBuilder.highlighter(highlightBuilder);
// 时间倒叙
sourceBuilder.sort(new FieldSortBuilder("createTime").order(SortOrder.DESC));
// 执行搜索
searchRequest.source(sourceBuilder);
try {
//解析结果
SearchResponse searchResponse = restHighLevelClient.search(searchRequest,RequestOptions.DEFAULT);
for (SearchHit hit :searchResponse.getHits().getHits()){
KnowledgeListDTO dto = JSON.parseObject(JSON.toJSONString(hit.getSourceAsMap()),
KnowledgeListDTO.class);
dto.setEsId(hit.getId());
// 高亮出参
Map<String, HighlightField> KnowledgeListDTOMap = hit.getHighlightFields();
HighlightField content = KnowledgeListDTOMap.get("content");
if (content != null){
Text[] fragment = content.fragments();
String n_content = "";
for (Text text : fragment){
n_content += text;
}
dto.setContent(n_content);
}
dtoList.add(dto);
}
pageDTO.setTotal(searchResponse.getHits().getTotalHits().value);
} catch (IOException e) {
e.printStackTrace();
}
pageDTO.setRows(dtoList);
return pageDTO;
}