ElasticSearch整合SpringBoot搭建配置
前言
目前正在出一個Es專題
系列教程, 篇幅會較多, 請持續(xù)關注腳本之家
本節(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; } }
然后客戶端我們就配好了,客戶端的配置其實還有很多,感興趣的同學自行查閱。后續(xù)使用的時候,直接導入RestHighLevelClient
實例就好了
接著啟動它,如果控制沒有報錯,說明配置沒啥問題了, 記得要開啟es
服務~
索引API初探 & Index API
下面我們寫一點測試用例,來驗證我們是否可以操作es
,為了方便演示,這里直接使用SpringBootTest
來測試,大家平時在寫springboot
項目,類測試的時候也可以這么做
ping
新建api.IndexApi
,調用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
服務端是通的
創(chuàng)建索引 & create
通過前面的學習,有了一定的基礎之后,回到代碼中其實就是調調方法
,因為你知道了這個代碼的邏輯做了什么操作。下面來看下如何創(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"));
索引設置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);
設置請求超時時間:
// 請求設置 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é)帶大家看下文檔操作
相關的api
,也是我們業(yè)務中使用最多的api
~
更多關于ElasticSearch整合SpringBoot的資料請關注腳本之家其它相關文章!
相關文章
如何利用Java8 Stream API對Map按鍵或值排序
這篇文章主要給大家介紹了關于如何利用Java8 Stream API對Map按鍵或值排序的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Java8具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧2019-11-11play for scala 實現(xiàn)SessionFilter 過濾未登錄用戶跳轉到登錄頁面
這篇文章主要介紹了play for scala 實現(xiàn)SessionFilter 過濾未登錄用戶跳轉到登錄頁面的相關資料,需要的朋友可以參考下2016-11-11關于Mybatis中foreach遍歷Map的實現(xiàn)示例
這篇文章主要介紹了關于Mybatis中foreach遍歷Map的實現(xiàn)示例,MyBatis?是一款優(yōu)秀的半自動的ORM持久層框架,它支持自定義?SQL、存儲過程以及高級映射,需要的朋友可以參考下2023-05-05Springboot集成阿里云OSS上傳文件系統(tǒng)教程
這篇文章主要介紹了Springboot集成阿里云OSS上傳文件系統(tǒng)教程,通過詳細的圖文展示,代碼步驟的展示和文件配置信息,希望對你有所幫助2021-06-06使用InputStream的available()能否用來判斷當前流是否讀取到文件
這篇文章主要介紹了使用InputStream的available()能否用來判斷當前流是否讀取到文件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2023-06-06Jenkins集成sonarQube實現(xiàn)代碼質量檢查過程圖解
這篇文章主要介紹了Jenkins集成sonarQube實現(xiàn)代碼質量檢查過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-09-09