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來實現各種查詢需要。

原創文章,作者:HUYEM,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/361714.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
HUYEM的頭像HUYEM
上一篇 2025-02-25 18:17
下一篇 2025-02-25 18:17

相關推薦

發表回復

登錄後才能評論