Java连接Elasticsearch详解

一、Elasticsearch简介

Elasticsearch是一个基于Lucene的分布式搜索引擎,能实现近实时的全文搜索并具有以下特点:

1、分布式搜索引擎,数据可以分片存储在集群中,提供水平扩展能力;

2、支持多种数据格式,包括结构化和非结构化数据;

3、提供丰富的RESTful API,使用简单方便;

4、提供机器学习和数据分析的功能。

因此,Elasticsearch在企业搜索、日志分析、安全日志分析、异常检测、物联网等领域得到了广泛的应用。

二、Java连接Elasticsearch

Elasticsearch提供Java API,可以很方便地在Java应用中使用Elasticsearch。

1、Maven依赖


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

这里使用了最新版本的elasticsearch7.12.1。

2、连接Elasticsearch


public static RestHighLevelClient createClient() {
    // 确认es集群节点地址
    String hostname = "localhost";
    RestClientBuilder builder = RestClient.builder(new HttpHost(hostname, 9200, "http"));
    RestHighLevelClient client = new RestHighLevelClient(builder);
    return client;
}

这里连接了本地的Elasticsearch集群,默认地址为localhost:9200。

3、CRUD操作

Java API提供了与RESTful API对应的接口,可以进行CRUD操作。

a)创建索引


// 创建索引
public static void createIndex(RestHighLevelClient client, String index) throws IOException {
    // 创建索引请求
    CreateIndexRequest request = new CreateIndexRequest(index);
    // 客户端执行请求
    CreateIndexResponse response = client.indices().create(request, RequestOptions.DEFAULT);
    System.out.println("创建索引 + " + index + " " + response.isAcknowledged());
}

这里创建了一个名为index的索引。

b)删除索引


// 删除索引
public static void deleteIndex(RestHighLevelClient client, String index) throws IOException {
    DeleteIndexRequest request = new DeleteIndexRequest(index);
    // 客户端执行请求
    AcknowledgedResponse response = client.indices().delete(request, RequestOptions.DEFAULT);
    System.out.println("删除索引 + " + index + " " + response.isAcknowledged());
}

这里删除了名为index的索引。

c)添加文档


// 添加文档
public static void addDoc(RestHighLevelClient client, String index, String id, String source) throws IOException {
    IndexRequest request = new IndexRequest(index);
    request.id(id);
    request.source(source, XContentType.JSON);
    IndexResponse response = client.index(request, RequestOptions.DEFAULT);
    System.out.println("添加文档 + " + id + " " + response.getResult());
}

这里向名为index的索引中添加了一条id为1的文档。

d)获取文档


// 获取文档
public static void getDoc(RestHighLevelClient client, String index, String id) throws IOException {
    // 获取文档请求
    GetRequest getRequest = new GetRequest(index, id);
    GetResponse getResponse = client.get(getRequest, RequestOptions.DEFAULT);
    System.out.println("获取文档 + " + id + " " + getResponse.getSourceAsString());
}

这里获取了名为index的索引中id为1的文档。

e)更新文档


 // 更新文档
public static void updateDoc(RestHighLevelClient client, String index, String id, String source) throws IOException {
    UpdateRequest request = new UpdateRequest(index, id);
    request.doc(source, XContentType.JSON);
    UpdateResponse response = client.update(request, RequestOptions.DEFAULT);
    System.out.println("更新文档 + " + id + " " + response.getResult());
}

这里修改了名为index的索引中id为1的文档。

f)删除文档


// 删除文档
public static void deleteDoc(RestHighLevelClient client, String index, String id) throws IOException {
    DeleteRequest request = new DeleteRequest(index, id);
    DeleteResponse response = client.delete(request, RequestOptions.DEFAULT);
    System.out.println("删除文档 + " + id + " " + response.getResult());
}

这里删除了名为index的索引中id为1的文档。

三、与Spring Boot集成

当使用Spring Boot开发应用时,使用Elasticsearch也可以很方便地集成。

1、Maven依赖


<dependency>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
</dependency>

这里使用了Spring Boot提供的spring-boot-starter-data-elasticsearch。

2、配置文件


spring.data.elasticsearch.cluster-nodes=127.0.0.1:9300
spring.data.elasticsearch.cluster-name=my-application

这里配置了连接localhost:9300的Elasticsearch集群,集群名称为my-application。

3、实体类


@Document(indexName = "index", type = "doc")
public class Doc {
    @Id
    private String id;
    private String name;
    private Integer age;
    // getter and setter
}

这里定义了一个名为index的索引,对应的实体为Doc。

4、ElasticsearchRepository


public interface DocRepository extends ElasticsearchRepository<Doc, String> {
}

这里定义了一个继承自ElasticsearchRepository的DocRepository接口,该接口提供了多种CRUD操作。

5、CRUD操作

使用Spring Boot集成Elasticsearch后,使用ElasticsearchRepository接口提供的方法可以对Elasticsearch进行CRUD操作。

a)添加文档


@Autowired
private DocRepository docRepository;

Doc doc = new Doc();
doc.setId("1");
doc.setName("Tom");
doc.setAge(20);
docRepository.save(doc);

这里向名为index的索引中添加了一条id为1的文档。

b)获取文档


Doc doc = docRepository.findById("1").orElse(null);
if(doc != null){
    System.out.println(doc.getName() + " " + doc.getAge());
}

这里获取了名为index的索引中id为1的文档。

c)更新文档


Doc doc = docRepository.findById("1").orElse(null);
if(doc != null){
    doc.setAge(21);
    docRepository.save(doc);
}

这里修改了名为index的索引中id为1的文档的age字段。

d)删除文档


docRepository.deleteById("1");

这里删除了名为index的索引中id为1的文档。

四、总结

Java连接Elasticsearch是一项在实际应用中很重要的功能,通过本文的介绍,我们可以清晰地了解到Java与Elasticsearch的连接方式,以及在Java应用中实现CRUD操作的方法。

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

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
SZSKGSZSKG
上一篇 2025-04-13 11:45
下一篇 2025-04-13 11:45

相关推荐

  • Java JsonPath 效率优化指南

    本篇文章将深入探讨Java JsonPath的效率问题,并提供一些优化方案。 一、JsonPath 简介 JsonPath是一个可用于从JSON数据中获取信息的库。它提供了一种DS…

    编程 2025-04-29
  • java client.getacsresponse 编译报错解决方法

    java client.getacsresponse 编译报错是Java编程过程中常见的错误,常见的原因是代码的语法错误、类库依赖问题和编译环境的配置问题。下面将从多个方面进行分析…

    编程 2025-04-29
  • Java腾讯云音视频对接

    本文旨在从多个方面详细阐述Java腾讯云音视频对接,提供完整的代码示例。 一、腾讯云音视频介绍 腾讯云音视频服务(Cloud Tencent Real-Time Communica…

    编程 2025-04-29
  • Java Bean加载过程

    Java Bean加载过程涉及到类加载器、反射机制和Java虚拟机的执行过程。在本文中,将从这三个方面详细阐述Java Bean加载的过程。 一、类加载器 类加载器是Java虚拟机…

    编程 2025-04-29
  • Java Milvus SearchParam withoutFields用法介绍

    本文将详细介绍Java Milvus SearchParam withoutFields的相关知识和用法。 一、什么是Java Milvus SearchParam without…

    编程 2025-04-29
  • Java 8中某一周的周一

    Java 8是Java语言中的一个版本,于2014年3月18日发布。本文将从多个方面对Java 8中某一周的周一进行详细的阐述。 一、数组处理 Java 8新特性之一是Stream…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • VSCode为什么无法运行Java

    解答:VSCode无法运行Java是因为默认情况下,VSCode并没有集成Java运行环境,需要手动添加Java运行环境或安装相关插件才能实现Java代码的编写、调试和运行。 一、…

    编程 2025-04-29
  • Java任务下发回滚系统的设计与实现

    本文将介绍一个Java任务下发回滚系统的设计与实现。该系统可以用于执行复杂的任务,包括可回滚的任务,及时恢复任务失败前的状态。系统使用Java语言进行开发,可以支持多种类型的任务。…

    编程 2025-04-29
  • Java 8 Group By 会影响排序吗?

    是的,Java 8中的Group By会对排序产生影响。本文将从多个方面探讨Group By对排序的影响。 一、Group By的概述 Group By是SQL中的一种常见操作,它…

    编程 2025-04-29

发表回复

登录后才能评论