es springboot 不设置id_springBoot2.x集成es7.x实现常见操作(增、删、该、查、分组)...

集成es

引入依赖

org.springframework.boot

spring-boot-starter-data-elasticsearch

配置

在properties中增加下面配置

elasticsearch.host=127.0.0.1

elasticsearch.port=9200

@Configuration

@ConfigurationProperties(prefix = "elasticsearch")

public class EsConfig {

private String host;

private Integer port;

@Bean(destroyMethod = "close")

public RestHighLevelClient client() {

return new RestHighLevelClient(RestClient.builder(

new HttpHost(host, port, "http")

));

}

public String getHost() {

return host;

}

public void setHost(String host) {

this.host = host;

}

public Integer getPort() {

return port;

}

public void setPort(Integer port) {

this.port = port;

}

}

这样就可以了

基本操作前提

需要的类

public class ObjectToMapUtils {

/**

* 将对象转换成Map

* @param bean

* @param

* @return

*/

public static Map beanToMap(T bean) {

Map map = new HashMap<>();

if (bean != null) {

BeanMap beanMap = BeanMap.create(bean);

for (Object key : beanMap.keySet()) {

if(beanMap.get(key) != null)

map.put(key + "", beanMap.get(key));

}

}

return map;

}

}

@Data

public class DocBean {

private String id;

private String firstCode;

private String secordCode;

private String content;

private Integer type;

private Date createdAt;

private Long startAt;

public DocBean(String id, String firstCode, String secordCode, String content, Integer type) {

this.id = id;

this.firstCode = firstCode;

this.secordCode = secordCode;

this.content = content;

this.type = type;

this.createdAt = new Date();

this.startAt = System.currentTimeMillis();

}

public DocBean() {

}

}

新增

public interface IElasticService {

void save(DocBean docBean) throws IOException;

}

@Service

public class IElasticServiceImpl implements IElasticService {

@Resource

private RestHighLevelClient client;

private static final String NBA_INDEX = "record_traffic-2020-12-10";

/**

* 新增操作

* @param docBean

* @throws IOException

*/

@Override

public void save(DocBean docBean) throws IOException {

IndexRequest request = new IndexRequest(NBA_INDEX).id(String.valueOf(docBean.getId())).source(ObjectToMapUtils.beanToMap(docBean));

IndexResponse response = client.index(request, RequestOptions.DEFAULT);

System.out.println(JSONObject.toJSON(response));

}

}

修改

/**

* 更新数据

* @param docBean

* @throws IOException

*/

@Override

public void update(DocBean docBean) throws IOException {

UpdateRequest request = new UpdateRequest(NBA_INDEX, docBean.getId()).doc(ObjectToMapUtils.beanToMap(docBean));

client.update(request, RequestOptions.DEFAULT);

}

删除

根据单个id删除

@Override

public void deleteById(String id) throws IOException {

DeleteRequest deleteRequest = new DeleteRequest(NBA_INDEX, id);

client.delete(deleteRequest, RequestOptions.DEFAULT);

}

根据id批量删除

/***

* 删除操作。批量删除通过ids

* @param ids

* @throws IOException

*/

@Override

public void deleteByIds(String[] ids) throws IOException {

DeleteByQueryRequest deleteByQueryRequest = new DeleteByQueryRequest(NBA_INDEX);

BoolQueryBuilder boolQueryBuilder = new BoolQueryBuilder();

boolQueryBuilder.must(QueryBuilders.idsQuery().addIds(ids));

deleteByQueryRequest.setQuery(boolQueryBuilder);

client.deleteByQuery(deleteByQueryRequest, RequestOptions.DEFAULT);

}

查询

根据id进行查询

@Override

public Map getEs(String id) throws IOException {

GetRequest getRequest = new GetRequest(NBA_INDEX,id);

GetResponse response = client.get(getRequest,RequestOptions.DEFAULT);

return response.getSource();

}

... 后面会继续扩展

分组和统计数量

@Override

public Map getTypeGroupBy() throws IOException {

Map map = new LinkedHashMap<>();

SearchRequest searchRequest = new SearchRequest();

searchRequest.indices("record_traffic*");

//指定分组字段,terms指定别名,field指定字段名

TermsAggregationBuilder aggregation = AggregationBuilders.terms("content")

//聚合字段名

.field("content.keyword")

.size(100)

// 降序

.order(BucketOrder.count(false));

SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();

searchSourceBuilder.aggregation(aggregation);

//执行查询

searchRequest.source(searchSourceBuilder);

SearchResponse response = client.search(searchRequest, RequestOptions.DEFAULT);

Terms byAgeAggregation = response.getAggregations().get("content");

List extends Terms.Bucket> buckets = byAgeAggregation.getBuckets();

for (Terms.Bucket buck: buckets) {

map.put(buck.getKeyAsString(), buck.getDocCount());

}

return map;

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值