Java 中使用 Elasticsearch 进行 Boot 操作和 DSL 查询文档详解

Java 中使用 Elasticsearch 进行 Boot 操作和 DSL 查询文档详解

我将为你详细介绍如何在 Java 中使用 Elasticsearch 进行 Boot 操作、DSL 查询文档以及搜索结果的处理。通过本文,你将深入了解 Elasticsearch 的核心操作,并学会在 Spring Boot 项目中进行集成。

1. 引入 Spring Boot 与 Elasticsearch 依赖

在开始之前,确保你的 Spring Boot 项目中已经引入了 Elasticsearch 的相关依赖。你可以在 `pom.xml` 文件中添加以下 Maven 依赖:

```xml

<dependency>

<groupId>org.springframework.boot</groupId>

<artifactId>spring-boot-starter-data-elasticsearch</artifactId>

</dependency>

```

2. 配置 Elasticsearch 连接

在 `application.properties` 或 `application.yml` 中添加 Elasticsearch 连接配置:

```yaml

spring:

data:

elasticsearch:

cluster-nodes: localhost:9200

```

3. 创建索引

首先,我们需要创建一个索引,定义文档的映射关系。在 Spring Boot 项目中,我们可以通过 `ElasticsearchRestTemplate` 来执行索引创建操作。以下是一个简单的示例:

```java

import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;

public class IndexService {

private final ElasticsearchRestTemplate elasticsearchRestTemplate;

public IndexService(ElasticsearchRestTemplate elasticsearchRestTemplate) {

this.elasticsearchRestTemplate = elasticsearchRestTemplate;

}

public void createIndex() {

elasticsearchRestTemplate.indexOps(MyDocument.class).create();

}

}

```

4. 编写实体类

定义一个实体类 `MyDocument`,该类用于表示索引中的文档:

```java

import org.springframework.data.annotation.Id;

import org.springframework.data.elasticsearch.annotations.Document;

@Document(indexName = "my_index")

public class MyDocument {

@Id

private String id;

private String title;

private String content;

// 省略 getter 和 setter 方法

}

```

5. 添加文档

现在,我们来添加一些文档到刚刚创建的索引中:

```java

import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;

import org.springframework.stereotype.Service;

import java.util.UUID;

@Service

public class DocumentService {

private final ElasticsearchRestTemplate elasticsearchRestTemplate;

public DocumentService(ElasticsearchRestTemplate elasticsearchRestTemplate) {

this.elasticsearchRestTemplate = elasticsearchRestTemplate;

}

public void addDocument() {

MyDocument document = new MyDocument();

document.setId(UUID.randomUUID().toString());

document.setTitle("Getting Started with Elasticsearch in Spring Boot");

document.setContent("Elasticsearch is a distributed search engine.");

elasticsearchRestTemplate.save(document);

}

}

```

6. 使用 DSL 查询文档

Elasticsearch 提供了强大的 DSL(Domain Specific Language)来构建复杂的查询。在 Spring Boot 项目中,我们可以使用 `ElasticsearchRestTemplate` 来执行 DSL 查询。以下是一个 DSL 查询的示例:

```java

import org.elasticsearch.index.query.QueryBuilders;

import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;

import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;

import org.springframework.stereotype.Service;

@Service

public class SearchService {

private final ElasticsearchRestTemplate elasticsearchRestTemplate;

public SearchService(ElasticsearchRestTemplate elasticsearchRestTemplate) {

this.elasticsearchRestTemplate = elasticsearchRestTemplate;

}

public void searchDocument() {

NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();

queryBuilder.withQuery(QueryBuilders.matchQuery("title", "Elasticsearch"));

elasticsearchRestTemplate.search(queryBuilder.build(), MyDocument.class);

}

}

```

7. 处理搜索结果

搜索结果的处理是搜索功能的重要组成部分。在 Spring Boot 项目中,我们可以通过 `SearchHits` 对搜索结果进行处理:

```java

import org.springframework.data.elasticsearch.core.SearchHit;

import org.springframework.data.elasticsearch.core.SearchHits;

import org.springframework.stereotype.Service;

@Service

public class ResultService {

public void processSearchResults(SearchHits<MyDocument> searchHits) {

// 处理搜索结果

for (SearchHit<MyDocument> hit : searchHits) {

MyDocument document = hit.getContent();

System.out.println("Document ID: " + document.getId());

System.out.println("Title: " + document.getTitle());

System.out.println("Content: " + document.getContent());

}

}

}

```

8. 高级 DSL 查询

在实际应用中,我们通常需要更复杂的查询。Elasticsearch 的 DSL 提供了各种查询方式,如范围查询、模糊查询等。以下是一个高级 DSL 查询的示例:

```java

import org.elasticsearch.index.query.QueryBuilders;

import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;

import org.springframework.data.elasticsearch.core.query.NativeSearchQueryBuilder;

import org.springframework.stereotype.Service;

@Service

public class AdvancedSearchService {

private final ElasticsearchRestTemplate elasticsearchRestTemplate;

public AdvancedSearchService(ElasticsearchRestTemplate elasticsearchRestTemplate) {

this.elasticsearchRestTemplate = elasticsearchRestTemplate;

}

public void advancedSearch() {

NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();

queryBuilder.withQuery(QueryBuilders.boolQuery()

.must(QueryBuilders.matchQuery("title", "Elasticsearch"))

.must(QueryBuilders.rangeQuery("publishDate").gte("2023-01-01")));

elasticsearchRestTemplate.search(queryBuilder.build(), MyDocument.class);

}

}

```

通过这个高级 DSL 查询示例,你可以更灵活地构建符合实际需求的搜索功能。

结语

通过本文的详细介绍,你应该已经了解了在 Spring Boot 项目中使用 Elasticsearch 进行 Boot 操作、DSL 查询文档以及搜索结果处理的基本步骤。这些操作是构建强大搜索引擎的基础,同时也是 Java 开发者在实际项目中不可或缺的技能。希望这篇文章对你有所帮助。

相关推荐
DongQiShanRen26 分钟前
裁决台账双向互校(上):名册与实物的第一道对账
java·linux·运维·数据库·人工智能·自然语言处理·数据挖掘
归秋14237 分钟前
2026企业AI办公工具选型指南:从场景匹配到平台评估
大数据·运维·人工智能
cpolar技术支持1 小时前
Spring Boot 接口本地正常,异地前端却报跨域?用 cpolar 跑通 CORS 预检与白名单
java·springboot·cpolar·前后端分离·cors
wuminyu1 小时前
Virtual Thread重投递至ForkJoinPool任务队列过程解析
java·linux·c语言·jvm·c++
小蒜学长1 小时前
在线保险服务与管理平台的设计与实现(代码+数据库+LW)
java·数据库·spring boot·后端·服务平台·在线保险
掉进电商坑三年没爬出来的东叔1 小时前
青龙面板进阶:一个面板聚合多平台签到,所有积分自动领
java·开发语言
well06122 小时前
Linux 文件相关底层知识
linux·运维·服务器
Lsetea2 小时前
OpenSSL verify报CA certificate key too weak:auth_level与弱密钥链排查
运维·https·ssl证书·openssl·证书链
殷色玫瑰2 小时前
C++ STL:stack、queue、priority_queue 与容器适配器详解
java·开发语言·数据结构·c++·算法·visualstudio
熊猫钓鱼>_>2 小时前
从闲置平板到家里的“控制大脑“:鸿蒙智慧中控面板完整实战
运维·人工智能·华为·自动化·电脑·ai编程·harmonyos