SpringBoot + ES基本項目搭建實例

【搜索系列】ES基本項目搭建

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

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章