您的位置:

Spring Data Elasticsearch介绍

一、什么是Spring Data Elasticsearch

Spring Data Elasticsearch是Spring Data家族的一员,它提供了一种集成Elasticsearch(以下简称ES)的方法。Spring Data Elasticsearch 的最终目标是让 Elasticsearch的Java客户端变得更加易用。

二、Spring Data Elasticsearch的特点

1、强大的Type Mapping:ES是Document-Oriented数据库,它将数据存储为Map 的形式。然而,我们往往希望将ES的数据映射为POJO(即JavaBean)。Spring Data Elasticsearch 提供了强大的类型映射功能,可以将ES中的数据映射为POJO。

2、充分利用Spring Data的ORM特性:Spring Data Elasticsearch充分利用Spring Data的ORM特性,使得操作Documetns变得非常简单。在Elasticsearch中,一个Document可以看作是一个Java对象。Spring Data的基本工作就是将这种Java对象映射成Elasticsearch中的一个文档,从而实现Java对象和文档之间的转换。

3、Easy-to-Use:Spring Data ElasticSearch提供了大量的配置和自定义选项,可以大大降低应用程序的使用难度并提高开发效率。

4、Popularity:Spring Data Elasticsearch是Spring Data家族的一员,能轻松与Spring Boot应用程序集成。并且,ES作为一个非常流行的NoSQL数据库,相信能为开发人员提供极大的帮助。

三、Spring Data Elasticsearch的使用

1、通过Elasticsearch Repository自动产生一个Repository

与其他Spring Data一样,你可以通过ElasticsearchRepository特定的接口来访问数据库。这里我们演示一个简单的使用例子,访问一个名为customer的index:

@Repository
public interface CustomerRepository extends ElasticsearchRepository {
    /**
     * 通过lastName查询Customer
     */
    List
    findByLastName(String lastName);

    /**
     * 通过地址查询Customer
     */
    List
     findByAddress(String address);
}

    
   
  

上述代码中,我们定义了一个Repository接口,继承了ElasticsearchRepository。Spring Data Elasticsearch使用一个类似于Spring Data JPA的命名约定来查找具体的查询。 在这里,Spring Data Elasticsearch会自动在Customer类型中查找lastName和address字段,并创建查询,这就使得我们在不需要写SQL的情况下进行数据的查询。

2、ElasticsearchTemplate的使用

当默认创建的查询不能满足我们的需求时,我们可以使用ElasticsearchTemplate来实现自定义的查询。ElasticsearchTemplate是Elasticsearch的Java API之上的一个高级元素,可用于调用ES的各种API,并返回反序列化的搜索结果。

@Component
public class CustomElasticsearchTemplate {
    private final ElasticsearchOperations elasticsearchOperations;

    @Autowired
    public CustomElasticsearchTemplate(ElasticsearchOperations elasticsearchOperations) {
        this.elasticsearchOperations = elasticsearchOperations;
    }

    public List customFindByMultiFields(String firstName, String lastName) {
        NativeSearchQueryBuilder queryBuilder = new NativeSearchQueryBuilder();
        sortQueryBuilder.withQuery(boolQuery()
                .should(matchQuery("firstName", firstName))
                .should(matchQuery("lastName", lastName)));
        List
    customerList = elasticsearchOperations.queryForList(queryBuilder.build(), Customer.class);
        return customerList;
    }
}

   
  

上述代码中,我们自定义了一个名为customFindByMultiFields的方法,这个方法会同时查询firstName和lastName两个字段是否包含我们所需要的数据,如果符合,返回一个Customer列表对象。

四、Spring Data Elasticsearch的配置

Spring Data Elasticsearch在Spring Boot应用程序中的配置,和其他Spring Data一样,通过application.properties文件实现。下面是一个Configuration的例子:

@Configuration
@EnableElasticsearchRepositories(
        basePackages = "com.example.elasticsearch.repository"
)
public class CustomerConfig extends AbstractElasticsearchConfiguration {

    @Override
    @Bean
    public RestHighLevelClient elasticsearchClient() {
        final ClientConfiguration clientConfiguration = ClientConfiguration.builder()
                .connectedTo("localhost:9200")
                .build();

        return RestClients.create(clientConfiguration).rest();
    }
}

上述代码中,我们创建了一个名为CustomerConfig的配置类,定义了一个elasticsearchClient的Bean。elasticsearchClient中配置了客户端的连接地址,通过注入elasticsearchClient,Spring Data Elasticsearch便可以访问到ES数据库。

五、总结

通过Spring Data Elasticsearch,我们可以充分利用Spring Data ORM的强大功能,对ES数据库进行操作。通过自动创建查询,我们不需要手写SQL就可以完成大部分的查询操作。当自动创建的查询无法满足需求时,我们可以自定义查询,使用ElasticSearchTemplate来实现各种查询需要。