在java后端开发中,ES的用处

1. ES 是什么

ES 即 Elasticsearch,是一个基于 Apache Lucene 构建的开源、分布式、RESTful 风格的搜索和分析引擎。它旨在实现高效的数据搜索、存储与分析,具备高可扩展性、容错性等特性。Elasticsearch 以 JSON 格式存储数据,通过分布式架构将数据分散存储在多个节点上,从而实现大规模数据的处理和快速检索。

2. 在 Java 后端开发中的作用

2.1 全文搜索功能

在 Java 后端开发的各类系统中,常常需要对大量文本数据进行搜索,如电商系统的商品搜索、新闻系统的文章搜索等。Elasticsearch 提供了强大的全文搜索能力,支持模糊搜索、同义词搜索、短语搜索等多种搜索方式,能快速准确地从海量数据中找到匹配的结果。

2.2 数据分析

对于日志分析、业务数据统计等场景,Elasticsearch 可以对存储的数据进行聚合分析。例如,统计某段时间内的用户访问量、不同地区的订单数量等。它支持多种聚合类型,如分组聚合、统计聚合等,帮助开发者深入了解数据的特征和趋势。

2.3 实时数据处理

Elasticsearch 可以实时处理新增的数据,新数据一旦写入就能立即被搜索到。在实时监控系统中,如监控服务器性能指标、网络流量等,Elasticsearch 能够及时存储和分析这些实时数据,为系统的稳定性和性能优化提供支持。

2.4 数据持久化和备份

Elasticsearch 会将数据持久化存储在磁盘上,并通过副本机制实现数据的备份。即使某个节点出现故障,数据也不会丢失,从而保证了数据的可靠性和系统的高可用性。

3. 在 Java 后端开发中的使用步骤

3.1 引入依赖

如果你使用 Maven 项目,在 pom.xml 中添加 Elasticsearch 客户端依赖:

复制代码
<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.17.3</version>
</dependency>
3.2 连接 Elasticsearch

以下是一个简单的 Java 代码示例,用于连接 Elasticsearch:

复制代码
import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;

public class ElasticsearchConnectionExample {
    public static void main(String[] args) {
        // 创建 RestHighLevelClient 实例
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200, "http")));

        try {
            // 这里可以进行后续的操作
            System.out.println("Connected to Elasticsearch");
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                // 关闭客户端连接
                client.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
}
3.3 索引文档

以下是向 Elasticsearch 索引中添加文档的示例:

复制代码
import org.apache.http.HttpHost;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;

import java.io.IOException;
import java.util.HashMap;
import java.util.Map;

public class ElasticsearchIndexDocumentExample {
    public static void main(String[] args) {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200, "http")));

        try {
            // 创建文档数据
            Map<String, Object> jsonMap = new HashMap<>();
            jsonMap.put("title", "Elasticsearch Tutorial");
            jsonMap.put("content", "This is a tutorial about Elasticsearch.");

            // 创建 IndexRequest 对象
            IndexRequest request = new IndexRequest("tutorials");
            request.id("1");
            request.source(jsonMap, XContentType.JSON);

            // 执行索引操作
            IndexResponse response = client.index(request, RequestOptions.DEFAULT);

            System.out.println("Document indexed successfully. ID: " + response.getId());
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}
3.4 搜索文档

以下是从 Elasticsearch 中搜索文档的示例:

复制代码
import org.apache.http.HttpHost;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RequestOptions;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.builder.SearchSourceBuilder;

import java.io.IOException;

public class ElasticsearchSearchDocumentExample {
    public static void main(String[] args) {
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200, "http")));

        try {
            // 创建 SearchRequest 对象
            SearchRequest searchRequest = new SearchRequest("tutorials");
            SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
            searchSourceBuilder.query(QueryBuilders.matchQuery("title", "Elasticsearch"));
            searchRequest.source(searchSourceBuilder);

            // 执行搜索操作
            SearchResponse searchResponse = client.search(searchRequest, RequestOptions.DEFAULT);

            // 处理搜索结果
            for (SearchHit hit : searchResponse.getHits().getHits()) {
                System.out.println(hit.getSourceAsString());
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            try {
                client.close();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }
}

4. 注意事项

  • 版本兼容性:Elasticsearch 客户端版本需要与 Elasticsearch 服务端版本保持兼容,否则可能会出现兼容性问题。
  • 集群配置:在生产环境中,通常需要使用 Elasticsearch 集群来提高系统的性能和可靠性。需要合理配置集群的节点数量、副本数量等参数。
  • 数据建模:在使用 Elasticsearch 之前,需要根据业务需求进行合理的数据建模,包括定义索引结构、字段类型等。良好的数据建模可以提高搜索和分析的效率。
  • 资源管理:Elasticsearch 是一个资源密集型的应用,需要合理分配服务器的 CPU、内存、磁盘等资源,以保证系统的稳定运行。
相关推荐
市场部需要一个软件开发岗位10 分钟前
JAVA开发常见安全问题:纵向越权
java·数据库·安全
历程里程碑23 分钟前
普通数组----合并区间
java·数据结构·python·算法·leetcode·职场和发展·tornado
程序员泠零澪回家种桔子42 分钟前
Spring AI框架全方位详解
java·人工智能·后端·spring·ai·架构
CodeCaptain1 小时前
nacos-2.3.2-OEM与nacos3.1.x的差异分析
java·经验分享·nacos·springcloud
Anastasiozzzz2 小时前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
骇客野人2 小时前
通过脚本推送Docker镜像
java·docker·容器
铁蛋AI编程实战2 小时前
通义千问 3.5 Turbo GGUF 量化版本地部署教程:4G 显存即可运行,数据永不泄露
java·人工智能·python
晚霞的不甘2 小时前
CANN 编译器深度解析:UB、L1 与 Global Memory 的协同调度机制
java·后端·spring·架构·音视频
SunnyDays10112 小时前
使用 Java 冻结 Excel 行和列:完整指南
java·冻结excel行和列
Dxy12393102162 小时前
Elasticsearch 索引与映射:为你的数据打造一个“智能仓库”
大数据·elasticsearch·搜索引擎