ES客户端详解

一、ES客户端介绍

ES(Elasticsearch)是一种开源的分布式搜索引擎,通过RESTful web接口来进行通信。为了更加方便地使用ES,官方提供了各种语言的客户端,例如Java、Python、PHP和.NET等,同时也有非官方客户端。本文将重点介绍ES官方Java客户端。

二、ES Java客户端基本用法

ES Java客户端通过maven依赖引入,具体依赖如下:


<dependency>  
    <groupId>org.elasticsearch</groupId>  
    <artifactId>elasticsearch</artifactId>  
    <version>7.9.3</version>  
</dependency>  

接着创建一个TransportClient对象,连接到ES服务器:


TransportClient client = new PreBuiltTransportClient(Settings.EMPTY)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); 

连接成功后,就可以进行各种操作,例如创建、更新、删除索引等等。这些操作可以使用IndexRequest、UpdateRequest和DeleteRequest对象完成。例如:


IndexRequest indexRequest = new IndexRequest(INDEX_NAME, TYPE_NAME, id).source(source);
UpdateRequest updateRequest = new UpdateRequest(INDEX_NAME, TYPE_NAME, id).doc(source).upsert(indexRequest);
DeleteRequest deleteRequest = new DeleteRequest(INDEX_NAME, TYPE_NAME, id);    

以上为ES Java客户端基本用法,除此之外还有一些高级用法,例如Bulk API批量操作、Scroll API滚动搜索等等,可以根据具体需求进行使用。

三、ES Java客户端配置

ES Java客户端也可以进行配置,常用的配置包括:

1. 连接池配置

连接池用于维护多个与ES服务器连接的TransportClient对象,以减少创建连接的开销,提高效率。连接池的配置可以使用Settings对象进行设置,例如:


Settings settings = Settings.builder().put("client.transport.sniff", true).put("cluster.name", "docker-cluster").build();
TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); 

2. Retry配置

ES Java客户端默认会对失败的操作进行3次重试,重试间隔为500ms,可以使用以下代码修改配置:


Settings settings = Settings.builder().put("client.transport.retry_on_failure", true).put("client.transport.max_attempts", 5).put("client.transport.interval", "2s").build();
TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); 

3. SSL配置

ES Java客户端支持SSL加密通信,可以使用以下代码进行配置:


Settings settings = Settings.builder().put("client.transport.nodes_sampler_interval", "5s").put("xpack.security.transport.ssl.enabled", true).put("xpack.security.transport.ssl.verification_mode", "none").put("cluster.name", "docker-cluster").build();
TransportClient client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300)); 

四、ES Java客户端异常处理

在使用ES Java客户端时,可能会遇到各种异常情况,例如网络异常、索引不存在等等。要正确处理这些异常,可以使用try-catch语句,例如:


try {
    IndexResponse response = client.index(indexRequest).get();
} catch (ElasticsearchException e) {
    if (e.status() == RestStatus.CONFLICT) {
        // 数据冲突处理
    } else if (e.status() == RestStatus.NOT_FOUND) {
        // 数据不存在处理
    }
} catch (Exception e) {
    // 其他异常处理
}

上述代码中,ElasticsearchException是ES Java客户端自定义的异常,可以用于捕获ES服务器返回的错误信息。

五、ES Java客户端示例代码

以下是一个基于ES Java客户端的简单示例代码:


public class ElasticsearchClient {

    private static final String INDEX_NAME = "index_name";
    private static final String TYPE_NAME = "type_name";

    private TransportClient client;

    public ElasticsearchClient() throws UnknownHostException {
        Settings settings = Settings.builder().put("client.transport.sniff", true).put("cluster.name", "docker-cluster").build();
        client = new PreBuiltTransportClient(settings)
                .addTransportAddress(new InetSocketTransportAddress(InetAddress.getByName("localhost"), 9300));
    }

    public void close() {
        client.close();
    }

    public void insert(String id, String source) {
        try {
            IndexRequest indexRequest = new IndexRequest(INDEX_NAME, TYPE_NAME, id).source(source);
            IndexResponse response = client.index(indexRequest).get();
        } catch (Exception e) {
            // 异常处理
        }
    }

    public void update(String id, String source) {
        try {
            IndexRequest indexRequest = new IndexRequest(INDEX_NAME, TYPE_NAME, id).source(source);
            UpdateRequest updateRequest = new UpdateRequest(INDEX_NAME, TYPE_NAME, id).doc(source).upsert(indexRequest);
            UpdateResponse response = client.update(updateRequest).get();
        } catch (Exception e) {
            // 异常处理
        }
    }

    public void delete(String id) {
        try {
            DeleteRequest deleteRequest = new DeleteRequest(INDEX_NAME, TYPE_NAME, id);
            DeleteResponse response = client.delete(deleteRequest).get();
        } catch (Exception e) {
            // 异常处理
        }
    }

}

总结

到此为止,我们已经学习了ES Java客户端的基本用法、配置、异常处理和示例代码。ES Java客户端是ES的重要组成部分,在实际应用中具有广泛的应用价值。希望本文对大家有所帮助。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/188666.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-28 13:32
下一篇 2024-11-28 13:32

相关推荐

  • Spark集成ES开发

    本文将介绍如何使用Spark集成ES进行数据开发和分析。 一、系统概述 Spark是一个基于内存的分布式计算系统,可以快速地处理大量数据。而ES(ElasticSearch)则是一…

    编程 2025-04-28
  • Python调用crt telnet客户端的实现

    本篇文章将详细介绍如何使用Python调用crt telnet客户端。我们将从以下几个方面进行阐述: 一、安装crt telnet客户端 首先,我们需要下载并安装crt telne…

    编程 2025-04-28
  • 跨域通信浮标——实现客户端之间的跨域通信

    本文将介绍跨域通信浮标的使用方法,该浮标可以实现客户端之间的跨域通信,解决了浏览器同源策略的限制,让开发者能够更加方便地进行跨域通信。 一、浮标的原理 跨域通信浮标的原理是基于浮动…

    编程 2025-04-27
  • Python服务器客户端

    本文将从以下几个方面对Python服务器客户端进行详细阐述:socket编程、HTTP协议、Web框架、异步IO。 一、socket编程 Python的socket模块是为网络编程…

    编程 2025-04-27
  • C# Socket关闭后客户端仍可连接的解决方法

    对于C# Socket通信中的一些问题,多数人可能已经熟知,但是有些问题仍然困扰着一部分人,例如Socket关闭后,客户端仍然可以连接。本篇文章将在此问题为中心,围绕该问题的原因和…

    编程 2025-04-27
  • Helm部署ES CrashLoopBackOff

    如果你在使用Helm部署ES时遇到CrashLoopBackOff问题,那么本文将对这一问题进行详细解答。我们将从以下方面进行阐述: 一、问题分析与定位 在使用Helm部署ES时,…

    编程 2025-04-27
  • Linux sync详解

    一、sync概述 sync是Linux中一个非常重要的命令,它可以将文件系统缓存中的内容,强制写入磁盘中。在执行sync之前,所有的文件系统更新将不会立即写入磁盘,而是先缓存在内存…

    编程 2025-04-25
  • 神经网络代码详解

    神经网络作为一种人工智能技术,被广泛应用于语音识别、图像识别、自然语言处理等领域。而神经网络的模型编写,离不开代码。本文将从多个方面详细阐述神经网络模型编写的代码技术。 一、神经网…

    编程 2025-04-25
  • Python安装OS库详解

    一、OS简介 OS库是Python标准库的一部分,它提供了跨平台的操作系统功能,使得Python可以进行文件操作、进程管理、环境变量读取等系统级操作。 OS库中包含了大量的文件和目…

    编程 2025-04-25
  • 详解eclipse设置

    一、安装与基础设置 1、下载eclipse并进行安装。 2、打开eclipse,选择对应的工作空间路径。 File -> Switch Workspace -> [选择…

    编程 2025-04-25

发表回复

登录后才能评论