SpringBoot【ElasticSearch集成 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成(依赖+配置+增删改查测试源码)推荐使用

本文涉及的产品
检索分析服务 Elasticsearch 版,2核4GB开发者规格 1个月
简介: SpringBoot【ElasticSearch集成 02】Java HTTP Rest client for ElasticSearch Jest 客户端集成(依赖+配置+增删改查测试源码)推荐使用

1.简介

SpringBoot 项目初始化时就有 NoSQL 选项 Spring Data Elasticsearch(Access+Driver) 此时 pom 文件里引入的依赖是 spring-boot-starter-data-elasticsearch 它的版本受到 springboot 版本的限制,不能自由选择对应的 ES 版本。

还有另一个选择就是 Jest,以下是 官网 的介绍:

简单说就是:ES 有 Java API 但是没有 Http Rest interface,Jest 就是它的 HTTP Client。

2.依赖

<!-- https://mvnrepository.com/artifact/io.searchbox/jest -->
<dependency>
  <groupId>io.searchbox</groupId>
  <artifactId>jest</artifactId>
  <version>6.3.1</version>
</dependency>

3.配置

spring:
  elasticsearch:
    jest:
      uris: http://localhost:9200

4.使用

(1)创建客户端【官网代码】

// Construct a new Jest client according to configuration via factory
 JestClientFactory factory = new JestClientFactory();
 factory.setHttpClientConfig(new HttpClientConfig
                        .Builder("http://localhost:9200")
                        .multiThreaded(true)
      //Per default this implementation will create no more than 2 concurrent connections per given route
      .defaultMaxTotalConnectionPerRoute(<YOUR_DESIRED_LEVEL_OF_CONCURRENCY_PER_ROUTE>)
      // and no more 20 connections in total
      .maxTotalConnection(<YOUR_DESIRED_LEVEL_OF_CONCURRENCY_TOTAL>)
                        .build());
 JestClient client = factory.getObject();

(2)直接注入【配置文件进行参数配置】

@Autowired
    JestClient jestClient;

5.测试源码

(1)创建索引

@SpringBootTest
class EsJestApplicationTests {
    @Autowired
    JestClient jestClient;
    @Test
    void createIndex() {
        // 创建对象
        User user = User.builder().id(1001).name("1号用户").age(22).build();
        // 创建索引
        Index index = new Index.Builder(user).index("user").type("name").build();
        // 执行创建方法
        try {
            jestClient.execute(index);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

创建成功:

(2)查询索引【注入等代码不再贴出 只贴出方法】

@Test
    void queryIndex(){
        // 查询语句【可以在HiJson工具里编辑】
        String queryJson = "{\n" +
                "    \"query\": {\n" +
                "        \"match\": {\n" +
                "            \"name\": \"1号\"\n" +
                "        }\n" +
                "    }\n" +
                "}";
        // 创建查询
        Search search = new Search.Builder(queryJson).addIndex("user").addType("name").build();
        // 执行查询方法
        try {
            SearchResult result = jestClient.execute(search);
            System.out.println(result.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

输出结果【这里简单换个行 避免格式化后占较大篇幅】:

Result: 
{"took":47,"timed_out":false,
"_shards":{"total":5,"successful":5,"skipped":0,"failed":0},
"hits":{"total":1,"max_score":0.5753642,
"hits":[
{"_index":"user","_type":"name","_id":"1001","_score":0.5753642,
"_source":{"id":1001,"name":"1号用户","age":22}
}]}}, 
isSucceeded: true, 
response code: 200, 
error message: null

(3)更新索引【特别注意:更新语句官网给出的无法使用】

@Test
    void updateIndex() {
        // 更新语句【可以在HiJson工具里编辑】
        String script = "{\n" +
                "    \"script\": {\n" +
                "        \"inline\": \"ctx._source.name += params.nameInfo\",\n" +
                "        \"params\": {\n" +
                "            \"new_nameInfo\": \"(懂事长)\"\n" +
                "        }\n" +
                "    }\n" +
                "}";
        // 创建更新
        Update update = new Update.Builder(script).index("user").type("name").id("1001").build();
        // 执行更新方法
        try {
            DocumentResult result = jestClient.execute(update);
            System.out.println(result.toString());
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

输出结果:

Result: {"_index":"user","_type":"name","_id":"1001","_version":3,"result":"updated",
"_shards":{"total":2,"successful":1,"failed":0},"_seq_no":2,"_primary_term":1}, 
isSucceeded: true, 
response code: 200, 
error message: null

页面查看:

(4)删除索引

@Test
    void deleteIndex() {
        // 创建删除
        Delete delete = new Delete.Builder("1001").index("user").type("name").build();
        // 执行删除方法
        try {
            DocumentResult result = jestClient.execute(delete);
            System.out.println(result);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

输出结果:

Result: {"_index":"user","_type":"name","_id":"1001","_version":4,"result":"deleted",
"_shards":{"total":2,"successful":1,"failed":0},"_seq_no":3,"_primary_term":1}, 
isSucceeded: true, 
response code: 200, 
error message: null

6.总结

使用 Jest 的灵活性明显要比 Java api 要高,我们可以将增删改查的创建过程进行封装,输入参数获取解析后的结果。

相关实践学习
使用阿里云Elasticsearch体验信息检索加速
通过创建登录阿里云Elasticsearch集群,使用DataWorks将MySQL数据同步至Elasticsearch,体验多条件检索效果,简单展示数据同步和信息检索加速的过程和操作。
ElasticSearch 入门精讲
ElasticSearch是一个开源的、基于Lucene的、分布式、高扩展、高实时的搜索与数据分析引擎。根据DB-Engines的排名显示,Elasticsearch是最受欢迎的企业搜索引擎,其次是Apache Solr(也是基于Lucene)。 ElasticSearch的实现原理主要分为以下几个步骤: 用户将数据提交到Elastic Search 数据库中 通过分词控制器去将对应的语句分词,将其权重和分词结果一并存入数据 当用户搜索数据时候,再根据权重将结果排名、打分 将返回结果呈现给用户 Elasticsearch可以用于搜索各种文档。它提供可扩展的搜索,具有接近实时的搜索,并支持多租户。
目录
相关文章
|
9天前
|
JavaScript 前端开发 Java
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
这篇文章详细介绍了如何在前端Vue项目和后端Spring Boot项目中通过多种方式解决跨域问题。
178 1
解决跨域问题大集合:vue-cli项目 和 java/springboot(6种方式) 两端解决(完美解决)
|
18天前
|
JSON 前端开发 Java
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
文章介绍了Java后端如何使用Spring Boot框架响应不同格式的数据给前端,包括返回静态页面、数据、HTML代码片段、JSON对象、设置状态码和响应的Header。
62 1
震惊!图文并茂——Java后端如何响应不同格式的数据给前端(带源码)
|
4天前
|
JavaScript Java 关系型数据库
自主版权的Java诊所管理系统源码,采用Vue 2、Spring Boot等技术栈,支持二次开发
这是一个自主版权的Java诊所管理系统源码,支持二次开发。采用Vue 2、Spring Boot等技术栈,涵盖患者管理、医生管理、门诊管理、药店管理、药品管理、收费管理、医保管理、报表统计及病历电子化等功能模块。
|
4天前
|
缓存 监控 JavaScript
Java医药卫生健康云平台源码
系统采用云端SaaS服务的方式提供,使用用户通过浏览器即能访问,无需关注系统的部署、维护、升级等问题,系统充分考虑了模板化、配置化、智能化、扩展化等设计方法,覆盖了基层医疗机构的主要工作流程,能够与监管系统有序对接,并能满足未来系统扩展的需要。
13 2
|
18天前
|
存储 前端开发 Java
Java后端如何进行文件上传和下载 —— 本地版(文末配绝对能用的源码,超详细,超好用,一看就懂,博主在线解答) 文件如何预览和下载?(超简单教程)
本文详细介绍了在Java后端进行文件上传和下载的实现方法,包括文件上传保存到本地的完整流程、文件下载的代码实现,以及如何处理文件预览、下载大小限制和运行失败的问题,并提供了完整的代码示例。
114 1
|
3月前
|
监控 druid Java
spring boot 集成配置阿里 Druid监控配置
spring boot 集成配置阿里 Druid监控配置
242 6
|
3月前
|
Java 关系型数据库 MySQL
如何实现Springboot+camunda+mysql的集成
【7月更文挑战第2天】集成Spring Boot、Camunda和MySQL的简要步骤: 1. 初始化Spring Boot项目,添加Camunda和MySQL驱动依赖。 2. 配置`application.properties`,包括数据库URL、用户名和密码。 3. 设置Camunda引擎属性,指定数据源。 4. 引入流程定义文件(如`.bpmn`)。 5. 创建服务处理流程操作,创建控制器接收请求。 6. Camunda自动在数据库创建表结构。 7. 启动应用,测试流程启动,如通过服务和控制器开始流程实例。 示例代码包括服务类启动流程实例及控制器接口。实际集成需按业务需求调整。
289 4
|
3月前
|
消息中间件 Java 测试技术
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
【RocketMQ系列八】SpringBoot集成RocketMQ-实现普通消息和事务消息
252 1
|
4月前
|
消息中间件 Java Kafka
springboot集成kafka
springboot集成kafka
158 2
|
3月前
|
消息中间件 Java Kafka
Spring Boot与Apache Kafka Streams的集成
Spring Boot与Apache Kafka Streams的集成