欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

ElasticSearch整合SpringBoot搭建配置

 更新時間:2023年02月22日 16:35:14   作者:程序員皮卡秋  
這篇文章主要為大家介紹了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 -&gt; {
                    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的資料請關注腳本之家其它相關文章!

相關文章

  • java實現(xiàn)貪吃蛇小游戲

    java實現(xiàn)貪吃蛇小游戲

    這篇文章主要為大家詳細介紹了java實現(xiàn)貪吃蛇小游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-07-07
  • Java編寫的實體返回VO工具

    Java編寫的實體返回VO工具

    VO(value object)通常用于業(yè)務層之間的數(shù)據傳遞,VO的屬性是根據當前業(yè)務的不同而不同的,也就是說,它的每一個屬性都一一對應當前業(yè)務邏輯所需要的數(shù)據的名稱。本文將介紹如何將實體轉換為vo對象
    2021-05-05
  • 如何利用Java8 Stream API對Map按鍵或值排序

    如何利用Java8 Stream API對Map按鍵或值排序

    這篇文章主要給大家介紹了關于如何利用Java8 Stream API對Map按鍵或值排序的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者使用Java8具有一定的參考學習價值,需要的朋友們下面來一起學習學習吧
    2019-11-11
  • Nacos負載均衡策略總結

    Nacos負載均衡策略總結

    Nacos 作為目前主流的微服務中間件,包含了兩個頂級的微服務功能:配置中心和注冊中心,本文給大家總結了幾種Nacos負載均衡策略,通過圖文結合介紹的非常詳細,需要的朋友可以參考下
    2023-11-11
  • play for scala 實現(xiàn)SessionFilter 過濾未登錄用戶跳轉到登錄頁面

    play 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中foreach遍歷Map的實現(xiàn)示例,MyBatis?是一款優(yōu)秀的半自動的ORM持久層框架,它支持自定義?SQL、存儲過程以及高級映射,需要的朋友可以參考下
    2023-05-05
  • Springboot集成阿里云OSS上傳文件系統(tǒng)教程

    Springboot集成阿里云OSS上傳文件系統(tǒng)教程

    這篇文章主要介紹了Springboot集成阿里云OSS上傳文件系統(tǒng)教程,通過詳細的圖文展示,代碼步驟的展示和文件配置信息,希望對你有所幫助
    2021-06-06
  • 詳解Java中類與對象的關系

    詳解Java中類與對象的關系

    這篇文章主要介紹了詳解Java中類與對象的關系,類的關鍵字是class,在Java編程里,類的作用相當于機械師手中的構造圖,如果沒有構造圖,就無法打造武器,同樣如果沒有類,就無法實例化,需要的朋友可以參考下
    2023-05-05
  • 使用InputStream的available()能否用來判斷當前流是否讀取到文件

    使用InputStream的available()能否用來判斷當前流是否讀取到文件

    這篇文章主要介紹了使用InputStream的available()能否用來判斷當前流是否讀取到文件問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Jenkins集成sonarQube實現(xiàn)代碼質量檢查過程圖解

    Jenkins集成sonarQube實現(xiàn)代碼質量檢查過程圖解

    這篇文章主要介紹了Jenkins集成sonarQube實現(xiàn)代碼質量檢查過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-09-09

最新評論