package com.example.util;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.collections.CollectionUtils;
import org.apache.commons.collections.MapUtils;
import org.apache.commons.lang3.StringUtils;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.update.UpdateRequest;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.*;
import org.elasticsearch.index.reindex.BulkByScrollResponse;
import org.elasticsearch.index.reindex.DeleteByQueryRequest;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;
import org.springframework.stereotype.Component;
import javax.annotation.Resource;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* @Description: ElasticSearch 工具类
* @Author: karma
* @Date: 2019/11/25 10:34 上午
*/
@Component
public class ElasticSearchUtils {
@Resource
private RestHighLevelClient restHighLevelClient ;
// ================================存储========================================
/**
* description: 部分更新(只匹配更新传入的字段,多余字段不更新)
* @author karma
* @param index 索引
* @param id (es id _id)
* @param map 待更新的信息
* @return void
* @date 2019/11/25 7:10 下午
**/
public String updatePart(String index,String id, Map<String,Object> map) throws IOException{
UpdateRequest updateRequest = new UpdateRequest(index,id);
updateRequest.doc(map);
UpdateResponse updateResponse = restHighLevelClient.update(updateRequest,RequestOptions.DEFAULT);
return updateResponse.getResult().getLowercase();
}
/**
* description: 新增或者更新
* @author karma
* @param index 索引
* @param id (es id _id值)
* @param map
* @return void
* @date 2019/11/25 6:33 下午
**/
public String index(String index,String id, Map<String,Object> map) throws IOException{
IndexRequest indexRequest = new IndexRequest(index);
indexRequest.source(map);
indexRequest.id(id);
IndexResponse indexResponse = restHighLevelClient.index(indexRequest,RequestOptions.DEFAULT);
return indexResponse.getResult().getLowercase();
}
/**
* description: 批量插入
* @author karma
* @param index 索引
* @param idKeyStr List<Map<String,Object>> 泛型 map 中指定某个value 作为 id 对应的key值
* @param list
* @return void
* @date 2019/11/25 4:20 下午
**/
public void bulkInsert(String index,String idKeyStr,List<Map<String,Object>> list) throws IOException{
if(StringUtils.isBlank(index) || StringUtils.isBlank(idKeyStr) || CollectionUtils.isEmpty(list)){
return ;
}
BulkRequest bulkRequest = new BulkRequest();
list.forEach(map ->{
IndexRequest indexRequest = new IndexRequest(index);
indexRequest.source(map);
indexRequest.id(map.get(idKeyStr).toString());
bulkRequest.add(indexRequest);
});
restHighLevelClient.bulk(bulkRequest,RequestOptions.DEFAULT);
}
// ======================删除======================================
/**
* description: 根据Id删除数据
* @author karma
* @param index 索引
* @param id (es id _id)
* @return long
* @date 2019/11/27 5:58 下午
**/
public long deleteById(String index, String id) throws IOException{
if(StringUtils.isBlank(index) || StringUtils.isBlank(id)){
return -1;
}
return deleteByQuery(index,"_id",id);
}
/**
* description: 根据查询结果 删除数据
* @author karma
* @param index 索引
* @param fieldName 字段
* @param value 字段值
* @return void
* @date 2019/11/27 5:58 下午
**/
public long deleteByQuery(String index, String fieldName, String value) throws IOException{
if(StringUtils.isBlank(index) || StringUtils.isBlank(fieldName) || StringUtils.isBlank(value)){
return -1;
}
DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest(index);
//设置版本冲突时继续执行
deleteByQueryRequest.setConflicts("proceed");
// 设置查询条件
deleteByQueryRequest.setQuery(new TermQueryBuilder(fieldName,value));
deleteByQueryRequest.setMaxDocs(60);
deleteByQueryRequest.setBatchSize(1000);
// 并行
deleteByQueryRequest.setSlices(2);
// 使用滚动参数来控制“搜索上下文”存活的时间
deleteByQueryRequest.setScroll(TimeValue.timeValueMinutes(10));
// 超时
deleteByQueryRequest.setTimeout(TimeValue.timeValueMinutes(2));
// 刷新索引
deleteByQueryRequest.setRefresh(true);
BulkByScrollResponse response = restHighLevelClient.deleteByQuery(deleteByQueryRequest, RequestOptions.DEFAULT);
return response.getStatus().getUpdated();
}
// ====================查询======================================
/**
* description: 多字段匹配查询
* @author karma
* @param index 索引
* @param fieldMap 字段map集合
* @return java.lang.String
* @date 2019/11/27 3:47 下午
**/
public String getByMultiFieldNames(String index, Map<String,Object> fieldMap) throws IOException{
if(StringUtils.isBlank(index) || MapUtils.isEmpty(fieldMap)){
return null;
}
SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder sourceBuilder = new SearchSourceBuilder();
BoolQueryBuilder boolQueryBuilder = QueryBuilders.boolQuery();
//循环传入搜索参数
fieldMap.forEach((key, value) ->{
boolQueryBuilder.must(QueryBuilders.termQuery(key,value));
});
sourceBuilder.query(boolQueryBuilder);
searchRequest.source(sourceBuilder);
SearchResponse searchResponse = restHighLevelClient.search(searchRequest,RequestOptions.DEFAULT);
return handleSearchResponse2Json(searchResponse);
}
/**
* description: 根据id 查询
* @author karma
* @param index 索引
* @param id (es数据id _id)
* @return java.lang.String
* @date 2019/11/25 1:53 下午
**/
public String getByIndexAndId(String index, String id)throws IOException{
if(StringUtils.isBlank(index) || StringUtils.isBlank(id)){
return null;
}
GetRequest getRequest = new GetRequest(index,id);
GetResponse getResponse = restHighLevelClient.get(getRequest, RequestOptions.DEFAULT);
return getResponse.getSourceAsString();
}
/**
* description: 根据索引查询
* @author karma
* @param index 索引
* @param pageNum 第几页
* @param pageSize 每页条数
* @return java.lang.String
* @date 2019/11/25 1:54 下午
**/
public String getByIndex(String index, int pageNum, int pageSize)throws IOException{
if(StringUtils.isBlank(index)){
return null;
}
// 搜索请求
SearchRequest searchRequest = new SearchRequest(index);
SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
spring boot 2.x 整合es 7.x 代码 + esUtil工具类.zip
1星 需积分: 46 154 浏览量
2019-11-30
13:31:47
上传
评论 2
收藏 9KB ZIP 举报
weixin_43032247
- 粉丝: 0
- 资源: 1
最新资源
- 流程图转PAD-N-S图和伪码(软件工程).doc
- C#winform excel导入导出
- 毕业论文上传111111111111
- raisin.zip
- 322个地级市-市场分割指数、市场一体化指数+居民消费价格指数(2004-2022年).txt
- 《基于Java实现自定义控件-天气温度折线图 》+源代码+设计资料
- 希尔伯特矩阵来综合演示数值矩阵与符号矩阵的基本操作
- 《基于51单片机和DS18B20的温度检测和报警系统,可设置报警温度上下限,输出温度采用数码管显示 》+源代码+设计资料
- ESP8266WIFI系统工作原理图.schdoc
- C语言《基于STM32的测量温度与压力的数据处理设计 》+源代码+设计资料
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈