国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

springboot操作es

這篇具有很好參考價(jià)值的文章主要介紹了springboot操作es。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

創(chuàng)建springboot整合es項(xiàng)目

springboot操作es
springboot操作es
一定要修改對(duì)應(yīng)es版本
修改es版本,我的pom文件:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.5.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>springboot-es</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-es</name>
    <description>Demo project for Spring Boot</description>
    <properties>
        <java.version>1.8</java.version>
        <elasticsearch.version>7.6.1</elasticsearch.version>
    </properties>
    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-elasticsearch</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-configuration-processor</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>com.alibaba</groupId>
            <artifactId>fastjson</artifactId>
            <version>1.2.70</version>
        </dependency>
    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>

</project>
![在這里插入圖片描述](https://img-blog.csdnimg.cn/3320bdba0d3047f08aed981397603972.png)

記得把沒用文件刪掉.mvn,和一些mvn的配置文件,要不然可能會(huì)導(dǎo)致項(xiàng)目編譯不通過

配置HighLevelClient

注: 在ElasticSearch 7以后,Spring data建議采用High-level REST client。

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class ElasticSearchConfig {
    // 注冊(cè) rest高級(jí)客戶端 
    @Bean
    public RestHighLevelClient restHighLevelClient(){
        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(
                        new HttpHost("127.0.0.1",9200,"http")
                )
        );
        return client;
    }
}


索引增刪改查操作

在測(cè)試類進(jìn)行測(cè)試,測(cè)試類中直接注入restHighLevelClient即可使用;


@SpringBootTest
@RunWith(SpringJUnit4ClassRunner.class)  //使用junit4進(jìn)行測(cè)試
public class SpringbootEsApplicationTests {

    @Autowired
    public RestHighLevelClient restHighLevelClient;

    // 創(chuàng)建索引
    @Test
    public void createIndex() throws IOException {
        org.elasticsearch.client.indices.CreateIndexRequest yida = new org.elasticsearch.client.indices.CreateIndexRequest("yida");
        org.elasticsearch.client.indices.CreateIndexResponse createIndexResponse = restHighLevelClient.indices().create(yida, RequestOptions.DEFAULT);
        System.out.println(JSONObject.toJSONString(createIndexResponse));
        restHighLevelClient.close();
    }

    // 測(cè)試獲取索引,并判斷其是否存在
    @Test
    public void testIndexIsExists() throws IOException {
        GetIndexRequest request = new GetIndexRequest("yida");
        boolean exists = restHighLevelClient.indices().exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);// 索引是否存在
        restHighLevelClient.close();
    }

    // 刪除索引
    @Test
    public void testDeleteIndex() throws IOException {
        DeleteIndexRequest request = new DeleteIndexRequest("yida");
        AcknowledgedResponse response = restHighLevelClient.indices().delete(request, RequestOptions.DEFAULT);
        System.out.println(response.isAcknowledged());// 是否刪除成功
        restHighLevelClient.close();
    }

}

文檔的基本操作

文檔的增刪改查;

  // 測(cè)試添加文檔(先創(chuàng)建一個(gè)User實(shí)體類,添加fastjson依賴)
    @Test
    public void testAddDocument() throws IOException {
        // 創(chuàng)建一個(gè)User對(duì)象
        User yida = new User("yida", 18);
        // 創(chuàng)建請(qǐng)求
        IndexRequest request = new IndexRequest("yida");
        // 制定規(guī)則 PUT /yida_index/_doc/1
        request.id("1");// 設(shè)置文檔ID
        request.timeout(TimeValue.timeValueMillis(1000));// request.timeout("1s")
        // 將我們的數(shù)據(jù)放入請(qǐng)求中
        request.source(JSON.toJSONString(yida), XContentType.JSON);
        // 客戶端發(fā)送請(qǐng)求,獲取響應(yīng)的結(jié)果
        IndexResponse response = restHighLevelClient.index(request, RequestOptions.DEFAULT);
        System.out.println(response.status());// 獲取建立索引的狀態(tài)信息 CREATED
        System.out.println(response);// 查看返回內(nèi)容 IndexResponse[index=yida_index,type=_doc,id=1,version=1,result=created,seqNo=0,primaryTerm=1,shards={"total":2,"successful":1,"failed":0}]
    }

    // 獲取文檔,判斷是否存在 get /yida/_doc/1
    @Test
    public void testDocumentIsExists() throws IOException {
        GetRequest request = new GetRequest("yida", "1");
        // 不獲取返回的 _source的上下文了
        request.fetchSourceContext(new FetchSourceContext(false));
        request.storedFields("_none_");
        boolean exists = restHighLevelClient.exists(request, RequestOptions.DEFAULT);
        System.out.println(exists);
        restHighLevelClient.close();
    }



    // 測(cè)試更新文檔內(nèi)容
    @Test
    public void testUpdateDocument() throws IOException {
        UpdateRequest request = new UpdateRequest("yida", "1");
        User user = new User("doudou",11);
        request.doc(JSON.toJSONString(user),XContentType.JSON);
        UpdateResponse response = restHighLevelClient.update(request, RequestOptions.DEFAULT);
        System.out.println(response.status()); // OK
        restHighLevelClient.close();
    }

    // 測(cè)試刪除文檔
    @Test
    public void testDeleteDocument() throws IOException {
        DeleteRequest request = new DeleteRequest("yida", "1");
        request.timeout("1s");
        DeleteResponse response = restHighLevelClient.delete(request, RequestOptions.DEFAULT);
        System.out.println(response.status());// OK
    }

    // 測(cè)試獲得文檔信息
    @Test
    public void testGetDocument() throws IOException {
        GetRequest request = new GetRequest("yida","1");
        GetResponse response = restHighLevelClient.get(request, RequestOptions.DEFAULT);
        System.out.println(response.getSourceAsString());// 打印文檔內(nèi)容
        System.out.println(request);// 返回的全部?jī)?nèi)容和命令是一樣的
        restHighLevelClient.close();
    }

文檔的復(fù)雜查詢

  // 查詢
// SearchRequest 搜索請(qǐng)求
// SearchSourceBuilder 條件構(gòu)造
// HighlightBuilder 高亮
// TermQueryBuilder 精確查詢
// MatchAllQueryBuilder
// xxxQueryBuilder ...
    @Test
    public void testSearch() throws IOException {
        // 1.創(chuàng)建查詢請(qǐng)求對(duì)象
        SearchRequest searchRequest = new SearchRequest("yida");
        // 2.構(gòu)建搜索條件
        SearchSourceBuilder searchSourceBuilder = new SearchSourceBuilder();
        // (1)查詢條件 使用QueryBuilders工具類創(chuàng)建
        // 精確查詢
        TermQueryBuilder termQueryBuilder = QueryBuilders.termQuery("name", "張");
        //        // 匹配查詢
        //        MatchAllQueryBuilder matchAllQueryBuilder = QueryBuilders.matchAllQuery();
        // (2)其他<可有可無>:(可以參考 SearchSourceBuilder 的字段部分)
        // 設(shè)置高亮
        HighlightBuilder highlightBuilder = new HighlightBuilder();
        highlightBuilder = highlightBuilder.requireFieldMatch(false).field("*").preTags("<font color='red'>").postTags("</font>");
        searchSourceBuilder.highlighter(highlightBuilder);
        //        // 分頁
        //        searchSourceBuilder.from();
        //        searchSourceBuilder.size();
        searchSourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS));
        // (3)條件投入
        searchSourceBuilder.query(termQueryBuilder);
        // 3.添加條件到請(qǐng)求
        searchRequest.source(searchSourceBuilder);
        // 4.客戶端查詢請(qǐng)求
        SearchResponse search = restHighLevelClient.search(searchRequest, RequestOptions.DEFAULT);
        // 5.查看返回結(jié)果
        SearchHits hits = search.getHits();
        System.out.println(JSON.toJSONString(hits));
        System.out.println("=======================");

        for (SearchHit documentFields : hits.getHits()) {
            System.out.println(documentFields.getSourceAsMap());
            // 使用新的字段值(高亮),覆蓋舊的字段值
            Map<String, Object> sourceAsMap = documentFields.getSourceAsMap();
            // 高亮字段
            Map<String, HighlightField> highlightFields = documentFields.getHighlightFields();
            HighlightField name = highlightFields.get("name");
            // 替換
            if (name != null){
                Text[] fragments = name.fragments();
                StringBuilder new_name = new StringBuilder();
                for (Text text : fragments) {
                    new_name.append(text);
                }
                sourceAsMap.put("name",new_name.toString());
            }
            System.out.println("替換高亮的字段"+JSONObject.toJSON(sourceAsMap));
        }

    }

文檔的批量操作

bulk語法
bulk對(duì)JSON串的有著嚴(yán)格的要求。每個(gè)JSON串不能換行,只能放在同一行,同時(shí),相鄰的JSON串之間必須要有換行。bulk的每個(gè)操作必須要一對(duì)JSON串(delete語法除外)
例如若增加一個(gè)文檔如下所示:


## 批量操作

POST _bulk
{"create": {"_index": "yida", "_id": 11}}
{"name": "test_bulk", "age":"100"}

## 批量刪除
POST _bulk
{"delete": {"_index": "yida","_id": "1"}}
{"delete": {"_index": "yida","_id": "2"}}
{"delete": {"_index": "yida","_id": "3"}}
{"delete": {"_index": "yida","_id": "4"}}

## 可以又新增又刪除
POST _bulk
{"index": {"_index": "yida","_id": 11}}
{"name": "test_bulk", "age":"101"}
{"index": {"_index": "yida","_id": 12}}
{"name": "test_bulk", "age":"101"}
{"delete": {"_index": "yida","_id": "11"}}
{"delete": {"_index": "yida","_id": "12"}}

操作類型

  • create 如果文檔不存在就創(chuàng)建,但如果文檔存在就返回錯(cuò)誤
  • index 如果文檔不存在就創(chuàng)建,如果文檔存在就更新
  • update 更新一個(gè)文檔,如果文檔不存在就返回錯(cuò)誤
  • delete 刪除一個(gè)文檔,如果要?jiǎng)h除的文檔id不存在,就返回錯(cuò)誤
    從以上可以看出index是比較常用的,因?yàn)閎ulk操作失敗不會(huì)影響其他文檔操作,我們可以從他的返回結(jié)果中查看失敗的詳細(xì)原因。

對(duì)應(yīng)的代碼操作也是跟命令一樣:文章來源地址http://www.zghlxwxcb.cn/news/detail-485368.html

  // 批量插入數(shù)據(jù)
    @Test
    public void testBulkAdd() throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");
        ArrayList<User> users = new ArrayList<>();
        users.add(new User("張益達(dá)-1",1));
        users.add(new User("張益達(dá)-2",2));
        users.add(new User("張益達(dá)-3",3));
        users.add(new User("張益達(dá)-4",4));
        users.add(new User("張益達(dá)-5",5));
        users.add(new User("張益達(dá)-6",6));
        // 批量請(qǐng)求處理
        for (int i = 0; i < users.size(); i++) {
            bulkRequest.add(
                    // 這里是數(shù)據(jù)信息
                    new IndexRequest("yida")
                            .id(""+(i + 1)) // 沒有設(shè)置id 會(huì)自定生成一個(gè)隨機(jī)id
                            .source(JSON.toJSONString(users.get(i)),XContentType.JSON)
            );
        }
        BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulk.status());// ok
    }

    @Test
    public void testBulkUpdate() throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");
        ArrayList<User> users = new ArrayList<>();
        users.add(new User("張益達(dá)-1-update1",1));
        users.add(new User("張益達(dá)-2-update1",2));
        users.add(new User("張益達(dá)-3-update",3));
        users.add(new User("張益達(dá)-4-update",4));
        users.add(new User("張益達(dá)-5-update",5));
        users.add(new User("張益達(dá)-6-update",6));
        // 批量請(qǐng)求處理
        for (int i = 0; i < users.size(); i++) {

            Map map = JSON.parseObject(JSONObject.toJSONString(users.get(i)), Map.class);
            bulkRequest.add(
                    new UpdateRequest("yida", "" + (i + 1))
                            .doc(map)
                            // 不存在就插入
                            .upsert(JSON.toJSONString(users.get(i)),XContentType.JSON)
            );
        }
        BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulk.status());// ok
    }

    @Test
    public void testBulkDelete() throws IOException {
        BulkRequest bulkRequest = new BulkRequest();
        bulkRequest.timeout("10s");
        ArrayList<User> users = new ArrayList<>();
        users.add(new User("張益達(dá)-1",1));
        users.add(new User("張益達(dá)-2",2));
        users.add(new User("張益達(dá)-3",3));
        users.add(new User("張益達(dá)-4",4));
        users.add(new User("張益達(dá)-5",5));
        users.add(new User("張益達(dá)-6",6));
        // 批量請(qǐng)求處理
        for (int i = 0; i < users.size(); i++) {
            bulkRequest.add(
                    // 這里是數(shù)據(jù)信息
                    new DeleteRequest("yida")
                            .id("" + (i + 1))

            );
        }
        BulkResponse bulk = restHighLevelClient.bulk(bulkRequest, RequestOptions.DEFAULT);
        System.out.println(bulk.status());// ok
    }

到了這里,關(guān)于springboot操作es的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • SpringBoot項(xiàng)目整合RabbitMQ

    消息隊(duì)列(Message Queue)是分布式系統(tǒng)中常用的組件,它允許不同的應(yīng)用程序之間通過發(fā)送和接收消息進(jìn)行通信。Spring Boot提供了簡(jiǎn)單且強(qiáng)大的方式來整合消息隊(duì)列,其中包括RabbitMQ、ActiveMQ、Kafka等多種消息隊(duì)列實(shí)現(xiàn)。 本文將以RabbitMQ為例,詳細(xì)介紹如何使用Spring Boot來整合消

    2024年02月09日
    瀏覽(29)
  • Java操作RabbitMq并整合SpringBoot

    秋風(fēng)閣-北溪入江流 RabbitMq自帶有專門的管理界面,可以在其管理界面對(duì)RabbitMq進(jìn)行管理查看等操作。 RabbitMq的管理界面的對(duì)外端口為 15672 ,當(dāng)我們啟動(dòng)RabbitMq后,需要啟動(dòng)管理界面插件后才能訪問界面。 通過參數(shù)配置連接RabbitMq 通過amqp協(xié)議連接RabbitMq queueDeclarePassive: 創(chuàng)建或

    2024年02月16日
    瀏覽(26)
  • 【SpringBoot】整合Elasticsearch 操作索引及文檔

    【SpringBoot】整合Elasticsearch 操作索引及文檔

    官網(wǎng)操作文檔:Elasticsearch Clients | Elastic ????? ???????? 踩坑太多了。。。這里表明一下Spring Boot2.4以上版本可能會(huì)出現(xiàn)問題,所以我降到了2.2.1.RELEASE。對(duì)于現(xiàn)在2023年6月而言,Es版本已經(jīng)到了8.8,而SpringBoot版本已經(jīng)到了3.x版本。如果是高版本的Boot在配置類的時(shí)候會(huì)發(fā)現(xiàn)

    2024年02月09日
    瀏覽(57)
  • Shiro整合SpringBoot項(xiàng)目實(shí)戰(zhàn)

    Shiro整合SpringBoot項(xiàng)目實(shí)戰(zhàn)

    ?作者簡(jiǎn)介:2022年 博客新星 第八 。熱愛國(guó)學(xué)的Java后端開發(fā)者,修心和技術(shù)同步精進(jìn)。 ??個(gè)人主頁:Java Fans的博客 ??個(gè)人信條:不遷怒,不貳過。小知識(shí),大智慧。 ??當(dāng)前專欄:SpringBoot 框架從入門到精通 ?特色專欄:國(guó)學(xué)周更-心性養(yǎng)成之路 ??本文內(nèi)容:Shiro整合Sp

    2023年04月09日
    瀏覽(25)
  • 快速入門Springboot整合Datagpa操作數(shù)據(jù)庫(kù)

    快速入門Springboot整合Datagpa操作數(shù)據(jù)庫(kù)

    Spring Data JPA是Spring Data家族的一部分,可以輕松 實(shí)現(xiàn)基于JPA的存儲(chǔ)庫(kù) 。 . JPA是ORM規(guī)范,Hibernate是JPA規(guī)范的具體實(shí)現(xiàn) ,這樣的好處是開發(fā)者可以面向JPA規(guī)范進(jìn)行持久層的開發(fā),而底層的實(shí)現(xiàn)則是可以切換的。Spring Data Jpa則是在JPA之上添加另一層抽象(Repository層的實(shí)現(xiàn)),極大

    2024年02月07日
    瀏覽(23)
  • SpringBoot項(xiàng)目(支付寶整合)——springboot整合支付寶沙箱支付 & 從極簡(jiǎn)實(shí)現(xiàn)到IOC改進(jìn)

    SpringBoot項(xiàng)目(支付寶整合)——springboot整合支付寶沙箱支付 & 從極簡(jiǎn)實(shí)現(xiàn)到IOC改進(jìn)

    1.springboot整合支付寶沙箱支付; 2.準(zhǔn)備工作:沙箱api,內(nèi)網(wǎng)穿透; 3.極簡(jiǎn)實(shí)現(xiàn)理解支付,異步回調(diào)等; 4.按照spring依賴注入的思想改造基礎(chǔ)demo; https://gitee.com/pet365/springboot-alipay 支付寶開放平臺(tái) (alipay.com) 支付參數(shù) natapp.cn官網(wǎng) 啟動(dòng)和配置 訂單ID,需要唯一;價(jià)格;物品名稱(

    2024年02月11日
    瀏覽(25)
  • SpringBoot 整合ChatGPT API項(xiàng)目實(shí)戰(zhàn)

    SpringBoot 整合ChatGPT API項(xiàng)目實(shí)戰(zhàn)

    直接可以使用js+html開發(fā)一個(gè)對(duì)話,具體的源碼如下: 注意:需要替換自己的api-key,修改這一行代碼: xhr.setRequestHeader(“Authorization”, “Bearer API-KEY”)。

    2024年02月05日
    瀏覽(24)
  • SpringBoot 整合 ChatGPT API 項(xiàng)目實(shí)戰(zhàn)

    SpringBoot 整合 ChatGPT API 項(xiàng)目實(shí)戰(zhàn)

    SpringBoot 整合 ChatGPT API 項(xiàng)目實(shí)戰(zhàn) 一、準(zhǔn)備工作 二、補(bǔ)全接口示例 三、申請(qǐng)API-KEY 四、JavaScript調(diào)用API 五、SpringBoot使用ChatGPT API 體驗(yàn)到了ChatGPT的強(qiáng)大之后,那么我們會(huì)想,如果我們想基于ChatGPT開發(fā)一個(gè)自己的聊天機(jī)器人,這個(gè)能搞定嗎? ChatGPT平臺(tái)已經(jīng)為技術(shù)提供了一個(gè)入口

    2023年04月20日
    瀏覽(16)
  • SpringBoot整合Easy-ES操作演示文檔

    SpringBoot整合Easy-ES操作演示文檔

    1.1 官網(wǎng) Easy-ES官網(wǎng): https://www.easy-es.cn/ 官方示例: https://gitee.com/dromara/easy-es/tree/master/easy-es-sample 參考鏈接: https://blog.51cto.com/yueshushu/6193710 1.2 主要特性 **零侵入:**針對(duì)ES官方提供的RestHighLevelClient只做增強(qiáng)不做改變,引入EE不會(huì)對(duì)現(xiàn)有工程產(chǎn)生影響,使用體驗(yàn)如絲般順滑。 *

    2024年02月07日
    瀏覽(17)
  • springboot3整合elasticsearch8.7.0實(shí)現(xiàn)為bean對(duì)象創(chuàng)建索引添加映射

    springboot3整合elasticsearch8.7.0實(shí)現(xiàn)為bean對(duì)象創(chuàng)建索引添加映射

    目錄 準(zhǔn)備工作 添加相關(guān)依賴 在yml中配置elasticsearch 主要內(nèi)容 實(shí)體類 ElasticSearch配置類 測(cè)試 確認(rèn)當(dāng)前沒有counter索引 啟動(dòng)spring 再次查詢counter索引? 在測(cè)試類中輸出counter索引的映射 官方文檔 要注意版本對(duì)應(yīng)關(guān)系 spring官方文檔中有版本對(duì)照表 目前我使用的都是最新的版本,

    2024年02月03日
    瀏覽(20)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包