一、什麼是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來實現各種查詢需要。
原創文章,作者:HUYEM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/361714.html