SpringBoot检索篇Ⅳ --- 整合ElasticSearch
知识储备:
关于ElasticSearch的基本使用我已经在上一篇文章介绍过了(传送门),本篇文章主要讲述的是SpringBoot与ElasticSearch的整合使用。
SpringBoot与ElasticSearch的整合
一.Jest的使用
1.1 Jest默认不生效,需要导入Jest的工具包:
<dependency>
<groupId>io.searchbox</groupId>
<artifactId>jest</artifactId>
<version>5.3.3</version>
</dependency>
1.2 默认连接的主机地址是localhost,若不是部署在本地的话需要配置主机地址

spring.elasticsearch.jest.uris=http://172.**.**.**:9200
1.3 创建需要操作的实体类
public class People {
@JestId //注意要给id加上注解
private Integer id;
private String name;
private Integer age;
private String gender;
public Integer getId() {
return id;
}
public void setId(Integer id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Integer getAge() {
return age;
}
public void setAge(Integer age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
@Override
public String toString() {
return "People{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
", gender='" + gender + '\'' +
'}';
}
}
1.4 测试:给ES中的索引保存一个文档
@Autowired
JestClient jestClient; //SpringBoot已经给我们自动配置好了,可以直接引用
@Test
public void contextLoads() {
//1,给ES中的索引保存一个文档
People people = new People();
people.setId(1);
people.setAge(22);
people.setGender("男");
people.setName("王鑫"); //构建一个索引功能
Index index = new Index.Builder(people).index("school").type("qinghua").build();
try {
jestClient.execute(index);
} catch (IOException e) {
e.printStackTrace();
}
}
1.5 测试:构建搜索功能
@Test
public void search(){
//查询表达式
String json = "{\n" +
" \"query\" : {\n" +
" \"match\" : {\n" +
" \"name\" : \"王\"\n" +
" }\n" +
" }\n" +
"}";
//构建搜索功能
Search search = new Search.Builder(json).addIndex("school").addType("qinghua").build();
try {
SearchResult result = jestClient.execute(search);
System.out.println(result.getJsonString());
} catch (IOException e) {
e.printStackTrace();
}
}
这里只是给出几个简单的演示,更多的可以详细参考Jest的官方文档。
二.SpringData ElasticSearch的使用
在使用SpringData ElasticSearch前有个问题需要关注一下,就是版本问题,我一开始用的是ES的最新版,SpringBoot2.x的版本,但是一直报错。所以经过几番测试我还是将SpringBoot版本将为1.5.6版本,并用docker重新安装了2.4.6版本的ES。
2.1 配置节点名称,端口
SpringData ElasticSearch采用的是TCP通信,用的是9300端口。
spring.data.elasticsearch.cluster-name=elasticsearch
spring.data.elasticsearch.cluster-nodes=***.**.**.**:9300
spring.data.elasticsearch.repositories.enabled=true
2.2 创建实体类,配置索引信息
package com.wang.elasticsearch.bean; import org.springframework.data.elasticsearch.annotations.Document; @Document(indexName = "xinhua",type = "book") //这边要配置索引信息
public class Book {
private Integer id;
private String bookname;
private String author; @Override
public String toString() {
return "Book{" +
"id=" + id +
", bookname='" + bookname + '\'' +
", author='" + author + '\'' +
'}';
} public Integer getId() {
return id;
} public void setId(Integer id) {
this.id = id;
} public String getBookname() {
return bookname;
} public void setBookname(String bookname) {
this.bookname = bookname;
} public String getAuthor() {
return author;
} public void setAuthor(String author) {
this.author = author;
}
}
2.3 编写一个ElasticsearchRepository
/**
* 泛型的类型为<实体类,索引主键类型>
*/
public interface BookRepository extends ElasticsearchRepository<Book,Integer> { }
2.4 创建一个索引
@Test
public void Booksave(){
Book book = new Book();
book.setId(1);
book.setBookname("Java开发");
book.setAuthor("Wang");
bookRepository.index(book);
}
2.5 自定义ElasticsearchRepository方法
ElasticsearchRepository提供有很多自带的方法,能够满足很多开发需求,当然也可以扩展自己的方法,扩展方法只需要给个方法名就可以了,不过要注意方法名称要符合规范。
/**
* 泛型的类型为<实体类,索引类型>
*/
public interface BookRepository extends ElasticsearchRepository<Book,Integer> {
/**
* 这边的方法名要注意和属性名对应,Book的属性名为bookname,对应的方法名中的属性为Bookname而不是BookName
* @param bookname
* @return
*/
public List<Book> findByBooknameLike(String bookname);
}
@Test
public void Bookfind(){
for (Book book: bookRepository.findByBooknameLike("开")){
System.out.println(book);
} }
SpringBoot检索篇Ⅳ --- 整合ElasticSearch的更多相关文章
- SpringBoot 2.x 整合ElasticSearch的demo
SpringBoot 2.x 整合ElasticSearch的demo 1.配置文件application.yml信息 # Tomcat server: tomcat: uri-encoding: U ...
- java框架之SpringBoot(13)-检索及整合Elasticsearch
ElasticSearch介绍 简介 我们的应用经常需要使用检索功能,开源的 Elasticsearch 是目前全文搜索引擎的首选.它可以快速的存储.搜索和分析海量数据.SpringBoot 通过整合 ...
- SpringBoot入门篇--整合mybatis+generator自动生成代码+druid连接池+PageHelper分页插件
原文链接 我们这一篇博客讲的是如何整合Springboot和Mybatis框架,然后使用generator自动生成mapper,pojo等文件.然后再使用阿里巴巴提供的开源连接池druid,这个连接池 ...
- SpringBoot消息篇Ⅲ --- 整合RabbitMQ
知识储备: 关于消息队列的基本概念我已经在上一篇文章介绍过了(传送门),本篇文章主要讲述的是SpringBoot与RabbitMQ的整合以及简单的使用. 一.安装RabbitMQ 1.在linux上 ...
- SpringBoot分布式篇Ⅷ --- 整合SpringCloud
SpringCloud是一个分布式的整体解决方案.Spring Cloud为开发者提供了在分布式系统(配置管理,服务发现,熔断,路由,微代理,控制总线,一次性token,全局锁,leader选举.分布 ...
- SpringBoot缓存篇Ⅱ --- 整合Redis以及序列化机制
一.Redis环境搭建 系统默认是使用ConcurrentMapCacheManager,然后获取和创建ConcurrentMapCache类型的缓存组件,再将数据保存在ConcurrentMap中 ...
- SpringBoot安全篇Ⅵ --- 整合Spring Security
知识储备: 关于SpringSecurity的详细学习可以查看SpringSecurity的官方文档. Spring Security概览 应用程序的两个主要区域是"认证"和&qu ...
- SpringBoot分布式篇Ⅶ --- 整合Dubbo
在分布式系统中, 国内常用zookeeper+dubbo组合,而Spring Boot推荐使用全栈的Spring,Spring Boot,Spring Cloud. 分布式系统: 一.Zookeepe ...
- SpringBoot整合elasticsearch
在这一篇文章开始之前,你需要先安装一个ElasticSearch,如果你是mac或者linux可以参考https://www.jianshu.com/p/e47b451375ea,如果是windows ...
随机推荐
- python列表的增删查改
添加新的元素 append() insert() extend() +号 删除元素 pop() remove() del xxx[index] 修改 xxx[index] = value 查找 in. ...
- 定位布局中关于z-index的一些问题
定位布局中关于z-index的一些问题 使不同父元素的子元素不会被其他父元素遮盖 背景 两父元素相互遮盖(或部分遮盖) html如下 <div class="main"> ...
- Alibaba Cloud Toolkit 使用心得(IDEA版)
一.安装插件 确保 IntelliJ IDEA 在 2018.1 或更高版本 打开 Settings - Plugins 搜索安装 Alibaba Cloud Toolkit 二.配置环境 Deplo ...
- 机器学习——Bagging与随机森林算法及其变种
Bagging算法: 凡解:给定M个数据集,有放回的随机抽取M个数据,假设如此抽取3组,3组数据一定是有重复的,所以先去重.去重后得到3组数据,每组数据量分别是s1,s2,s3,然后三组分别训练组合 ...
- 洛谷P1020 导弹拦截 题解 LIS扩展题 Dilworth定理
题目链接:https://www.luogu.com.cn/problem/P1020 题目大意: 给你一串数,求: 这串数的最长不上升子序列的长度: 最少划分成多少个子序列是的这些子序列都是不上升子 ...
- iFit—Smart Cardio Equipment 简介与下载
iFit—Smart Cardio Equipment 无法在谷歌商店中下载,经过技术提取app只可以直接通过下载app安装简单方便 实测机型:华为荣耀畅玩2平板, 小米6X,360N5S均测试无BU ...
- GitHub上的计算机视觉学习资料推荐
9月份将要读研,导师是做cv的,最近学习时找到了不少的计算机视觉的资料,记录一下,同时也分享给需要的朋友 assmdx/ComputerVisionDoc AceCoooool/interview-c ...
- phpstudy nginx设置CORS跨域不起作用的可能解决方法
今天搞了半天的跨域问题,想通过nginx配置跨域,希望以后本地调试程序都不用为这件事烦心.无非就是设置几个请求头: add_header Access-Control-Allow-Origin *; ...
- 机器学习——Java调用sklearn生成好的Logistic模型进行鸢尾花的预测
机器学习是python语言的长处,而Java在web开发方面更具有优势,如何通过java来调用python中训练好的模型进行在线的预测呢?在java语言中去调用python构建好的模型主要有三种方法: ...
- Scala实践2
一.Scala基本类型和操作 1.1 基本类型 Scala的基本类型与Java基本类型相同,都是byte.short.int.long.char.string.float.double.boolea ...