【搜尋系列】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安裝可以參考:
- 200605-Centos 安裝ElasticSearch - 一灰灰Blog
- 210329-Elastic & Kibana安裝與基本使用 - 一灰灰Blog
docker安裝:docker pull docker.elastic.co/elasticsearch/elasticsearch:xxx
下面是一個簡單的使用姿勢
@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. 專案
- 工程:https://github.com/liuyueyi/spring-boot-demo
- 原始碼:https://github.com/liuyueyi/spring-boot-demo/tree/master/spring-boot/142-search-es
1. 微信公眾號: 一灰灰Blog
盡信書則不如,以上內容,純屬一家之言,因個人能力有限,難免有疏漏和錯誤之處,如發現bug或者有更好的建議,歡迎批評指正,不吝感激
下面一灰灰的個人部落格,記錄所有學習和工作中的博文,歡迎大家前去逛逛
- 一灰灰Blog個人部落格 https://blog.hhui.top
- 一灰灰Blog-Spring專題部落格 http://spring.hhui.top