码迷,mamicode.com
首页 > 编程语言 > 详细

SpringBoot2.X整合elasticsearch'

时间:2019-09-11 19:58:57      阅读:295      评论:0      收藏:0      [点我收藏+]

标签:row   使用   serve   exec   一个   bin   jsonp   适配   ring   

 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客户端操作ES
spring.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)
@SpringBootTest
public 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

#开启repositories
spring.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;

@Component
public 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'

标签:row   使用   serve   exec   一个   bin   jsonp   适配   ring   

原文地址:https://www.cnblogs.com/shsgshn/p/11508133.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!