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实现第六届蓝桥杯切开字符串
切开字符串 Pear有一个字符串,不过他希望把它切成两段. 这是一个长度为N(<=10^5)的字符串. Pear希望选择一个位置,把字符串不重复不遗漏地切成两段,长度分别是t和N-t(这两段都必 ...
- python自学Day06(自学书籍python编程从入门到实践)
第7章 用户输入和while循环 我们设计的程序大多是为了解决用户最终的问题,所以我们大多需要在用户那里获取一些信息. 学习用户输入的获取与处理,学习while循环让程序不断运行直到达到指定的条件不满 ...
- GIT 仓库的搭建
1.安装并配置必要的依赖关系 在CentOS 7(和RedHat / Oracle / Scientific Linux 7)上,以下命令还将在系统防火墙中打开HTTP和SSH访问. yum inst ...
- WebDriverWait
显示等待 WebDriverWait( driver, timeout, poll_frequency, ignored_exceptions) driver: 传入WebDriver实例,即webd ...
- ESP8266局域网智能家居 路由器下作服务器模式串口透传 无线通信控制 arduino uno示例 模板参考
准备工作 下载一个Arduino IDE, 下载8266的库文件 ESP8266服务器模式串口透传编译 功能说明 1.直接使用路由器中转数据 2.手机放热点模式直接传输数据 两者有访问IP地址的差别, ...
- Android学习笔记长按事件的处理
常见的长按事件 代码示例: @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedIns ...
- HashSet扩容机制在时间和空间上的浪费,远大于你的想象
一:背景 1. 讲故事 自从这个纯内存项目进了大客户之后,搞得我现在对内存和CPU特别敏感,跑一点数据内存几个G的上下,特别没有安全感,总想用windbg抓几个dump看看到底是哪一块导致的,是我的代 ...
- cb24a_c++_STL算法简介
算法概述 算法部分主要由头文件<algorithm>,<numeric>和<functional>组成. <algorithm>是所有STL ...
- Java并发编程(05):悲观锁和乐观锁机制
本文源码:GitHub·点这里 || GitEE·点这里 一.资源和加锁 1.场景描述 多线程并发访问同一个资源问题,假如线程A获取变量之后修改变量值,线程C在此时也获取变量值并且修改,两个线程同时并 ...
- excel如何快速汇总多个类别的总和?
这个需求是一位在当前抗疫一线的朋友提出的,和各位分享一下. 需求情况 因为众所周知的原因,他每天都需要为照顾的小区居民购买.运送生活物资.小区居民通过表单的形式提交自己每日的需求,最终汇总到一张exc ...