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 ...
随机推荐
- nginx部署VUE跨域访问api
H5端配置跨域 nginx跨域配置 server { listen 80; charset utf-8; server_name you_dome_name;#location /tasklist.j ...
- Spring超详细总结
Spring概述 一.简化Java开发 Spring为了降低Java开发的复杂性,采用了以下四种策略 基于POJO的轻量级和最小侵入性编程: 通过依赖注入和面向接口实现松耦合: 基于切面和惯例进行声明 ...
- $Noip2013/Luogu1966$ 火柴排队 贪心+离散化+逆序对
$Luogu$ $Description$ 给定等长的$a,b$两个序列.每次可以交换一个序列中相邻两个数.求最小的交换次数使得$\sum(a_i-b_i)^2$最小. $Sol$ 交换后的序列一定满 ...
- 关于面试题:[1, 2, 3].map(parseInt)问题的剖析
一.前言 最近有小伙伴在公号中咨询了胡哥这道面试题,窃以为是比较有意思的一道面试题,于此分享给各位小伙伴.先把答案给了各位,和你理解的一样吗?! [1, 2, 3].map(parseInt) // ...
- 「2018-12-02模拟赛」T2 种树 解题报告
2.种树(tree.pas/cpp/in/out) 问题描述: Fanvree 很聪明,解决难题时他总会把问题简单化. 例如,他就整天喜欢把图转化为树.但是他不会缩环,那他怎么转化呢? 这是一个有 n ...
- V3微信支付开发笔录
真是坑爹啊,微信支付到处都是坑,一不小心就栽里面了, 文档也不怎么全,经过一周的奋斗终于把微信支付功能搞定,在此写下自己当时走入的误区和一些需要注意的地方,希望后边开发的朋友们可以少走弯路,少被微信坑 ...
- Spark学习笔记(一)——基础概述
本篇笔记主要说一下Spark到底是个什么东西,了解一下它的基本组成部分,了解一下基本的概念,为之后的学习做铺垫.过于细节的东西并不深究.在实际的操作过程中,才能够更加深刻的理解其内涵. 1.什么是Sp ...
- Springboot Jackson配置根本方案, 日期格式化, 时区设置生效
当项目集成配置的功能越来越多, 说不准哪个配置就影响到了什么. 比如你启用了EnableMvC, 默认配置文件配置的一些文件就失效了. 虽然约定大于配置,让springboot可以极简化构建, 但不熟 ...
- CF1200E Compress Words | 字符串hash
传送门 Examples input 1 5 I want to order pizza output 1 Iwantorderpizza input 2 5 sample please ease i ...
- 20.java-JDBC连接mysql数据库详解
1.JDBC介绍 jdbc(java database connectivity)为java开发者使用数据库提供了统一的编程接口,它由一组java类和接口组成. JDBC需要用到的类和接口有: Dri ...