SpringBoot + ES基本專案搭建例項

小灰灰Blog發表於2022-03-29

【搜尋系列】ES基本專案搭建

之前一直沒有寫ES相關的博文,現在開始補課,預計5-6篇博文將es的使用姿勢展示給各位小夥伴;本文將作為es結合springboot的第一篇博文,基本專案環境搭建

<!-- more -->

I. 專案搭建

1. 專案依賴

本專案藉助SpringBoot 2.2.1.RELEASE + maven 3.5.3 + IDEA進行開發

開一個web服務用於測試

<dependencies>
    <dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
    </dependency>
</dependencies>

2. 配置資訊

配置檔案application.yml,注意下面的配置資訊,下面採用的是由我們自己來解析配置的方式

elasticsearch:
  host: localhost
  port: 9200
  user: elastic
  pwd: test123
  connTimeout: 3000
  socketTimeout: 5000
  connectionRequestTimeout: 500

說明

上面配置介紹的是一種偏基礎的es文件操作姿勢,相比較於封裝得更好的spring-boot-starter-data-elasticsearch,使用更加靈活

II. SpringBoot結合ES使用

1. RestHighLevelClient 初始化

接下來我們基於RestHighLevelClient來操作es,首先第一步就是需要初始化這例項

@Getter
@Configuration
public class ElasticsearchConfiguration {

    @Value("${elasticsearch.host}")
    private String host;

    @Value("${elasticsearch.port}")
    private int port;

    @Value("${elasticsearch.connTimeout}")
    private int connTimeout;

    @Value("${elasticsearch.socketTimeout}")
    private int socketTimeout;

    @Value("${elasticsearch.connectionRequestTimeout}")
    private int connectionRequestTimeout;

    @Value("${elasticsearch.user}")
    private String user;

    @Value("${elasticsearch.pwd}")
    private String pwd;

    @Bean(destroyMethod = "close", name = "client")
    public RestHighLevelClient initRestClient() {
        RestClientBuilder builder = RestClient.builder(new HttpHost(host, port))
                .setRequestConfigCallback(requestConfigBuilder -> requestConfigBuilder
                        .setConnectTimeout(connTimeout)
                        .setSocketTimeout(socketTimeout)
                        .setConnectionRequestTimeout(connectionRequestTimeout));
        return new RestHighLevelClient(builder);
    }
}

注意上面的實現,使用者名稱 + 密碼並沒有使用,當es設定了使用者名稱、密碼之後,是通過每次請求時,在請求頭基於Basic Auth方式進行身份驗證的;後面會介紹到

2. 基本使用

我們在本機搭建了一個es用於模擬測試,在上面的配置完之後,就可以直接與es進行互動了

es安裝可以參考:

下面是一個簡單的使用姿勢

@Service
public class EsTest {
    @Autowired
    private RestHighLevelClient client;

    private static String auth;

    public EsTest(ElasticsearchConfiguration elasticsearchConfiguration) {
        auth = Base64Utils.encodeToString((elasticsearchConfiguration.getUser() + ":" + elasticsearchConfiguration.getPwd()).getBytes());
        auth = "Basic " + auth;
    }

    public void testGet() throws Exception {
        // 文件查詢
        GetRequest getRequest = new GetRequest("first-index", "_doc", "gvarh3gBF9fSFsHNuO49");
        RequestOptions.Builder requestOptions = RequestOptions.DEFAULT.toBuilder();
        requestOptions.addHeader("Authorization", auth);
        GetResponse getResponse = client.get(getRequest, requestOptions.build());
        if (getResponse.isExists()) {
            String sourceAsString = getResponse.getSourceAsString();
            System.out.println(sourceAsString);
        } else {
            System.out.println("no string!");
        }
    }
}

注意上面的實現,有下面幾個重要知識點

身份驗證

採用Basic Auth方式進行身份校驗,簡單來說就是在請求頭中新增一個

  • key = Authorization
  • value = "Basic " + base64(user + ":" + pwd)

訪問姿勢

上面是一個根據id查詢文件的例項,簡單可以理解為三步

  • 建立:XxRequest
  • 新增請求頭:RequestOptions.Builder.addHeader
  • 執行: client.get(xxRequest, RequestOptions)

III. 不能錯過的原始碼和相關知識點

0. 專案

1. 微信公眾號: 一灰灰Blog

盡信書則不如,以上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激

下面一灰灰的個人部落格,記錄所有學習和工作中的博文,歡迎大家前去逛逛

一灰灰blog

相關文章