<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.16.2</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.16.2</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-elasticsearch</artifactId>
<version>2.3.12.RELEASE</version>
</dependency>
@Configuration
public class EsConfig {
/**
* 配置RestHighLevelClient对象,将该对象交给Spring容器去管理
* 配置es服务器的ip、port
*
* @return RestHighLevelClient对象
*/
@Bean("restHighLevelClient")
public RestHighLevelClient restHighLevelClient() {
return new RestHighLevelClient(
RestClient.builder(
new HttpHost("这里是ip", "这里是端口port", "http")));
}
}
- 业务实现类里引入RestHighLevelClient对象,就可以开始使用啦
@Qualifier("restHighLevelClient")
@Autowired
RestHighLevelClient client;
新增 | IndexRequest |
更新 | UpdateRequest |
删除 | DeleteRequest |
根据ID获取 | GetRequest |
(关键字)检索查询 | SearchRequest |
public static final String FILE_INDEX = "file";
public ResponsePage<FilePageDTO, FilePageVO> listPageByEs(ResponsePage<FilePageDTO, FilePageVO> param) {
FilePageDTO condition = param.getParams();
// 构建一个index为FILE_INDEX的请求
SearchRequest request = new SearchRequest(FILE_INDEX);
// 构建查询source内容构造器
SearchSourceBuilder srb = new SearchSourceBuilder();
// 设置分页查询信息: 从哪页page开始查
srb.from(Long.valueOf(param.getCurrent()).intValue());
// 设置分页查询信息: 查询页大小
srb.size(Long.valueOf(param.getSize()).intValue());
// 构造参数查询构造器
BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();
if (condition.getType() != null) {
// 等值、精准查询 fileType为XX的信息
boolQueryBuilder.must(QueryBuilders.termQuery("fileType", condition.getType()));
}
if (StringUtils.isNotEmpty(condition.getName())) {
// 等值、模糊查询 fileName包含XX的信息
boolQueryBuilder.must(QueryBuilders.matchQuery("fileName", condition.getName()));
}
// 设置查询参数信息
srb.query(boolQueryBuilder);
request.source(srb);
SearchResponse response = null;
ArrayList<FilePageVO> resultList = Lists.newArrayList();
try {
// 调用es查询
response = client.search(request, RequestOptions.DEFAULT);
} catch (IOException e) {
log.error("查es出错");
}
// 获取返回信息
SearchHit[] hits = response.getHits().getHits();
log.info("hits: {}", JSON.toJSONString(hits));
if (Objects.isNull(hits)) {
return param;
}
Arrays.asList(hits).forEach(x -> {
FilePageVO filePageVO = JSON.parseObject(JSON.toJSONString(x.getSourceAsMap()), FilePageVO.class);
resultList.add(filePageVO);
});
param.setTotal(response.getHits().getTotalHits().value);
param.setRecords(resultList);
return param;
}
public Response saveForEs(FileCreateDTO param) {
ResourceFile file = new ResourceFile();
file.setFileName(param.getFileName());
file.setFileType(param.getFileType());
file.setFileUrl(param.getFileUrl());
file.setFileSize(param.getFileSize());
// 存库
this.save(file);
param.setId(file.getId());
// 构建新增请求
IndexRequest request = new IndexRequest();
// 设置_index、手动设置 _id
request.index(FILE_INDEX).id(file.getId().toString());
// 将信息存放到source中
request.source(JSON.toJSONString(param), XContentType.JSON);
IndexResponse response = null;
try {
// 调用api创建
response = client.index(request, RequestOptions.DEFAULT);
} catch (IOException e) {
log.error("保存es出错");
}
RestStatus status = response.status();
return Response.success(JSON.toJSONString(status));
}
public Response editForEs(FileCreateDTO param) {
ResourceFile file = getById(param.getId());
BeanUtils.copyProperties(param, file);
// 更新表
updateById(file);
// 构建更新请求
UpdateRequest request = new UpdateRequest();
// 指定index以及要更新的ID
request.index(FILE_INDEX).id(param.getId().toString());
// 指定更新字段、值
request.doc(XContentType.JSON, "id", file.getId());
UpdateResponse update = null;
try {
// 调用更新api更新
update = client.update(request, RequestOptions.DEFAULT);
} catch (IOException e) {
log.error("更新es出错");
}
RestStatus status = response.status();
return Response.success(JSON.toJSONString(status));
}
public Response removeForEs(Long id) {
// 库里删除
removeById(id);
// 构建删除请求
DeleteRequest request = new DeleteRequest();
// 指定index以及id
request.index(FILE_INDEX).id(id.toString());
DeleteResponse response = null;
try {
// 调用api删除
response = client.delete(request, RequestOptions.DEFAULT);
} catch (IOException e) {
log.error("删除es出错");
}
RestStatus status = response.status();
return Response.OK(JSON.toJSONString(status));
}
public ArrayList<FileVO> listAllByEs() {
ArrayList<FileVO> resultList = Lists.newArrayList();
// 构造指定index的查询请求
SearchRequest request = new SearchRequest(FILE_INDEX);
// 创建查询source构造器
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
// 设置查询类型: 全部
searchSourceBuilder.query(QueryBuilders.matchAllQuery());
request.source(searchSourceBuilder);
SearchResponse response = null;
try {
// 调用api查询
response = client.search(request, RequestOptions.DEFAULT);
} catch (IOException e) {
log.error("查询es出错");
}
// 遍历结果 返回list
SearchHit[] hits = response.getHits().getHits();
Arrays.asList(hits).forEach(x -> {
FileVO fileVO = JSON.parseObject(JSON.toJSONString(x.getSourceAsMap()), FileVO.class);
resultList.add(fileVO);
});
return resultList;
}
public Response getDetailForEs(Long id) {
// 构建查询单个get请求
GetRequest request = new GetRequest();
// 设置查询索引index以及id
request.index(FILE_INDEX).id(id.toString());
GetResponse response = null;
try {
// 调用api查询
response = client.get(request, RequestOptions.DEFAULT);
} catch (IOException e) {
log.info("获取详情 es出错");
}
// 封装返回对象信息
FileVO fileVO = JSON.parseObject(JSON.toJSONString(response.getSourceAsMap()), FileVO.class);
return Response.OK(fileVO);
}