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 ... 
随机推荐
- shell脚本查找tcp过多ip地址封掉
			#!/bin/bash #hc source /etc/profile iplist=`netstat -ntu | awk '{print $5}'| cut -d':' -f1| sort |un ... 
- vue学习笔记(四)事件处理器
			前言 在上一章vue学习笔记(三)class和style绑定的内容中,我们学习了如何在vue中绑定class和style,介绍了常用的绑定方法,class的数组绑定和对象绑定以及style的数组绑定和 ... 
- [**P2766** 最长不下降子序列问题](https://www.luogu.org/problemnew/show/P2766)
			P2766 最长不下降子序列问题 考虑我们是如何\(dp\)这个\(LIS\)的. 我们是倒着推,设置\(dp(i)\)代表以\(i\)为起点的\(LIS\)是多少.转移太显然了 \[ dp(i)=m ... 
- $Noip2015/Luogu2661$ 信息传递 并查集
			Luogu $Description$ 给定一个有向图,每个点只有一条出边.求图里的最小环. $Sol$ 使得这个题不难的地方就在于每个点只有一条出边叭. 一边连边一边更新答案.首先当然是初始$f[i ... 
- ApacheHudi常见问题汇总
			欢迎关注公众号:ApacheHudi 1. ApacheHudi对个人和组织何时有用 如果你希望将数据快速提取到HDFS或云存储中,Hudi可以提供帮助.另外,如果你的ETL /hive/spark作 ... 
- Python 超级玛丽代码实现:人物行走和碰撞检测
			功能介绍 人物行走 人物的行走速度这边分成水平方向(X轴)和竖直方向(Y轴),水平方向的速度要考虑加速度和摩擦力,竖直方向的速度要考虑重力加速度. 水平方向:设定X轴向右走的速度为大于0,向左走的速度 ... 
- spring-boot序章:打造博客系统
			blog 使用spring-boot打造一个博客系统,在项目中学习! 项目功能 文章 游览 创建 编辑 删除 评论 用户 游客 注册用户 关注 被关注 后台统计 注册用户数 在线人数 文章总数 评论总 ... 
- 结合docker发布后端项目(基于gradle包管理)的shell脚本
			结合docker发布后端项目(基于gradle包管理)的shell脚本 本教程依据个人理解并经过实际验证为正确,特此记录下来,权当笔记. 注:基于linux操作系统(敏感信息都进行了处理) 目前主流的 ... 
- 《C# 爬虫 破境之道》:概述
			第一节:写作本书的目的 关于笔者 张晓亭(Mike Cheers),1982年出生,内蒙古辽阔的大草原是我的故乡. 没有高学历,没有侃侃而谈的高谈阔论,拥有的就是那一份对技术的执著,对自我价值的追求. ... 
- 一文熟练使用python mock
			mock作为python测试模拟对象工具,在单元测试当中使用较多,官方文档详细不够精简,这篇文章介绍mock常用的用法,以下为引用全文,留给自己和有需要的人查阅. https://realpython ... 
