02-springboot整合elasticsearch初识
1.ReactiveElasticsearchOperations
根据springboot官网提供的Elasticsearch操作,除了用rest风格的,还有reactiveElasticSearch的方式。ReactiveElasticsearchOperations是使用来针对Elasticsearch集群执行高级命令的网关ReactiveElasticsearchClient。
具体如下:
1.添加依赖
因为之前增加的依赖,在配置ReactiveElasticsearchOpertions发现了缺少依赖的问题,经过查询,重新调整,增加依赖,如下
<dependency>
<groupId>org.springframework.data</groupId>
<artifactId>spring-data-elasticsearch</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>2.1.3.RELEASE</version>
</dependency>
2.增加reactiveElasticsearchOperations的bean
@Configuration
public class ReactiveElasticsearchConfig extends AbstractReactiveElasticsearchConfiguration {
/**
* 配置要使用的客户端。
* @return
*/
@Override
@Bean
public ReactiveElasticsearchClient reactiveElasticsearchClient() {
// ...
// WebClientProvider http = WebClientProvider.http();
// InetSocketAddress inetSocketAddress = new InetSocketAddress("106.52.137.XX", 9200);
// HostProvider provider = HostProvider.provider(http, inetSocketAddress);
final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
.connectedTo("106.52.137.XX:9200")
.build();
return DefaultReactiveElasticsearchClient.create(clientConfiguration);
}
/**
*设置了ElasticsearchConverter用于利用由映射上下文提供的元数据域类型映射
*/
@Override
@Bean
public ElasticsearchConverter elasticsearchConverter() {
return new MappingElasticsearchConverter(elasticsearchMappingContext());
}
/**
* 域类型元数据的特定于Elasticsearch的映射上下文
*/
@Override
@Bean
public SimpleElasticsearchMappingContext elasticsearchMappingContext() {
return new SimpleElasticsearchMappingContext();
}
/**
* 基于客户端和转换基础结构的实际模板
*/
@Bean
public ReactiveElasticsearchOperations reactiveElasticsearchOperations() {
return new ReactiveElasticsearchTemplate(reactiveElasticsearchClient(), elasticsearchConverter());
}
}
3.测试数据的存储和获取
private ReactiveElasticsearchOperations reactiveElasticsearchOperations;
@Test
public void reactiveEs(){
Person block = reactiveElasticsearchOperations.findById("66666", Person.class).block();
log.info("++++++++++++++++++++++++ {}+++++++++++++++++++",block);
Person p = Person.builder().id("987314").name("张三丰").age(12).build();
reactiveElasticsearchOperations.save(p)
.doOnNext(System.out::print)
.flatMap(person -> {
return reactiveElasticsearchOperations.findById("987314",Person.class);
})
.block();
}
2.Elasticsearch Repositories
2.1 查询
2.1.1 通过方法名派生查询
在此之前,先要学习一下Spring Data Repository
官网有介绍:Spring数据存储库抽象的目标是显着减少实现各种持久性存储的数据访问层所需的样板代码量。(说白了就是提供了一些简单的样板代码)
具体文档地址(有比较详细的说明):https://docs.spring.io/spring-data/elasticsearch/docs/4.0.1.RELEASE/reference/html/#repositories.query-methods
几个基本概念
1.Spring Data存储库抽象中的中央接口是Repository。它需要域类以及域类的ID类型作为类型参数来进行管理
2.PagingAndSortingRepository抽象,它添加了其他方法来简化对实体的分页访问
3.CrudRepository 计数和删除查询的查询派生。
Elasticsearch的Repository
public interface PersonRepository extends ElasticsearchRepository<Person,String> {
List<Person> findByNameAndId(String name, int id);
}
@Test
public void getPersonByRepository(){
Iterable<Person> all = repository.findByNameAndId("张三丰",987314);
all.forEach(person -> {
System.out.println("================================================");
System.out.println(person);
System.out.println("================================================");
});
}
可以根据关键字将方法名转换成JSON串,具体的转换可以查看官网:
【Elasticsearch支持的关键字列表】https://docs.spring.io/spring-data/elasticsearch/docs/4.0.1.RELEASE/reference/html/#elasticsearch.reactive.operations

2.1.2 通过注解形式查询@Query
public interface PersonRepository extends ElasticsearchRepository<Person,String> {
@Query("{\"match\": {\"name\": {\"query\": \"?0\"}}}")
List<Person> findByName(String name);
}
@Test
public void getPersonByRepository(){
List<Person> zsf = repository.findByName("张三丰");
}
出现的问题
问题1.Caused by: org.elasticsearch.client.ResponseException: method [POST], host [http://106.52.137.87:9200], URI [/person_index/person/_search?rest_total_hits_as_int=true&typed_keys=true&ignore_unavailable=false&expand_wildcards=open&allow_no_indices=true&ignore_throttled=true&search_type=dfs_query_then_fetch&batched_reduce_size=512], status line [HTTP/1.1 400 Bad Request]
{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"request [/person_index/person/_search] contains unrecognized parameters: [ignore_throttled], [rest_total_hits_as_int]"}],"type":"illegal_argument_exception","reason":"request [/person_index/person/_search] contains unrecognized parameters: [ignore_throttled], [rest_total_hits_as_int]"},"status":400}
可以看出来是多了两个参数,然后在网上搜了一下,是es版本的问题,目前的es服务器版本太低。升级了一下,万事ok;
02-springboot整合elasticsearch初识的更多相关文章
- springboot整合elasticsearch入门例子
springboot整合elasticsearch入门例子 https://blog.csdn.net/tianyaleixiaowu/article/details/72833940 Elastic ...
- SpringBoot整合ElasticSearch实现多版本的兼容
前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...
- ElasticSearch(2)---SpringBoot整合ElasticSearch
SpringBoot整合ElasticSearch 一.基于spring-boot-starter-data-elasticsearch整合 开发环境:springboot版本:2.0.1,elast ...
- Springboot整合elasticsearch以及接口开发
Springboot整合elasticsearch以及接口开发 搭建elasticsearch集群 搭建过程略(我这里用的是elasticsearch5.5.2版本) 写入测试数据 新建索引book( ...
- SpringBoot整合Elasticsearch详细步骤以及代码示例(附源码)
准备工作 环境准备 JAVA版本 java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121 ...
- Springboot整合Elasticsearch报错availableProcessors is already set to [4], rejecting [4]
Springboot整合Elasticsearch报错 今天使用SpringBoot整合Elasticsearch时候,相关的配置完成后,启动项目就报错了. nested exception is j ...
- Springboot整合ElasticSearch进行简单的测试及用Kibana进行查看
一.前言 搜索引擎还是在电商项目.百度.还有技术博客中广泛应用,使用最多的还是ElasticSearch,Solr在大数据量下检索性能不如ElasticSearch.今天和大家一起搭建一下,小编是看完 ...
- 😊SpringBoot 整合 Elasticsearch (超详细).md
SpringBoot 整合 Elasticsearch (超详细) 注意: 1.环境搭建 安装es Elasticsearch 6.4.3 下载链接 为了方便,环境使用Windows 配置 解压后配置 ...
- SpringBoot整合elasticsearch
在这一篇文章开始之前,你需要先安装一个ElasticSearch,如果你是mac或者linux可以参考https://www.jianshu.com/p/e47b451375ea,如果是windows ...
- springboot整合elasticsearch(基于es7.2和官方high level client)
前言 最近写的一个个人项目(传送门:全终端云书签)中需要用到全文检索功能,目前 mysql,es 都可以做全文检索,mysql 胜在配置方便很快就能搞定上线(参考这里),不考虑上手难度,es 在全文检 ...
随机推荐
- Java实现第九届蓝桥杯打印大X
打印大X 题目描述 如下的程序目的是在控制台打印输出大X. 可以控制两个参数:图形的高度,以及笔宽. 用程序中的测试数据输出效果: (如果显示有问题,可以参看p1.png) 高度=15, 笔宽=3 * ...
- Python学习之求阶乘篇
描述 给定一个数n,范围为0≤n≤100,请你编程精确的求出n的阶乘n!. 输入 输入数据有多行,每行一个整数n,当n<0时输入结束. 输出 输出n的阶乘. 样例输入 1234-1 样例输出 1 ...
- Jmeter之Json提取器详解(史上最全)
参考资料:https://www.bbsmax.com/A/D854lmBw5E/ Jsonpath在线测试:http://jsonpath.com/ 实际工作中用到的一些场景: 提取某个特定的值 提 ...
- 浅谈python中的赋值、浅拷贝与深拷贝:
1.赋值----------是对原对象的引用,指向同一片内存地址 浅拷贝和深拷贝对于容器类型对象才有意义 2.浅拷贝----------对于一个对象的顶层进行拷贝 浅拷贝有三种方式: (1)切片 (2 ...
- 剑指Offer之和为S的连续正数序列
题目描述 小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100.但是他并不满足于此,他在想究竟有多少种连续的正数序列的和为100(至少包括两个数).没多久,他 ...
- 大型Electron应用本地数据库技术选型
开发一个大型Electron的应用,或许需要在客户端存储大量的数据,比如聊天应用或邮件客户端 可选的客户端数据库方案看似很多,但一一对比下来,最优解只有一个 接下来我们就一起来经历一下这个技术选型的过 ...
- 聊一聊高并发高可用那些事 - Kafka篇
目录 为什么需要消息队列 1.异步 :一个下单流程,你需要扣积分,扣优惠卷,发短信等,有些耗时又不需要立即处理的事,可以丢到队列里异步处理. 2.削峰 :按平常的流量,服务器刚好可以正常负载.偶尔推出 ...
- Grafana邮箱告警
1.grafana-server 配置 smtp 服务器 vim /etc/grafana/grafana.ini #修改一下内容 ################################## ...
- Myeclipse 2014 破解补丁以及Y2课件迅雷下载
一. 在破解myeclipse2014之前,要先把环境变量配置好: 1)打开我的电脑--属性--高级--环境变量2)新建系统变量JAVA_HOME 和CLASSPATH 变量名:JAVA_HOME 变 ...
- [apue] sysconf 的四种返回状态
众所周知,sysconf 用来返回某种常量的定义或者资源的上限,前者用于应用动态的判断系统是否支持某种标准或能力.后者用于决定资源分配的尺寸. 但是你可能不知道的是,sysconf 可以返回四种状态: ...