Elasticsearch8.x Spring Data and Spring Boot 3 尝鲜

发布于:2024-07-05 ⋅ 阅读:(18) ⋅ 点赞:(0)

在本教程中,我们将通过实际操作和实用的方式,探索使用 Spring Boot 进行 Elasticsearch 的基础知识。我们将学习如何使用 Spring Data Elasticsearch 模块创建索引、进行 CRUD 操作、搜索和查询 Elasticsearch 文档。我们还将看看如何在我们的 Spring 应用程序中记录 Elasticsearch 的请求和响应数据。

1. 介绍

Elasticsearch 是一个强大且广泛使用的开源搜索和分析引擎,基于 Lucene。它设计用于快速和近实时地存储、搜索和分析大量数据。

以下是 Elasticsearch 的一些关键功能:

  • 全文搜索: Elasticsearch 在全文搜索方面表现出色。它能够高效地索引和搜索大量非结构化或半结构化文本数据。

  • JSON 文档: Elasticsearch 中的数据以 JSON 文档的形式存储。每个文档存储在一个索引中,概念上类似于关系型数据库中的表。这使得 Elasticsearch 是无模式的,可以在没有预定义结构的情况下索引和搜索数据。

  • 查询: Elasticsearch 提供了丰富而灵活的查询语言,使我们能够执行从简单到复杂的搜索。我们可以使用各种查询类型(如术语查询、匹配查询、范围查询等)来过滤、聚合和排序数据。

  • 分析器和分词器: Elasticsearch 包含强大的文本分析功能,如分析器和分词器,可以将文本分解为令牌以实现高效的搜索和索引。它支持多种语言和自定义分析器。

2. Elasticsearch 环境搭建

参考第一篇文章

3. 创建项目和配置elasticsearch

3.1. Maven

添加spring-boot-starter-data-elasticsearch

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

3.2. Elasticsearch ClientConfiguration

Spring Data Elasticsearch 依赖于一个 Elasticsearch 客户端(由 Elasticsearch 客户端库提供),该客户端可以连接到单个 Elasticsearch 节点或集群。

Elasticsearch 客户端配置.

@Configuration
public class ImperativeElasticsearchConfig extends ElasticsearchConfiguration {
   
    @Override
    public ClientConfiguration clientConfiguration() {
   
        return ClientConfiguration.builder()
                .connectedTo("192.168.163.13:9200")
                .withBasicAuth("elastic", "123456")
                .build();
    }
}

在上述配置之后,我们可以将以下 bean 注入到其他 Spring 组件中:

import org.springframework.data.elasticsearch.core.ElasticsearchOperations;
import co.elastic.clients.elasticsearch.ElasticsearchClient;
import org.elasticsearch.client.RestClient;

@Autowired
ElasticsearchOperations operations;

@Autowired
ElasticsearchClient elasticsearchClient;

@Autowired
RestClient restClient;         

注意: 我们应该使用 ElasticsearchOperations来与 Elasticsearch 集群交互。

当我们使用repositories时,底层使用的也是ElasticsearchOperations。

4. Document 相关的注解

Spring Data Elasticsearch 支持使用 Java 类作为可以映射到 Elasticsearch 文档的实体。这些类使用 @Document 注解,其字段使用 @Field 注解来映射到 Elasticsearch 字段。

在我们的演示中,我们将创建一个 Employee ,该doc具有诸如name和salary等属性,如下所示:

@Data
@Document(indexName = "employees", createIndex = true)
public class Employee {

    @Id
    private String employeeId;

    @Field(type = FieldType.Text, name = "name")
    private String name;

    @Field(type = FieldType.Long, name = "salary")
    private long salary;
    
    // setters and getters
}

现在,解释这些注解:

  • @Document – 应用在类级别,表示这个类是索引的mapping。

    • indexName – 存储此实体的索引名称。
    • createIndex标志决定是否在仓库引导时创建索引。默认值为 true。
  • @Id – 应用在字段级别,标记字段作为主键。

  • @Field – 应用在字段级别,定义字段的属性,如名称、类型、格式等。

5. Spring Data Elasticsearch APIs 分类说明

Spring Data Elasticsearch 提供了方便的抽象和模板,用于与 Elasticsearch 进行交互。它提供了高级抽象和数据访问方法,使我们无需直接处理底层 API。

  • ElasticsearchOperations (推荐)

    包含常见的辅助函数,其他方法已经被 移动到ElasticsearchOperations扩展的不同接口中。这些接口现在反映了 Elasticsearch 的 REST API 结构。

    • DocumentOperations 包含与保存或删除相关的函数。
    • SearchOperations 包含在 Elasticsearch 中进行搜索的函数。
    • IndexOperations 定义了在索引上操作的函数,如索引创建或映射创建。
  • ElasticsearchRepository: 是一个扩展了标准 Spring Data CrudRepository 的仓库接口。我们可以通过定义自定义方法和查询来创建自定义仓库。

  • ElasticsearchTemplate: 是一个高级 API,提供了各种与 Elasticsearch 交互的方法。它允许我们执行索引、查询和文档操作。

在后续部分,我们将深入探讨如何使用这些 API 的详细内容。

6. 使用 ElasticsearchOperations

完成必要的客户端配置后,我们可以将 ElasticsearchOperations bean 自动装配到服务类中,并使用其方法执行 CRUD 操作。

@Autowired private ElasticsearchOperations elasticsearchOperations;

5.1. 对doc的增删改查

我们可以使用传统的 save()get()delete() 方法来执行针对 Elasticsearch 文档的操作。

  • save() 操作具有 保存或更新语义
  • get() 方法从 Elasticsearch 索引中检索文档。要检索所需的文档,必须提供主键。
  • delete() 方法允许从索引中删除文档。
Employee employee = new Employee(

网站公告

今日签到

点亮在社区的每一天
去签到