ElasticSearch 实战:Spring Data ElasticSearch 的使用

Spring Data Elasticsearch 是 Spring 生态系统的一部分,提供了与 Elasticsearch 集成的便捷方式,允许开发者使用熟悉的 Spring Data 抽象和注解来操作 Elasticsearch。以下是一个使用 Spring Data Elasticsearch 的实战指南:

1. 添加依赖

在 Maven 或 Gradle 项目中添加 Spring Data Elasticsearch 依赖:

Maven:

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

Gradle:

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-elasticsearch'
}

2. 配置 Elasticsearch 连接

application.propertiesapplication.yml 中配置 Elasticsearch 服务器地址和端口:

spring.data.elasticsearch.cluster-name=my_cluster
spring.data.elasticsearch.cluster-nodes=localhost:9300

3. 定义实体类

创建一个代表 Elasticsearch 文档的 Java 类,并使用 Spring Data Elasticsearch 注解进行标注。例如,定义一个 Book 类:

@Document(indexName = "book", type = "_doc")
public class Book {

    @Id
    private String id;

    @Field(type = FieldType.Text)
    private String title;

    @Field(type = FieldType.Keyword)
    private String author;

    @Field(type = FieldType.Date, format = DateFormat.date)
    private LocalDate publicationDate;

    // 构造函数、getter/setter、equals/hashCode/toString 等方法
}

4. 创建 Repository 接口

创建一个继承自 ElasticsearchRepository 的接口,用于执行 CRUD 操作。例如,创建 BookRepository

public interface BookRepository extends ElasticsearchRepository<Book, String> {

    List<Book> findByAuthor(String author);

    Page<Book> findByPublicationDateBetween(LocalDate startDate, LocalDate endDate, Pageable pageable);
}

5. 使用 Repository 进行操作

在 Service 或 Controller 中注入 BookRepository 并使用它执行查询、保存、删除等操作:

@Service
public class BookService {

    private final BookRepository bookRepository;

    public BookService(BookRepository bookRepository) {
        this.bookRepository = bookRepository;
    }

    public void saveBook(Book book) {
        bookRepository.save(book);
    }

    public List<Book> findBooksByAuthor(String author) {
        return bookRepository.findByAuthor(author);
    }

    public Page<Book> findBooksByPublicationDate(LocalDate startDate, LocalDate endDate, Pageable pageable) {
        return bookRepository.findByPublicationDateBetween(startDate, endDate, pageable);
    }

    // 其他操作...
}

6. 自定义查询方法

如果需要执行更复杂的查询,可以使用 @Query 注解在 Repository 方法上定义原生 Elasticsearch 查询 DSL:

public interface BookRepository extends ElasticsearchRepository<Book, String> {

    @Query("{\"bool\":{\"must\":[{\"match\":{\"title\":\"?0\"}},{\"match\":{\"author\":\"?1\"}}]}}")
    List<Book> findByTitleAndAuthor(String title, String author);
}

7. 配置自定义 ElasticsearchTemplate

如果需要自定义 Elasticsearch 操作,如使用不同的映射配置、索引模板等,可以创建一个 ElasticsearchConfiguration 类并配置 ElasticsearchTemplate

@Configuration
public class ElasticsearchConfig {

    @Autowired
    private ElasticsearchProperties properties;

    @Bean
    public ElasticsearchOperations elasticsearchTemplate() {
        return new ElasticsearchTemplate(client(), new CustomEntityMapper());
    }

    @Bean
    public RestHighLevelClient client() {
        return RestClients.create(properties.getUris()).rest();
    }
}

8. 索引管理

使用 ElasticsearchOperationsIndexOperations 进行索引管理,如创建索引、添加映射、刷新索引等:

@Autowired
private ElasticsearchOperations operations;

public void setupIndex() {
    IndexOperations indexOps = operations.indexOps(Book.class);
    if (!indexOps.exists()) {
        indexOps.create();
    }
    indexOps.putMapping(Book.class);
    indexOps.refresh();
}

通过上述步骤,您已经成功将 Spring Data Elasticsearch 集成到您的 Spring Boot 应用中,并能够利用 Spring Data 的抽象和便利性来操作 Elasticsearch。根据实际需求,您可以进一步定制 Elasticsearch 配置、扩展 Repository 功能、实现复杂查询等。

  • 4
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值