首页 > 编程语言 >Java 如何连接 ElasticSearch

Java 如何连接 ElasticSearch

时间:2024-07-04 20:09:20浏览次数:1  
标签:Java import public client elasticsearch org ElasticSearch RestHighLevelClient 连接

在Java中连接Elasticsearch可以使用Elasticsearch提供的官方Java客户端。Elasticsearch官方提供的Java客户端有多种,其中最常用的是RestHighLevelClient。下面是使用RestHighLevelClient连接Elasticsearch的详细步骤。

1. 添加依赖

首先,在你的项目中添加Elasticsearch客户端的依赖。如果你使用的是Maven,你可以在pom.xml中添加以下依赖:

<dependencies>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>7.10.2</version> <!-- 版本根据你使用的Elasticsearch版本选择 -->
    </dependency>
</dependencies>

如果你使用的是Gradle,你可以在build.gradle中添加以下依赖:

dependencies {
    implementation 'org.elasticsearch.client:elasticsearch-rest-high-level-client:7.10.2'
}

2. 创建客户端

接下来,在你的Java代码中创建一个连接到Elasticsearch的客户端。

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;

public class ElasticsearchClient {
    private static final String HOST = "localhost";
    private static final int PORT = 9200;
    private static final String SCHEME = "http";

    public static RestHighLevelClient createClient() {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost(HOST, PORT, SCHEME)
                )
        );
        return client;
    }

    public static void closeClient(RestHighLevelClient client) {
        try {
            if (client != null) {
                client.close();
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. 执行基本操作

下面是一些基本操作的示例,包括索引文档、获取文档和删除文档。

索引文档

import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.common.xcontent.XContentType;

public class IndexDocument {
    public static void main(String[] args) {
        RestHighLevelClient client = ElasticsearchClient.createClient();

        IndexRequest request = new IndexRequest("my_index")
                .id("1")
                .source("{\"name\":\"John Doe\",\"age\":30,\"city\":\"New York\"}", XContentType.JSON);

        try {
            IndexResponse response = client.index(request, RequestOptions.DEFAULT);
            System.out.println(response.getId());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            ElasticsearchClient.closeClient(client);
        }
    }
}

获取文档

import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.RequestOptions;

public class GetDocument {
    public static void main(String[] args) {
        RestHighLevelClient client = ElasticsearchClient.createClient();

        GetRequest getRequest = new GetRequest("my_index", "1");

        try {
            GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
            if (getResponse.isExists()) {
                String sourceAsString = getResponse.getSourceAsString();
                System.out.println(sourceAsString);
            } else {
                System.out.println("Document not found");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            ElasticsearchClient.closeClient(client);
        }
    }
}

删除文档

import org.elasticsearch.action.delete.DeleteRequest;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.client.RequestOptions;

public class DeleteDocument {
    public static void main(String[] args) {
        RestHighLevelClient client = ElasticsearchClient.createClient();

        DeleteRequest deleteRequest = new DeleteRequest("my_index", "1");

        try {
            DeleteResponse deleteResponse = client.delete(deleteRequest, RequestOptions.DEFAULT);
            System.out.println(deleteResponse.getResult());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            ElasticsearchClient.closeClient(client);
        }
    }
}

4. 处理响应

上面的示例展示了如何创建客户端并执行基本的CRUD操作。在实际应用中,你可能需要处理更多的响应和异常,例如检查响应状态,处理特定的异常等。确保根据实际需求编写相应的处理逻辑。

通过以上步骤,你可以在Java中连接并操作Elasticsearch,进行文档的索引、查询、更新和删除等操作。

标签:Java,import,public,client,elasticsearch,org,ElasticSearch,RestHighLevelClient,连接
From: https://www.cnblogs.com/gongchengship/p/18284586

相关文章

  • ElasticSearch 如何增加相当于MySql 中的一列字段
    在Elasticsearch中,增加相当于MySQL中的一列字段的操作被称为“添加字段到索引映射”。与MySQL不同,Elasticsearch是一个文档存储引擎,使用索引和类型来组织数据。每个文档都有其特定的映射(mapping),定义了字段及其数据类型。增加字段到Elasticsearch映射的步骤查看当前映射:首先,查......
  • Java SSH 客户端 如何删除 linux 机器上的 文件
    在Java中,可以使用SSH客户端库如JSch(JavaSecureChannel)来连接到远程Linux机器并执行命令,包括删除文件。下面是一个使用JSch库的示例,展示如何通过SSH删除远程Linux机器上的文件。步骤:添加JSch库:确保您的项目包含JSch库。如果您使用的是Maven,可以在pom.xml......
  • Java28-反射
    目录概述学习反射到底学什么获取字节码文件对象的三种方式字节码文件和字节码文件对象获取构造方法获取构造方法并创建对象获取成员变量获取成员变量并获取值和修改值获取成员方法获取成员方法并运行练习泛型擦除修改字符串的内容反射和配置文件结合动态获取利......
  • Java 中Json中既有对象又有数组的参数 如何转化成对象
    1.示例一:解析一个既包含对象又包含数组的JSON字符串,并将其转换为Java对象在Java中处理JSON数据,尤其是当JSON结构中既包含对象又包含数组时,常用的库有org.json、Gson和Jackson。这里我将以Gson为例来展示如何解析一个既包含对象又包含数组的JSON字符串,并将其转换为Java对象。首先......
  • Java for循环倒序输出
    1.实现一个for循环的倒序输出在Java中,要实现一个for循环的倒序输出,通常我们会使用数组或集合(如ArrayList)作为数据源,然后通过倒序遍历这个数组或集合来实现。下面,我将给出一个详细的示例,使用数组作为数据源,通过for循环倒序输出数组中的元素。这个示例不仅可以直接运行,而且具有一定......
  • 【如何判断动作事件是否由按钮引发】基于Java-GUI
    在刚刚写GUI的时候,我突然想到怎样去判断某一个事件源是由哪一个监听器响应的,所以我来整理后编写这次总结。(❁´◡`❁)❤当然首先得需要有一个按钮对象♥JButtonbt=newJButton();//创建按钮对象╰(*°▽°*)╯♥这里存在俩种情况♥如果按钮创建和判断方法在一......
  • Java中的JSON神器,如何轻松玩转复杂数据结构
    哈喽,大家好,我是木头左!一、揭秘JSON世界的基石在Java的世界中,JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式,它基于文本,易于阅读和编写,同时也易于机器解析和生成。JSON在日常开发中的应用非常广泛,无论是前后端的数据交互,还是配置文件的读取,都离不开JSON的身影。那......
  • Java基础:线程的三种创建方式
    一、继承Thread类定义一个类继承线程类Thread重写run()方法创建线程对象调用线程对象的start()方法创建线程Thread类的常用APIsetName(Stringname):给线程取名字getName():获取线程的名字publicstaticThreadcurrentThread():获取当前线程对象,这个代码在哪个线程中就获......
  • CenterOS7安装java
    CenterOS7安装java#进入安装目录cd/usr/local/soft/java#wget下载java8#直接进入官网选择相应的版本进行下载,然后把下载链接复制下来就可以下载了#不时间的下载链接不一样wgethttp://download.oracle.com/otn-pub/java/jdk/8u181-b13/96a7b8442fe848ef90c96a2fad6ed6d1/......
  • 2024年华为OD机试真题- 电脑病毒感染-(C++/Java/python)-OD统一考试(C卷D卷)
     2024华为OD机试真题目录-(B卷C卷D卷)-【C++JavaPython】   题目描述一个局域网内有很多台电脑,分别标注为0~N-1的数字。相连接的电脑距离不一样,所以感染时间不一样,感染时间用t表示。其中网络内一台电脑被病毒感染,求其感染网络内所有的电脑最少需要多长时间。......