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

ElasticSearch整合SpringBoot搭建配置

 更新時(shí)間:2023年02月22日 16:35:14   作者:程序員皮卡秋  
這篇文章主要為大家介紹了ElasticSearch整合SpringBoot搭建配置詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪

前言

目前正在出一個(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 -&gt; {
                    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)文章

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

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

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

    Java編寫的實(shí)體返回VO工具

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

    如何利用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-11
  • Nacos負(fù)載均衡策略總結(jié)

    Nacos負(fù)載均衡策略總結(jié)

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

    play 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)示例

    這篇文章主要介紹了關(guān)于Mybatis中foreach遍歷Map的實(shí)現(xiàn)示例,MyBatis?是一款優(yōu)秀的半自動(dòng)的ORM持久層框架,它支持自定義?SQL、存儲(chǔ)過(guò)程以及高級(jí)映射,需要的朋友可以參考下
    2023-05-05
  • Springboot集成阿里云OSS上傳文件系統(tǒng)教程

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

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

    詳解Java中類與對(duì)象的關(guān)系

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

    使用InputStream的available()能否用來(lái)判斷當(dāng)前流是否讀取到文件

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

    Jenkins集成sonarQube實(shí)現(xiàn)代碼質(zhì)量檢查過(guò)程圖解

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

最新評(píng)論