- 引入依赖
- spring-boot-starter-data-elasticsearch
- 配置Elasticsearch
- cluster-name,cluster-nodes
- Spring Data Elasticsearch
- ElasticsearchTemplate
- ElasticsearchRepository
定义Repository接口
- DAO层实现实体类对应的Repository接口,继承于ElasiticsearchRepository,泛型为实体和id类型
- 父接口中已经定义好了对es服务器的增删改查方法,不需要自己实现
测试增删改查方法
增
- save方法,保存一条
- saveAll,保存多条
改
- save覆盖即可
删
- deleteById
查
- 首先构造搜索请求对象SearchRequest,传入索引名
- 构造搜索条件SearchSourceBuilder
1 | //构建搜索条件 |
- 调用searchRequest的source方法,将搜索条件传入请求体
- 创建应答对象
1 | SearchResponse searchResponse = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT); |
转换为json格式输出
添加高亮
- 声明高亮对象
1
2
3
4
5
6
7//高亮
HighlightBuilder highlightBuilder = new HighlightBuilder();
highlightBuilder.field("title");
highlightBuilder.field("content");
highlightBuilder.requireFieldMatch(false);
highlightBuilder.preTags("<span style='color:red'>");
highlightBuilder.postTags("</span>");- 遍历时处理高亮
1
2
3
4
5
6
7
8
9
10// 处理高亮显示的结果,获取高亮数据进行进行替换
// 可能有多段匹配,取第一段即可
HighlightField titleField = hit.getHighlightFields().get("title");
if (titleField != null) {
discussPost.setTitle(titleField.getFragments()[0].toString());
}
HighlightField contentField = hit.getHighlightFields().get("content");
if (contentField != null) {
discussPost.setContent(contentField.getFragments()[0].toString());
}