欢迎您访问365答案网,请分享给你的朋友!
生活常识 学习资料

SpringBoot集成ElasticSearch存取数据实战

时间:2023-04-27

前面几篇分析了elk存取日志相关的操作,今天我们持续分享SpringBoot集成ElasticSearch存取数据实战,在项目开发过程中直接使用。而使用SpringBoot整合Elasticsearch,一般都是使用 SpringData 进行封装的,然后再dao层接口继承ElasticsearchRepository 类,该类实现了很多的方法,比如常用的CRUD方法。

1、pom文件引入相关jar:

org.springframework.boot spring-boot-starter-web 2.1.6.RELEASE org.springframework.boot spring-boot-starter-data-elasticsearch

2、yml配置es:

spring data: elasticsearch: cluster-name: nd-es-1 #集群名。(默认值: elasticsearch) #cluster-nodes: es-1.cs-ys2.nandao.io:9300 cluster-nodes: 127.0.0.1:9300 #集群节点地址列表,用逗号分隔。如果没有指定,就启动一个客户端节点。 repositories: enabled: true #开启 Elasticsearch 仓库。(默认值:true。)

注意: 9300 是 Java 客户端的端口。9200 是支持 Restful HTTP 的接口。

3、客户端取数据配置:

3.1、接收数据的VO实体:

import java.io.Serializable;import java.util.Date;import lombok.Data;import lombok.ToString;import org.springframework.data.annotation.Id;import org.springframework.data.elasticsearch.annotations.document;import org.springframework.data.elasticsearch.annotations.Field;import org.springframework.data.elasticsearch.annotations.FieldType;@Data@document(indexName = "userInfoindex", type = "userInfo")@ToStringpublic class UserInfoEsDto implements Serializable { private static final long serialVersionUID = 9881158963867439519L; @Id private String id; //关联id @Field(type = FieldType.Long) private Long jid; @Field(type = FieldType.Long) private Long userId; @Field(type = FieldType.Text) private String name; @ToString.Exclude @Field(type = FieldType.Text) private String content; @Field(type = FieldType.Long) private Date publishTime;}

3.2、mapper层接口:

import com.nandao.service.dto.UserInfoEsDto;import org.springframework.data.elasticsearch.repository.ElasticsearchRepository; public interface UserInfoRepository extends ElasticsearchRepository {}

3.3、业务层保持和查询核心伪代码:

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.beans.factory.annotation.Value;import org.springframework.data.domain.Page;import org.springframework.data.domain.PageRequest;import org.springframework.data.domain.Pageable;import org.springframework.data.domain.Sort;import org.springframework.data.domain.Sort.Direction;import org.springframework.data.redis.core.StringRedisTemplate;import org.springframework.stereotype.Service;import org.springframework.transaction.annotation.Transactional;import org.springframework.util.CollectionUtils; @Resource private UserInfoRepository userInfoRepository; @Override public R syncUserInfoByIds(SyncArticleReq req) { List list = ....... if (list != null && !list.isEmpty()) { userInfoRepository.saveAll(list); } return R.ok(); } @Override public R listUser(PageParamUtil req,String acceptLanguage) { Sort sort = Sort.by(Direction.DESC, "publishTime"); Pageable pageable = PageRequest.of(ReqUtil.checkPageNum(req.getPageNum()), 12, sort); Page page = userInfoRepository.findAll(pageable); int total = page.getTotalPages(); List list = page.getContent(); //单个保存和删除接口如下 // userInfoRepository.save(userInfoEsDto); //userInfoRepository.deleteById(String.valueOf(req.getId())); ........ }

 到此实战分享结束,推荐参考一篇文章,可以从另外一个角度测试一下:参考

下篇继续分享es原理,敬请期待!

 

Copyright © 2016-2020 www.365daan.com All Rights Reserved. 365答案网 版权所有 备案号:

部分内容来自互联网,版权归原作者所有,如有冒犯请联系我们,我们将在三个工作时内妥善处理。