SpringBoot默认支持两种技术来和ES交互;
创建项目需要引入ES的启动器
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId></dependency> <!--集合工具包--><dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>19.0</version></dependency> |
第一种:
1、Jest(默认不生效) 需要导入jest的工具包(io.searchbox.client.JestClient)
操作步骤:
1) 引入jest的依赖
<!-- https://mvnrepository.com/artifact/io.searchbox/jest --><dependency> <groupId>io.searchbox</groupId> <artifactId>jest</artifactId> <version>6.3.1</version></dependency> |
2)在配置文件中jest添加相关配置
#使用jest客户端操作ESspring.elasticsearch.jest.uris=http://10.2.193.102:9200 |
3)使用jest客户端操作ES
import cn.xiwei.springboot.es.bean.Article;import io.searchbox.client.JestClient;import io.searchbox.core.Index;import io.searchbox.core.Search;import io.searchbox.core.SearchResult;import org.junit.Test;import org.junit.runner.RunWith;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.boot.test.context.SpringBootTest;import org.springframework.test.context.junit4.SpringRunner; import java.io.IOException; @RunWith(SpringRunner.class)@SpringBootTestpublic class EsApplicationTests { @Autowired JestClient jestClient; @Test public void contextLoads() { //1、给Es中索引(保存)一个文档; Article article = new Article(); article.setId(1); article.setTitle("好消息"); article.setAuthor("zhangsan"); article.setContent("Hello World"); //构建一个索引功能 Index index = new Index.Builder(article).index("xiwei").type("news").build(); try { //执行 jestClient.execute(index); } catch (IOException e) { e.printStackTrace(); } } //测试搜索 @Test public void search(){ //构建查询表达式 String json = "{\n" + " \"query\" : {\n" + " \"match\" : {\n" + " \"content\" : \"hello\"\n" + " }\n" + " }\n" + "}"; Search search = new Search.Builder(json).addIndex("xiwei").addType("news").build(); try { SearchResult result = jestClient.execute(search); System.out.println(result.getJsonString()); } catch (IOException e) { e.printStackTrace(); } } } |
第二种:
1、SpringData ElasticSearch【ES版本有可能不合适】
* 版本适配说明:https://github.com/spring-projects/spring-data-elasticsearch
* 如果版本不适配:2.4.6
* 1)、升级SpringBoot版本
* 2)、安装对应版本的ES
1)、Client 节点信息clusterNodes;clusterName
#ES集群的名称spring.data.elasticsearch.cluster-name=my-application #Es节点的访问地址及端口spring.data.elasticsearch.cluster-nodes=10.2.193.102:9300 #开启repositoriesspring.data.elasticsearch.repositories.enabled=true #项目端口号server.port=8080 |
2)、ElasticsearchTemplate 操作es (略)
3)、编写一个 ElasticsearchRepository 的子接口来操作ES;
import cn.xiwei.springboot.es.bean.Notice;import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;import org.springframework.stereotype.Component; @Componentpublic interface NoticeRepository extends ElasticsearchRepository<Notice, Long> { } |
4)、测试
import cn.xiwei.springboot.es.bean.Notice;import cn.xiwei.springboot.es.repository.NoticeRepository;import com.google.common.collect.Lists;import org.elasticsearch.index.query.QueryBuilder;import org.elasticsearch.index.query.QueryBuilders;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.data.domain.Pageable;import org.springframework.data.elasticsearch.core.ElasticsearchTemplate;import org.springframework.data.web.PageableDefault;import org.springframework.web.bind.annotation.GetMapping;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RestController; import java.util.ArrayList;import java.util.List; /** * @author lykan * @create 2019-09-11 18:40 */@RestController@RequestMapping("/api/v1/article")public class NoticeController { @Autowired private NoticeRepository nticeRepository; @Autowired ElasticsearchTemplate elasticsearchTemplate; @GetMapping("/save") public Object save(long id, String title){ Notice article = new Notice(); article.setId(id); article.setReadCount(123); article.setTitle(title); return nticeRepository.save(article); } /** * @param title 搜索标题 * @param pag page = 第几页参数, value = 每页显示条数 */ @GetMapping("/search") public Object search(String title ,@PageableDefault() Pageable pag){ //按标题进行搜索 QueryBuilder builder = QueryBuilders.matchQuery("title", title); //如果实体和数据的名称对应就会自动封装,pageable分页参数 Iterable<Notice> listIt = nticeRepository.search(builder, pag); //Iterable转list List<Notice> list= Lists.newArrayList(listIt); return list; } @RequestMapping("/all") public List<Notice> all() throws Exception { Iterable<Notice> data = nticeRepository.findAll(); List<Notice> ds = new ArrayList<>(); for (Notice d : data) { ds.add(d); } return ds; } @RequestMapping("/id") public Object findid(long id) throws Exception { return nticeRepository.findById(id).get(); } } |
5)、实体类
import com.fasterxml.jackson.annotation.JsonProperty;import org.springframework.data.elasticsearch.annotations.Document; /** * @author lykan * @create 2019-09-11 18:00 *///indexName代表所以名称,type代表表名称@Document(indexName = "wantu_notice_info", type = "doc")public class Notice { //id @JsonProperty("auto_id") private Long id; //标题 @JsonProperty("title") private String title; //公告标签 @JsonProperty("exchange_mc") private String exchangeMc; //公告发布时间 @JsonProperty("create_time") private String originCreateTime; //公告阅读数量 @JsonProperty("read_count") private Integer readCount; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public String getTitle() { return title; } public void setTitle(String title) { this.title = title; } public String getExchangeMc() { return exchangeMc; } public void setExchangeMc(String exchangeMc) { this.exchangeMc = exchangeMc; } public String getOriginCreateTime() { return originCreateTime; } public void setOriginCreateTime(String originCreateTime) { this.originCreateTime = originCreateTime; } public Integer getReadCount() { return readCount; } public void setReadCount(Integer readCount) { this.readCount = readCount; } public Notice(Long id, String title, String exchangeMc, String originCreateTime, Integer readCount) { super(); this.id = id; this.title = title; this.exchangeMc = exchangeMc; this.originCreateTime = originCreateTime; this.readCount = readCount; } public Notice() { super(); }} |
两种用法:https://github.com/spring-projects/spring-data-elasticsearch
SpringBoot2.X整合elasticsearch'
原文地址:https://www.cnblogs.com/shsgshn/p/11508133.html
时间: 2024-10-18 01:03:07