一、什么是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
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 ListcustomFindByMultiFields(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来实现各种查询需要。