ElasticSearch整合SpringBoot搭建配置
前言
目前正在出一個Es專題系列教程, 篇幅會較多, 請持續(xù)關(guān)注腳本之家
本節(jié)來給大家講一下在Springboot中如何整合es~
本文偏實戰(zhàn)一些,為了方便演示,本節(jié)示例沿用上節(jié)索引,好了, 廢話不多說直接開整吧~
項目搭建
老規(guī)矩,先建maven項目,下面是我的pom.xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.example</groupId>
<artifactId>springboot-es-all</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<java.version>1.8</java.version>
</properties>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
</parent>
<dependencies>
<!--test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
</dependency>
<!--ElasticSearch 客戶端依賴-->
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-client</artifactId>
<version>7.8.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch</groupId>
<artifactId>elasticsearch</artifactId>
<version>7.8.0</version>
</dependency>
<dependency>
<groupId>org.elasticsearch.client</groupId>
<artifactId>elasticsearch-rest-high-level-client</artifactId>
<version>7.8.0</version>
</dependency>
<!--Hutool依賴-->
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.4</version>
</dependency>
<!--fast-json-->
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.58</version>
</dependency>
<dependency>
<groupId> org.slf4j </groupId>
<artifactId> slf4j-api </artifactId>
<version> 1.6.4 </version>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<version>2.1.3.RELEASE</version>
</plugin>
</plugins>
</build>
</project>
這里我使用的是elasticsearch-rest-high-level-client官方客戶端,建議大家盡量用官方的,因為隨著es的不斷升級,很多api都過時了,如果你使用spring-boot-starter-data-elasticsearch這個要依賴社區(qū)去維護,很多新特性你沒法使用到,也會存在安全性問題。
配置客戶端
啟動類:
@SpringBootApplication
public class EsStudyApplication {
public static void main(String[] args) {
SpringApplication.run(EsStudyApplication.class, args);
}
}
配置文件 application.yml:
server: port: 9000 elasticsearch: host: 0.0.0.0 port: 9200 username: password:
客戶端配置 config.EsClientConfig:
@Configuration
public class EsClientConfig {
@Value("${elasticsearch.host}")
private String host;
@Value("${elasticsearch.port}")
private int port;
@Value("${elasticsearch.username}")
private String userName;
@Value("${elasticsearch.password}")
private String password;
@Bean
public RestHighLevelClient restHighLevelClient() {
final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials(userName, password));
RestHighLevelClient restHighLevelClient = new RestHighLevelClient(
RestClient.builder(new HttpHost( host, port, "http")).setHttpClientConfigCallback(httpClientBuilder -> {
httpClientBuilder.setMaxConnTotal(500);
httpClientBuilder.setMaxConnPerRoute(300);
return httpClientBuilder.setDefaultCredentialsProvider(credentialsProvider);
})
);
return restHighLevelClient;
}
}
然后客戶端我們就配好了,客戶端的配置其實還有很多,感興趣的同學(xué)自行查閱。后續(xù)使用的時候,直接導(dǎo)入RestHighLevelClient實例就好了
接著啟動它,如果控制沒有報錯,說明配置沒啥問題了, 記得要開啟es服務(wù)~
索引API初探 & Index API
下面我們寫一點測試用例,來驗證我們是否可以操作es,為了方便演示,這里直接使用SpringBootTest來測試,大家平時在寫springboot項目,類測試的時候也可以這么做
ping
新建api.IndexApi,調(diào)用ping()方法來測試是否鏈接成功:
@Slf4j
@SpringBootTest
public class IndexApi {
/**
* es 索引
*/
public static final String index = "study";
@Autowired
private RestHighLevelClient client;
@Test
public void ping() throws IOException {
if(client.ping(RequestOptions.DEFAULT)) {
log.info("鏈接成功");
}else {
log.info("鏈接失敗 !");
}
}
}
點擊IndexApi左上角的綠色箭頭啟動測試用例, 如果報錯,嘗試添加以下 注解
@RunWith(SpringRunner.class)
@SpringBootTest(classes = { EsStudyApplication.class })
public class IndexApi {....}
返回:
鏈接成功
說明客戶端與es服務(wù)端是通的
創(chuàng)建索引 & create
通過前面的學(xué)習(xí),有了一定的基礎(chǔ)之后,回到代碼中其實就是調(diào)調(diào)方法,因為你知道了這個代碼的邏輯做了什么操作。下面來看下如何創(chuàng)建索引:
/**
* 創(chuàng)建索引
*/
@Test
public void createIndex() throws IOException {
CreateIndexRequest request = new CreateIndexRequest(index);
CreateIndexResponse createIndexResponse = client.indices().create(request, RequestOptions.DEFAULT);
log.info("創(chuàng)建索引 ===> "+ JSONObject.toJSONString(createIndexResponse)); // 創(chuàng)建索引 ===> {"acknowledged":true,"fragment":false,"shardsAcknowledged":true}
}
大家可以返回到kibana中查看索引是否被創(chuàng)建,從而驗證代碼執(zhí)行是否成功
添加別名:
// alias
request.alias(new Alias("study_alias"));
索引設(shè)置settings:
// index settings
request.settings(
Settings.builder()
.put("index.number_of_shards", 3)
.put("index.number_of_replicas", 2)
);
索引映射mapping:
// index mappings
// {
// "mapping": {
// "_doc": {
// "properties": {
// "name": {
// "type": "text"
// }
// }
// }
// }
// }
XContentBuilder builder = XContentFactory.jsonBuilder();
builder.startObject();
{
builder.startObject("properties");
{
builder.startObject("name");
{
builder.field("type", "text");
}
builder.endObject();
}
builder.endObject();
}
builder.endObject();
request.mapping(builder);
設(shè)置請求超時時間:
// 請求設(shè)置 request.setTimeout(TimeValue.timeValueMinutes(1));
索引是否存在 & exist
/**
* 判斷索引是否存在
* @throws IOException
*/
@Test
public void existIndex() throws IOException {
GetIndexRequest request = new GetIndexRequest(index);
boolean exists = client.indices().exists(request, RequestOptions.DEFAULT);
log.info("索引{}存在 ===> {}", index, exists);
}
刪除索引
/**
* 刪除索引
* @throws IOException
*/
@Test
public void delIndex() throws IOException {
DeleteIndexRequest request = new DeleteIndexRequest(index);
AcknowledgedResponse delete = client.indices().delete(request, RequestOptions.DEFAULT);
log.info("刪除索引 ===> {}", JSONObject.toJSONString(delete)); // 刪除索引 ===> {"acknowledged":true,"fragment":false}
}
結(jié)束語
下節(jié)帶大家看下文檔操作相關(guān)的api,也是我們業(yè)務(wù)中使用最多的api~
更多關(guān)于ElasticSearch整合SpringBoot的資料請關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何利用Java8 Stream API對Map按鍵或值排序
這篇文章主要給大家介紹了關(guān)于如何利用Java8 Stream API對Map按鍵或值排序的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者使用Java8具有一定的參考學(xué)習(xí)價值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11
play for scala 實現(xiàn)SessionFilter 過濾未登錄用戶跳轉(zhuǎn)到登錄頁面
這篇文章主要介紹了play for scala 實現(xiàn)SessionFilter 過濾未登錄用戶跳轉(zhuǎn)到登錄頁面的相關(guān)資料,需要的朋友可以參考下2016-11-11
關(guān)于Mybatis中foreach遍歷Map的實現(xiàn)示例
這篇文章主要介紹了關(guān)于Mybatis中foreach遍歷Map的實現(xiàn)示例,MyBatis?是一款優(yōu)秀的半自動的ORM持久層框架,它支持自定義?SQL、存儲過程以及高級映射,需要的朋友可以參考下2023-05-05
Springboot集成阿里云OSS上傳文件系統(tǒng)教程
這篇文章主要介紹了Springboot集成阿里云OSS上傳文件系統(tǒng)教程,通過詳細的圖文展示,代碼步驟的展示和文件配置信息,希望對你有所幫助2021-06-06
使用InputStream的available()能否用來判斷當前流是否讀取到文件
這篇文章主要介紹了使用InputStream的available()能否用來判斷當前流是否讀取到文件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06
Jenkins集成sonarQube實現(xiàn)代碼質(zhì)量檢查過程圖解
這篇文章主要介紹了Jenkins集成sonarQube實現(xiàn)代碼質(zhì)量檢查過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-09-09

