ElasticSearch在7.17版本之前使用的java客户端是Java REST Client,但是从7.17版本开始,官方将Java REST Client标记为弃用(deprecated),推荐使用新版Java Client。
本文介绍新版ElasticSearch Java Client的基本用法。
具体的代码参照 示例项目 https://github.com/qihaiyan/springcamp/tree/master/elasticsearch-javaclient

一、概述

Elasticsearch 7.17 版本新增的Java API Client具有以下优点:

  1. 强类型
  2. 同步和异步调用
  3. 流式和函数式调用
  4. 与Jackson无缝集成
  5. 封装了连接池、重试、json序列化等通用能力

二、项目中加入依赖

在项目的gradle或maven中增加依赖关系。

Gradle:

dependencies {implementation 'co.elastic.clients:elasticsearch-java:8.1.2'implementation 'com.fasterxml.jackson.core:jackson-databind:2.12.3'// Needed only if you use the spring-dependency-management// and spring-boot Gradle pluginsimplementation 'jakarta.json:jakarta.json-api:2.0.1'
}

Maven:

<project><dependencies><dependency><groupId>co.elastic.clients</groupId><artifactId>elasticsearch-java</artifactId><version>8.1.2</version></dependency><dependency><groupId>com.fasterxml.jackson.core</groupId><artifactId>jackson-databind</artifactId><version>2.12.3</version></dependency><!-- Needed only if you use the spring-boot Maven plugin --><dependency> <groupId>jakarta.json</groupId><artifactId>jakarta.json-api</artifactId><version>2.0.1</version></dependency></dependencies>
</project>

jakarta.json这个包的引入是为了解决springboot项目的兼容性问题,详见官方文档

三、JavaClient的初始化

Java API Client包含三部分:

  1. java客户端对应的类是ElasticsearchClient
  2. 一个JSON object mapper用于数据的序列化和反序列化
  3. 底层Transport通信
    RestClient restClient = RestClient.builder(new HttpHost("localhost", 9200)).build();ElasticsearchTransport transport = new RestClientTransport(restClient, new JacksonJsonpMapper());elasticsearchClient = new ElasticsearchClient(transport);

三、ElasticSearch的基本操作

1.保存数据,通过Java Client的自动序列化能力,我们可以直接把对象传递给Java Client,无需再手动处理ElasticSearch中json数据的序列化。

    DemoDomain record = new DemoDomain();record.setId("1");record.setName("test");IndexRequest<DemoDomain> indexRequest = IndexRequest.of(b -> b.index(MY_INDEX).id(record.getId()).document(record).refresh(Refresh.True));  // Make it visible for searchelasticsearchClient.index(indexRequest);

2.查询所有数据,同样json数据的反序列化也有Java Client自动处理,同时函数式编程使得代码很简洁。

    SearchRequest searchRequest = SearchRequest.of(s -> s.index(MY_INDEX).query(q -> q.bool(b -> b.must(m -> m.term(t -> t.field("name").value(FieldValue.of("test")))))));SearchResponse<DemoDomain> search = elasticsearchClient.search(searchRequest, DemoDomain.class);return search.hits().hits().stream().map(Hit::source).toList();

3.查询单个数据,在查询条件中指定id条件可以精确查询单条记录。

    SearchRequest searchRequest = SearchRequest.of(s -> s.index(MY_INDEX).query(q -> q.bool(b -> b.must(m -> m.term(t -> t.field("id").value(FieldValue.of("1")))).must(m -> m.term(t -> t.field("name").value(FieldValue.of("test")))))));SearchResponse<DemoDomain> search = elasticsearchClient.search(searchRequest, DemoDomain.class);return search.hits().hits().get(0).source();

4.删除单个数据,通过DeleteRequest可以删除指定的id的记录。

    DeleteRequest deleteRequest = DeleteRequest.of(s -> s.index(MY_INDEX).id(id));elasticsearchClient.delete(deleteRequest);

5.删除查找到的数据,将查询操作和删除操作合并到一起。

    SearchRequest searchRequest = SearchRequest.of(s -> s.index(MY_INDEX).query(q -> q.bool(b -> b.must(m -> m.term(t -> t.field("name").value(FieldValue.of("test")))))));SearchResponse<DemoDomain> search = elasticsearchClient.search(searchRequest, DemoDomain.class);elasticsearchClient.search(searchRequest, DemoDomain.class).hits().hits().forEach(record -> {DeleteRequest deleteRequest = DeleteRequest.of(s -> s.index(MY_INDEX).id(record.source().getId()));try {elasticsearchClient.delete(deleteRequest);} catch (IOException e) {throw new RuntimeException(e);}});

ElasticSearch新版JavaClient使用简介相关推荐

  1. 【ElasticSearch系列】ES简介及安装

    [前提:] 目前大部分的数据库在提取数据方面是非常薄弱的,虽然它们可以通过时间戳或相关的数值来进行内容的筛选,但是它们无法在全文搜索的同时做到同义词或相关性的搜索,它们也无法获取相同内容的数据.这个看 ...

  2. elasticsearch查询及logstash简介

    Query DSL: request body: 分成两类: query dsl:执行full-text查询时,基于相关度来评判其匹配结果: 查询执行过程复杂,且不会被缓存: filter dsl:执 ...

  3. Elasticsearch(一) ES之简介、倒排索引介绍以及 elasticsearch、kibana安装

    1,什么是Elasticsearch Elasticsearch是一个基于Lucene的搜索服务器.它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口.Elasticsearc ...

  4. Elasticsearch:Go 客户端简介 - 8.x

    Elasticsearch 的官方 Go 客户端是由 Elastic 开发.维护和支持的客户端系列的最新成员之一. 初始版本于 2019 年初发布,并在过去一年中逐渐成熟,获得了重试请求.发现集群节点 ...

  5. ElasticSearch数据库的使用简介

    ElasticSearch(简称ES)是一个开源的高扩展的分布式全文检索引擎:它可以近乎实时的存储.检索数据:本身扩展性很好,可以扩展到上百台服务器:可以处理PB级别的数据. 是当前流行的企业级搜索引 ...

  6. elasticsearch详解(简介)

    – "寄蜉蝣于天地,渺沧海之一粟.哀吾生之须臾,羡长江之无穷.挟飞仙以遨游,抱明月而长终.知不可乎骤得,托遗响于悲风."                               ...

  7. Elasticsearch的原理详解和使用

    目录 一.Elasticsearch 介绍 1.1 简介 1.2 原理和应用 1.2.1 先了解一下Lucene的整体框架 1.2.2 ES核心概念 1.2.3 ES实现写入和读取的原理 二.Elas ...

  8. Elasticsearch介绍Kibana分词器增删改操作

    Elasticsearch Elasticsearch介绍和安装 简介 Elastic Elastic官网:https://www.elastic.co/cn/ Elastic有一条完整的产品线及解决 ...

  9. spark写入elasticsearch限流

    文章目录 1. spark 批量写入es 2. java-spark写入elasticsearch 3. es_hadoop的源码拓展 1. MyEsSparkSQL 2. MyEsDataFrame ...

最新文章

  1. 一文了解 2018年最火爆的30个机器学习项目
  2. python多态的概念_Python 多态
  3. python画树叶-用python画树叶
  4. 世纪前线网络质量测试工具 是什么_成为一名软件测试工程师有什么前途?
  5. HDU Problem - 1455 Sticks
  6. macOS的控制台Console.app
  7. c++11 future promise
  8. 是不是Cookie让禁用了,Session就一定不能用了呢
  9. php 测试数据整数,PHP中将字符串转化为整数(int) intval() printf() 性能测试
  10. 使用python往数据库中添加数据
  11. 雾霾的结构化责任主体
  12. 【稀饭】react native 实战系列教程之项目初始化
  13. 从零搭建 ES 搜索服务(五)搜索结果高亮
  14. java类定义初成员变量赋值_Java中成员变量初始化
  15. 蚂蚁金服上市估值2k亿美金!会开发到底有多吃香?
  16. [SQL Server][Machine Learning]Realtime评分(预测)
  17. ==06-07第一网络大事件---熊猫烧香==
  18. 1075-Incorrect table definition; there can be only one auto column and it must be defined as a key
  19. 《数字图像处理原理与实践(MATLAB版)》一书之代码Part3
  20. Vant Tab标签页+下拉刷新+上拉加载

热门文章

  1. matlab怎么导入数据格式,matlab导入excel表格数据代码,如何将excel中数据导入到matlab中...
  2. 中职计算机应用基础教案1,中职计算机应用基础教案版.ppt
  3. H3C三层交换机配置DHCP
  4. python autoit打开软件_Python+AutoIt实现界面工具开发
  5. 专家谈手工查杀AV终结者病毒详解
  6. java word上传下载_JSP实现word文档的上传,在线预览,下载
  7. linux检查包是否已经安装,Linux下怎样检查、如何查看某软件包是否已经安装
  8. 读《Microservices》有感
  9. 尤雨溪回应:为什么 Vue 在国际上越来越没影响力?
  10. 10 个最好的免费开源网店系统