Springboot 集成Elasticsearch

在 Spring Boot 应用程序中集成 Elasticsearch(ES)可以使你能够利用 Elasticsearch 的强大搜索和分析功能。Elasticsearch 是一个分布式搜索引擎,广泛用于全文搜索、日志分析和数据索引等应用场景。Spring Boot 提供了与 Elasticsearch 的良好集成支持,使得开发者可以轻松地将 Elasticsearch 集成到 Spring Boot 应用程序中。

1. 添加依赖

首先,需要在你的 Spring Boot 项目的 pom.xml 文件中添加 Elasticsearch 相关的依赖。你可以使用 Spring Data Elasticsearch,它是 Spring Data 项目的一部分,提供了对 Elasticsearch 的集成支持。

<dependencies>
    <!-- Spring Boot Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <!-- Spring Data Elasticsearch Starter -->
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
    </dependency>

    <!-- Elasticsearch 客户端 -->
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>7.10.0</version> <!-- 使用与你的 Elasticsearch 版本兼容的版本 -->
    </dependency>
</dependencies>

2. 配置 Elasticsearch

application.propertiesapplication.yml 文件中配置 Elasticsearch 的连接设置。

application.yml 示例

spring:
  elasticsearch:
    rest:
      uris: http://localhost:9200
      username: your_username
      password: your_password

3. 定义 Elasticsearch 实体和仓库

3.1 定义实体类

定义一个与 Elasticsearch 索引对应的实体类,并使用 @Document 注解标识。

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

@Document(indexName = "my_index")
public class MyEntity {

    @Id
    private String id;

    private String name;

    private String description;

    // Getters and Setters
}
  • @Document 注解用于指定索引名称。
  • @Id 注解用于标识实体的唯一标识符字段。
3.2 定义仓库接口

创建一个继承 ElasticsearchRepository 的接口,以便进行基本的 CRUD 操作和查询。

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;

public interface MyEntityRepository extends ElasticsearchRepository<MyEntity, String> {

    // 可以在这里定义自定义查询方法
}

4. 使用 Elasticsearch

4.1 保存数据

使用定义的仓库接口来保存数据。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MyEntityService {

    @Autowired
    private MyEntityRepository myEntityRepository;

    public void saveEntity(MyEntity entity) {
        myEntityRepository.save(entity);
    }
}
4.2 查询数据

使用仓库接口进行数据查询。

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class MyEntityService {

    @Autowired
    private MyEntityRepository myEntityRepository;

    public MyEntity getEntityById(String id) {
        return myEntityRepository.findById(id).orElse(null);
    }

    public Iterable<MyEntity> getAllEntities() {
        return myEntityRepository.findAll();
    }
}

5. 自定义查询

Spring Data Elasticsearch 支持自定义查询方法,可以使用 @Query 注解来编写复杂的查询。

import org.springframework.data.elasticsearch.repository.ElasticsearchRepository;
import org.springframework.data.elasticsearch.annotations.Query;

public interface MyEntityRepository extends ElasticsearchRepository<MyEntity, String> {

    @Query("{\"match\":{\"name\":\"?0\"}}")
    Iterable<MyEntity> findByName(String name);
}

6. 高级配置和使用

6.1 配置客户端

如果需要更复杂的配置,例如连接池、超时设置等,可以通过配置 RestHighLevelClient 进行设置。

import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestClientBuilder;
import org.elasticsearch.client.RestClientBuilder.HttpClientConfigCallback;
import org.elasticsearch.client.RestClientBuilder.HttpClientConfigCallback;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ElasticsearchConfig {

    @Bean
    public RestHighLevelClient restHighLevelClient() {
        RestClientBuilder builder = RestClient.builder(
                new HttpHost("localhost", 9200, "http"));

        return new RestHighLevelClient(builder);
    }
}
6.2 使用 Elasticsearch 的聚合和分析功能

Spring Data Elasticsearch 支持 Elasticsearch 的聚合功能,可以进行复杂的分析和统计操作。可以使用 NativeSearchQueryBuilder 来构建复杂的查询。

import org.elasticsearch.index.query.QueryBuilders;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.elasticsearch.core.ElasticsearchRestTemplate;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.data.elasticsearch.core.query.SearchQuery;
import org.springframework.stereotype.Service;

@Service
public class MyEntityService {

    @Autowired
    private ElasticsearchRestTemplate elasticsearchRestTemplate;

    public void performAggregation() {
        SearchQuery searchQuery = new NativeSearchQueryBuilder()
                .withQuery(QueryBuilders.matchAllQuery())
                .addAggregation(AggregationBuilders.terms("by_name").field("name"))
                .build();

        AggregatedPage<MyEntity> result = elasticsearchRestTemplate
                .search(searchQuery, MyEntity.class);

        Terms terms = (Terms) result.getAggregations().get("by_name");
        for (Terms.Bucket bucket : terms.getBuckets()) {
            System.out.println(bucket.getKeyAsString() + ": " + bucket.getDocCount());
        }
    }
}

7. 总结

通过以上步骤,你可以将 Elasticsearch 集成到 Spring Boot 应用程序中,并利用 Spring Data Elasticsearch 提供的强大功能来进行数据索引和搜索。集成 Elasticsearch 后,你能够进行高效的全文搜索、复杂的查询和数据分析,提升应用的搜索能力和数据处理能力。

好的,下面是SpringBoot整合elasticsearch的步骤: 1. 引入elasticsearchspring-boot-starter-data-elasticsearch的依赖: ``` <dependency> <groupId>org.elasticsearch</groupId> <artifactId>elasticsearch</artifactId> <version>7.12.1</version> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-data-elasticsearch</artifactId> <version>2.4.5</version> </dependency> ``` 2. 配置elasticsearch连接信息: ``` spring.data.elasticsearch.cluster-nodes=localhost:9200 ``` 3. 创建实体类: ``` @Document(indexName = "my_index") public class MyEntity { @Id private String id; private String name; // getter and setter } ``` 4. 创建es的Repository: ``` public interface MyRepository extends ElasticsearchRepository<MyEntity, String> { } ``` 5. 在service中使用Repository: ``` @Service public class MyService { @Autowired private MyRepository myRepository; public void save(MyEntity entity) { myRepository.save(entity); } public List<MyEntity> search(String name) { return myRepository.findByName(name); } } ``` 6. 在controller中调用service: ``` @RestController public class MyController { @Autowired private MyService myService; @PostMapping("/save") public void save(@RequestBody MyEntity entity) { myService.save(entity); } @GetMapping("/search") public List<MyEntity> search(@RequestParam String name) { return myService.search(name); } } ``` 这样就可以通过SpringBoot整合elasticsearch实现数据的增删改查了。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值