ElasticSearch整合SpringBoot搭建配置
前言
目前正在出一個(gè)Es專題
系列教程, 篇幅會(huì)較多, 請(qǐng)持續(xù)關(guān)注腳本之家
本節(jié)來(lái)給大家講一下在Springboot
中如何整合es
~
本文偏實(shí)戰(zhàn)一些,為了方便演示,本節(jié)示例沿用上節(jié)索引,好了, 廢話不多說(shuō)直接開整吧~
項(xiàng)目搭建
老規(guī)矩,先建maven
項(xiàng)目,下面是我的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
官方客戶端,建議大家盡量用官方的,因?yàn)殡S著es
的不斷升級(jí),很多api
都過(guò)時(shí)了,如果你使用spring-boot-starter-data-elasticsearch
這個(gè)要依賴社區(qū)去維護(hù),很多新特性你沒(méi)法使用到,也會(huì)存在安全性問(wèn)題。
配置客戶端
啟動(dòng)類:
@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; } }
然后客戶端我們就配好了,客戶端的配置其實(shí)還有很多,感興趣的同學(xué)自行查閱。后續(xù)使用的時(shí)候,直接導(dǎo)入RestHighLevelClient
實(shí)例就好了
接著啟動(dòng)它,如果控制沒(méi)有報(bào)錯(cuò),說(shuō)明配置沒(méi)啥問(wèn)題了, 記得要開啟es
服務(wù)~
索引API初探 & Index API
下面我們寫一點(diǎn)測(cè)試用例,來(lái)驗(yàn)證我們是否可以操作es
,為了方便演示,這里直接使用SpringBootTest
來(lái)測(cè)試,大家平時(shí)在寫springboot
項(xiàng)目,類測(cè)試的時(shí)候也可以這么做
ping
新建api.IndexApi
,調(diào)用ping()
方法來(lái)測(cè)試是否鏈接成功:
@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("鏈接失敗 !"); } } }
點(diǎn)擊IndexApi
左上角的綠色箭頭啟動(dòng)測(cè)試用例, 如果報(bào)錯(cuò),嘗試添加以下 注解
@RunWith(SpringRunner.class) @SpringBootTest(classes = { EsStudyApplication.class }) public class IndexApi {....}
返回:
鏈接成功
說(shuō)明客戶端
與es
服務(wù)端是通的
創(chuàng)建索引 & create
通過(guò)前面的學(xué)習(xí),有了一定的基礎(chǔ)之后,回到代碼中其實(shí)就是調(diào)調(diào)方法
,因?yàn)槟阒懒诉@個(gè)代碼的邏輯做了什么操作。下面來(lái)看下如何創(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)建,從而驗(yàn)證代碼執(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è)置請(qǐng)求超時(shí)時(shí)間:
// 請(qǐng)求設(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é)束語(yǔ)
下節(jié)帶大家看下文檔操作
相關(guān)的api
,也是我們業(yè)務(wù)中使用最多的api
~
更多關(guān)于ElasticSearch整合SpringBoot的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
如何利用Java8 Stream API對(duì)Map按鍵或值排序
這篇文章主要給大家介紹了關(guān)于如何利用Java8 Stream API對(duì)Map按鍵或值排序的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用Java8具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-11-11play for scala 實(shí)現(xiàn)SessionFilter 過(guò)濾未登錄用戶跳轉(zhuǎn)到登錄頁(yè)面
這篇文章主要介紹了play for scala 實(shí)現(xiàn)SessionFilter 過(guò)濾未登錄用戶跳轉(zhuǎn)到登錄頁(yè)面的相關(guān)資料,需要的朋友可以參考下2016-11-11關(guān)于Mybatis中foreach遍歷Map的實(shí)現(xiàn)示例
這篇文章主要介紹了關(guān)于Mybatis中foreach遍歷Map的實(shí)現(xiàn)示例,MyBatis?是一款優(yōu)秀的半自動(dòng)的ORM持久層框架,它支持自定義?SQL、存儲(chǔ)過(guò)程以及高級(jí)映射,需要的朋友可以參考下2023-05-05Springboot集成阿里云OSS上傳文件系統(tǒng)教程
這篇文章主要介紹了Springboot集成阿里云OSS上傳文件系統(tǒng)教程,通過(guò)詳細(xì)的圖文展示,代碼步驟的展示和文件配置信息,希望對(duì)你有所幫助2021-06-06使用InputStream的available()能否用來(lái)判斷當(dāng)前流是否讀取到文件
這篇文章主要介紹了使用InputStream的available()能否用來(lái)判斷當(dāng)前流是否讀取到文件問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-06-06Jenkins集成sonarQube實(shí)現(xiàn)代碼質(zhì)量檢查過(guò)程圖解
這篇文章主要介紹了Jenkins集成sonarQube實(shí)現(xiàn)代碼質(zhì)量檢查過(guò)程圖解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09