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初识的更多相关文章

  1. springboot整合elasticsearch入门例子

    springboot整合elasticsearch入门例子 https://blog.csdn.net/tianyaleixiaowu/article/details/72833940 Elastic ...

  2. SpringBoot整合ElasticSearch实现多版本的兼容

    前言 在上一篇学习SpringBoot中,整合了Mybatis.Druid和PageHelper并实现了多数据源的操作.本篇主要是介绍和使用目前最火的搜索引擎ElastiSearch,并和Spring ...

  3. ElasticSearch(2)---SpringBoot整合ElasticSearch

    SpringBoot整合ElasticSearch 一.基于spring-boot-starter-data-elasticsearch整合 开发环境:springboot版本:2.0.1,elast ...

  4. Springboot整合elasticsearch以及接口开发

    Springboot整合elasticsearch以及接口开发 搭建elasticsearch集群 搭建过程略(我这里用的是elasticsearch5.5.2版本) 写入测试数据 新建索引book( ...

  5. SpringBoot整合Elasticsearch详细步骤以及代码示例(附源码)

    准备工作 环境准备 JAVA版本 java version "1.8.0_121" Java(TM) SE Runtime Environment (build 1.8.0_121 ...

  6. Springboot整合Elasticsearch报错availableProcessors is already set to [4], rejecting [4]

    Springboot整合Elasticsearch报错 今天使用SpringBoot整合Elasticsearch时候,相关的配置完成后,启动项目就报错了. nested exception is j ...

  7. Springboot整合ElasticSearch进行简单的测试及用Kibana进行查看

    一.前言 搜索引擎还是在电商项目.百度.还有技术博客中广泛应用,使用最多的还是ElasticSearch,Solr在大数据量下检索性能不如ElasticSearch.今天和大家一起搭建一下,小编是看完 ...

  8. 😊SpringBoot 整合 Elasticsearch (超详细).md

    SpringBoot 整合 Elasticsearch (超详细) 注意: 1.环境搭建 安装es Elasticsearch 6.4.3 下载链接 为了方便,环境使用Windows 配置 解压后配置 ...

  9. SpringBoot整合elasticsearch

    在这一篇文章开始之前,你需要先安装一个ElasticSearch,如果你是mac或者linux可以参考https://www.jianshu.com/p/e47b451375ea,如果是windows ...

  10. springboot整合elasticsearch(基于es7.2和官方high level client)

    前言 最近写的一个个人项目(传送门:全终端云书签)中需要用到全文检索功能,目前 mysql,es 都可以做全文检索,mysql 胜在配置方便很快就能搞定上线(参考这里),不考虑上手难度,es 在全文检 ...

随机推荐

  1. java实现第六届蓝桥杯加法变乘法

    加法变乘法 题目描述 我们都知道:1+2+3+ - + 49 = 1225 现在要求你把其中两个不相邻的加号变成乘号,使得结果为2015 比如: 1+2+3+-+1011+12+-+2728+29+- ...

  2. java实现第九届蓝桥杯整理玩具

    整理玩具 小明有一套玩具,一共包含NxM个部件.这些部件摆放在一个包含NxM个小格子的玩具盒中,每个小格子中恰好摆放一个部件. 每一个部件上标记有一个0~9的整数,有可能有多个部件标记相同的整数. 小 ...

  3. MMDVM中继板测试软件MMDVMCal

    运行方法: 只支持windows 64位系统 32位下载:https://share.weiyun.com/52uHAO5 64位下载:https://share.weiyun.com/5IgdqvL ...

  4. 一、kafka 介绍 && kafka-client

    一.kafka 介绍 1.1.kafka 介绍 Kafka 是一个分布式消息引擎与流处理平台,经常用做企业的消息总线.实时数据管道,有的还把它当做存储系统来使用. 早期 Kafka 的定位是一个高吞吐 ...

  5. 呀,葵花宝典![IT项目经理成长晋升记2]

    走出办公室时,老吴让王小白认真看下公司的项目管理体系和质量管理体系培训材料.公司这几年连续通过了ISO质量体系认证,通过了CMMI3,已有一套完整的组织过程体系. 因为从投标开始,到公示,还有一周时间 ...

  6. 【python-opencv】读取、显示、写入图像

    1.读取图像 import cv2 image=cv2.imread("dog2.jpg",1) 说明: 第二个参数是一个标志,它指定了读取图像的方式. cv.IMREAD_COL ...

  7. 源码分析(2)-LinkedHashMap(JDK1.8)

    1.概述 LinkedHashMap继承自HashMap:在HashMap基础上,通过维护一条双向链表,解决了HashMap键值对遍历顺序和插入顺序一致的问题. 想了解LinkedHashMap源码, ...

  8. @Component、@Service、@Controller、@Rrepository说明

    自己开发了一个股票智能分析软件,功能很强大,需要的点击下面的链接获取: https://www.cnblogs.com/bclshuai/p/11380657.html 1       Spring容 ...

  9. SpringBoot爬坑系列

    1.日志篇 现象 由于日志配置采用原来SpringMVC项目中的log4j.properties 文件,日志采用springboot自带的jar包会出现打印不出日志的情况. 解决 引入原日志包 < ...

  10. (一)POI-新建excel文件

    原文:https://blog.csdn.net/class157/article/details/92799521 package com.java.poi; import org.apache.p ...