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

ElasticSearch 7.x 版本使用 BulkProcessor 實(shí)現(xiàn)批量添加數(shù)據(jù)

這篇具有很好參考價值的文章主要介紹了ElasticSearch 7.x 版本使用 BulkProcessor 實(shí)現(xiàn)批量添加數(shù)據(jù)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

ElasticSearch

1、ElasticSearch學(xué)習(xí)隨筆之基礎(chǔ)介紹
2、ElasticSearch學(xué)習(xí)隨筆之簡單操作
3、ElasticSearch學(xué)習(xí)隨筆之java api 操作
4、ElasticSearch學(xué)習(xí)隨筆之SpringBoot Starter 操作
5、ElasticSearch學(xué)習(xí)隨筆之嵌套操作
6、ElasticSearch學(xué)習(xí)隨筆之分詞算法
7、ElasticSearch學(xué)習(xí)隨筆之高級檢索
8、ELK技術(shù)棧介紹
9、Logstash部署與使用
10、ElasticSearch 7.x 版本使用 BulkProcessor 實(shí)現(xiàn)批量添加數(shù)據(jù)
11、ElasticSearch 8.x 棄用了 High Level REST Client,移除了 Java Transport Client,推薦使用 Elasticsearch Java API
12、ElasticSearch 8.x 使用 snapshot(快照)進(jìn)行數(shù)據(jù)遷移
13、ElasticSearch 8.x 版本如何使用 SearchRequestBuilder 檢索

ElasticSearch,創(chuàng)始人 Shay Banon(謝巴農(nóng))



前言

本文主要應(yīng)用 Rest High Level Client 來進(jìn)行對 ElasticSearch 進(jìn)行操作,雖說官方已經(jīng)不推薦,但是 ES 升級帶來的代價也是相當(dāng)大的,所以,此處略去一萬字。

  • 那什么是 BulkProcessor 呢?
    BulkProcessorElasticSearch 客戶端中的一個功能,用于批量執(zhí)行索引、更新或刪除操作,BulkProcessor 運(yùn)行將多個操作打包成一個請求進(jìn)行發(fā)送,以提高效率和性能。

批量操作索引的好處:

  • 性能優(yōu)勢:將多個操作打包成一個請求,這樣可以減少網(wǎng)絡(luò)開銷,提高數(shù)據(jù)傳輸效率,從而可以加快數(shù)據(jù)寫入索引速度。
  • 減少開銷:較少的網(wǎng)絡(luò)開銷和較少的服務(wù)器的交互,減少服務(wù)器開銷,尤其是大規(guī)模寫入數(shù)據(jù)時。
  • 原子性:批量操作可以保證一組操作要么全部成功,要么全部失敗,報(bào)錯數(shù)據(jù)的一致性。
  • 減少開發(fā)成本:批量操作,可以簡化客戶端代碼,減少請求和管理連接的操作。

當(dāng)然,批量操作也是有缺點(diǎn)的:

  • 內(nèi)存消耗:在執(zhí)行批量操作時,首先會將數(shù)據(jù)寫入內(nèi)存,這樣會消耗更多的內(nèi)存。
  • 錯誤處理復(fù)雜性:單條數(shù)據(jù)上傳,如果出錯可以重試或者進(jìn)行記錄操作等,但是批量操作中的某個請求失敗,需要額外來處理,比單條操作復(fù)雜。
  • 延遲響應(yīng):批量操作可能導(dǎo)致請求排隊(duì)等待,會產(chǎn)生一些延遲。

多余的不說,來上代碼。

一:引入 pom

首先引入客戶端依賴,我的測試 ES 服務(wù)是 8.7.0 版本的,這里對應(yīng) High Level REST Client 客戶端 7.3.2 版本的。

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>7.3.2</version>
</dependency>

之所以不用更高版本,是因?yàn)榘姹靖吡藭?bào)如下錯誤:

java.io.IOException: Unable to parse response body for Response{requestLine=POST /devintcompany@1562219164186/_doc?timeout=1m HTTP/1.1, host=http://192.168.*。*:9200, response=HTTP/1.1 201 Created}
	at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1473)
	at org.elasticsearch.client.RestHighLevelClient.performRequest(RestHighLevelClient.java:1424)
	at org.elasticsearch.client.RestHighLevelClient.performRequestAndParseEntity(RestHighLevelClient.java:1394)
	at org.elasticsearch.client.RestHighLevelClient.index(RestHighLevelClient.java:836)
	at com.example.es.EsTest.addIndex(EsTest.java:97)
	at com.example.es.EsTest.main(EsTest.java:36)
Caused by: java.lang.NullPointerException
	at java.util.Objects.requireNonNull(Objects.java:203)
	at org.elasticsearch.action.DocWriteResponse.<init>(DocWriteResponse.java:127)
	at org.elasticsearch.action.index.IndexResponse.<init>(IndexResponse.java:50)
	at org.elasticsearch.action.index.IndexResponse.<init>(IndexResponse.java:39)
	at org.elasticsearch.action.index.IndexResponse$Builder.build(IndexResponse.java:103)
	at org.elasticsearch.action.index.IndexResponse.fromXContent(IndexResponse.java:85)
	at org.elasticsearch.client.RestHighLevelClient.parseEntity(RestHighLevelClient.java:1727)
	at org.elasticsearch.client.RestHighLevelClient.lambda$performRequestAndParseEntity$8(RestHighLevelClient.java:1395)
	at org.elasticsearch.client.RestHighLevelClient.internalPerformRequest(RestHighLevelClient.java:1471)
	... 5 more

親自測試過的,應(yīng)該還是版本不兼容的緣故,但是數(shù)據(jù)已經(jīng)插入到 Index 了,就很奇怪。

二:創(chuàng)建 ES Client

這里初始化客戶端,需要用戶名密碼進(jìn)行認(rèn)證的。

private static RestHighLevelClient createClient(){
    String hostname = "192.168.*.*";
    int port = 9200;
    final CredentialsProvider credentialsProvider = new BasicCredentialsProvider();
    credentialsProvider.setCredentials(AuthScope.ANY, new UsernamePasswordCredentials("your username", "your password"));
    RestClientBuilder restClientBuilder = RestClient.builder(new HttpHost(hostname, port))
            .setHttpClientConfigCallback(httpAsyncClientBuilder -> httpAsyncClientBuilder.setDefaultCredentialsProvider(credentialsProvider));
    return new RestHighLevelClient(restClientBuilder);
}

三:創(chuàng)建 BulkProcessor

這里創(chuàng)建 BulkProcessor 批量操作對象,通過 High Level REST Client 來綁定,加入監(jiān)聽器 BulkProcessor.Listener,如果批量操作失敗或發(fā)生異常,在 afterBulk() 方法中處理。
批量處理需要設(shè)置的參數(shù)代碼中已有注釋,一般就設(shè)置這些參數(shù)就可以了,可根據(jù)自己的使用場景進(jìn)行調(diào)節(jié)。

public static BulkProcessor getBulkProcessor(RestHighLevelClient client) {
    BulkProcessor.Listener listener = new BulkProcessor.Listener() {
        @Override
        public void beforeBulk(long executionId, BulkRequest request) {
            System.out.println("開始執(zhí)行批量操作,ID: " + executionId);
        }

        @Override
        public void afterBulk(long executionId, BulkRequest request, BulkResponse response) {
            if (response.hasFailures()) {
                System.out.println("批量操作完成,ID: " + executionId);
            }
        }

        @Override
        public void afterBulk(long executionId, BulkRequest request, Throwable failure) {
            System.out.println("批量操作失敗,ID: " + executionId);
            failure.printStackTrace();
        }
    };
    BulkProcessor.Builder builder = BulkProcessor.builder(((bulkRequest, bulkResponseActionListener) -> {
        bulkRequest.setRefreshPolicy(WriteRequest.RefreshPolicy.IMMEDIATE);
        bulkRequest.timeout(TimeValue.timeValueSeconds(100));
        client.bulkAsync(bulkRequest, RequestOptions.DEFAULT, bulkResponseActionListener);
    }), listener);
    // 當(dāng)達(dá)到1000個操作時觸發(fā)批量請求
    builder.setBulkActions(1000);
    // 當(dāng)達(dá)到5MB大小時觸發(fā)批量請求
    builder.setBulkSize(new ByteSizeValue(1, ByteSizeUnit.MB));
    // 每5秒觸發(fā)一次批量請求,無論大小和操作數(shù)如何
    builder.setFlushInterval(TimeValue.timeValueSeconds(5));
    // 設(shè)置退避策略,以防服務(wù)器過載或拒絕請求
    builder.setBackoffPolicy(BackoffPolicy.exponentialBackoff(TimeValue.timeValueMillis(1000), 3));
    // 設(shè)置并發(fā)請求的數(shù)量為1,即同時只有一個批量請求在執(zhí)行
    builder.setConcurrentRequests(1);
    return builder.build();
}

四:批量推數(shù)據(jù)

我們在 main 方法中進(jìn)行測試,代碼如下:文章來源地址http://www.zghlxwxcb.cn/news/detail-795879.html

public static void main(String[] args) throws IOException {
    RestHighLevelClient client = createClient();
    BulkProcessor bulkProcessor = getBulkProcessor(client);
    for (int i = 0; i < 10; i++) {
        String source = "{\"ApplianceType\":[{\"ApplianceTypeCn\":\"國產(chǎn)\",\"ApplianceTypeEn\":\"Domestic\",\"ApplianceTypeId\":\"1\"}],\"ApplicationCount\":0,\"ClassICount\":17,\"ClassIICount\":1,\"ClassIIICount\":0,\"Classification\":[{\"Cn\":\"2002版分類\",\"En\":\"2002 reg. category of relevant app.\",\"Id\":\"Class2002\",\"Items\":[{\"Cn\":\"Ⅰ類\",\"En\":\"Class Ⅰ\",\"Id\":\"1\",\"Id2\":\"I\",\"Items\":[{\"Cn\":\"進(jìn)口第一類醫(yī)療器械(含第一類體外診斷試劑)備案信息\",\"En\":\"Information on imported ClassⅠmedical devices (including ClassⅠ IVD reagents)\",\"Id\":\"100\"}]},{\"Cn\":\"Ⅱ類\",\"En\":\"Class Ⅱ\",\"Id\":\"2\",\"Id2\":\"II\",\"Items\":[{\"Cn\":\"婦產(chǎn)科、輔助生殖和避孕器械\",\"En\":\"Obstetrics and gynecology, assisted reproductive and contraceptive devices\",\"Id\":\"201818\"}]}]},{\"Class1Code\":[{\"Id\":\"02\"}],\"Class2Code\":[{\"Id\":\"03\"}],\"DataType\":[{\"Id\":\"1\"},{\"Id\":\"3\"}],\"ProductClassificationCode\":[{\"Id\":\"09\"}],\"ProductClassificationNameCode\":[]}],\"Company\":{\"Cn\":\"海南創(chuàng)鑫醫(yī)藥科技發(fā)展有限公司\",\"En\":\"Hainan Chuangxin Pharmaceutical Technology Development Co. Ltd.\",\"Id\":\"1000002388\"},\"CompanyAliasCn\":[\"海南創(chuàng)鑫醫(yī)藥科技發(fā)展有限公司\"],\"CompanyAliasEn\":[\"Hainan Chuangxin Pharmaceutical Technology Development Co. Ltd.\"],\"CompanyCn\":\"海南創(chuàng)鑫醫(yī)藥科技發(fā)展有限公司\",\"CompanyCnSearch\":\"海南創(chuàng)鑫醫(yī)藥科技發(fā)展有限公司\",\"CompanyEn\":\"Hainan Chuangxin Pharmaceutical Technology Development Co. Ltd.\",\"CompanyEnSearch\":\"Hainan Chuangxin Pharmaceutical Technology Development Co. Ltd.\",\"CompanyId\":\"1000002388\",\"CompanyType\":{\"Cn\":\"國內(nèi)公司\",\"En\":\"Domestic company\",\"Id\":\"Domestic company\"},\"CompanyTypeCn\":\"國內(nèi)公司\",\"CompanyTypeEn\":\"Domestic company\",\"CompanyTypeId\":\"Domestic company\",\"DomesticCount\":18,\"EffectiveRegistrationCount\":18,\"FirstApplicationYear\":null,\"FirstRegistrationYear\":\"2017\",\"IVD\":\"0\",\"ImportCount\":0,\"LatestApplicationYear\":null,\"LatestRegistrationYear\":\"2020\",\"Listing\":{\"Cn\":null,\"En\":null,\"Id\":null},\"ListingCn\":null,\"ListingEn\":null,\"ListingId\":null,\"TotalCount\":18,\"company_registration_relation\":{\"name\":\"company\"},\"website_url\":\"\"}";
        bulkProcessor.add(new IndexRequest("devintcompany@1562219164186").source(source, XContentType.JSON));
        System.out.println("添加第 " + i + "條數(shù)據(jù)!");
    }
    try {
        bulkProcessor.awaitClose(10, TimeUnit.MINUTES);
        client.close();
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    System.out.println("添加完成!");
}

到了這里,關(guān)于ElasticSearch 7.x 版本使用 BulkProcessor 實(shí)現(xiàn)批量添加數(shù)據(jù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • 使用Elasticsearch進(jìn)行數(shù)據(jù)批量操作

    Elasticsearch是一個開源的搜索和分析引擎,基于Lucene庫開發(fā)。它可以用來實(shí)現(xiàn)文本搜索、數(shù)據(jù)分析、實(shí)時數(shù)據(jù)處理等功能。在大數(shù)據(jù)時代,Elasticsearch成為了處理和分析大量數(shù)據(jù)的首選工具之一。 數(shù)據(jù)批量操作是Elasticsearch中的一種常見操作,它可以用來對大量數(shù)據(jù)進(jìn)行創(chuàng)建、更

    2024年02月22日
    瀏覽(32)
  • ElasticSearch(7.8版本)聚合查詢使用javaHighLevelRestClient實(shí)現(xiàn)(從MySQL聚合查詢概念->ES聚合概念及實(shí)操)

    申明:本文是在實(shí)現(xiàn)ES聚合功能中,將過程中查找的多篇博客文獻(xiàn)拼接在一起,參考到的博文全部在標(biāo)題中附上了原文的超鏈接,分享出來僅是為了提做一個筆記以防忘記,并給大家提供一個參考。 聚合操作指的是在數(shù)據(jù)查找基礎(chǔ)上對于數(shù)據(jù)進(jìn)一步整理篩選行為,聚合操作也

    2023年04月24日
    瀏覽(33)
  • Elasticsearch 8.X 如何優(yōu)雅的實(shí)現(xiàn)字段名稱批量修改?

    Elasticsearch 8.X 如何優(yōu)雅的實(shí)現(xiàn)字段名稱批量修改?

    寫入es前,數(shù)據(jù)格式如下 需求:單純用pipeline可不可以實(shí)現(xiàn),如果寫入key包含json_提換為空,包含tmp提換為core,因?yàn)閗ey字段有很多不考慮窮舉,最終效果要如下: ——問題來源:死磕Elasticsearch知識星球 https://t.zsxq.com/0bzWL3w1X Elasticsearch mapping 一旦創(chuàng)建是不允許修改的!允許更

    2023年04月09日
    瀏覽(28)
  • SpringBoot + ElasticSearch8.4.3 實(shí)現(xiàn)簡單CRUD、批量操作
  • SpringBoot 整合ElasticSearch實(shí)現(xiàn)模糊查詢,批量CRUD,排序,分頁,高亮

    SpringBoot 整合ElasticSearch實(shí)現(xiàn)模糊查詢,批量CRUD,排序,分頁,高亮

    準(zhǔn)備一個空的SpringBoot項(xiàng)目 寫入依賴 注意你的SpringBoot和你的es版本,一定要對應(yīng),如果不知道的可以查看這篇文章:https://blog.csdn.net/u014641168/article/details/130386872 我的版本是2.2.6,所以用的ES版本是 6.8.12,安裝es請看這篇文章:https://blog.csdn.net/u014641168/article/details/130622430 查看

    2024年02月08日
    瀏覽(40)
  • elasticsearch-JAVA-使用UpdateByQueryRequest進(jìn)行條件批量修改

    最近項(xiàng)目中用到了 es 搜索引擎 ,需求用到了 根據(jù)條件修改es 的字段數(shù)據(jù) ,網(wǎng)上查了很久 很多都是 查詢出要修改的id 然后再根據(jù)id 進(jìn)行單個修改 這樣太費(fèi)事了 又看了看 es 是有批量修改的語法的 Java api 就這樣寫 這樣寫 應(yīng)該是有些缺陷的 但最總也實(shí)現(xiàn)了 類似于 sql 的 UPDA

    2024年02月11日
    瀏覽(21)
  • 最新ThinkPHP版本實(shí)現(xiàn)證書查詢系統(tǒng),實(shí)現(xiàn)批量數(shù)據(jù)導(dǎo)入,自動生成電子證書

    最新ThinkPHP版本實(shí)現(xiàn)證書查詢系統(tǒng),實(shí)現(xiàn)批量數(shù)據(jù)導(dǎo)入,自動生成電子證書

    前提:朋友弄了一個培訓(xùn)機(jī)構(gòu),培訓(xùn)考試合格后,給發(fā)證書,需要一個證書查詢系統(tǒng)。委托我給弄一個,花了幾個晚上給寫的證書查詢系統(tǒng)。 實(shí)現(xiàn)功能: 前端按照姓名+手機(jī)號碼進(jìn)行證書查詢 證書信息展示+證書展示,支持點(diǎn)擊下載 后端證書信息錄入+帶一寸照片數(shù)據(jù)批量導(dǎo)入

    2024年01月23日
    瀏覽(22)
  • Python圖像處理實(shí)戰(zhàn):使用PIL庫批量添加水印的完整指南【第27篇—python:Seaborn】

    Python圖像處理實(shí)戰(zhàn):使用PIL庫批量添加水印的完整指南【第27篇—python:Seaborn】

    在日常圖像處理中,為圖片添加水印是一項(xiàng)常見任務(wù)。有多種方法和工具可供選擇,而今天我們將專注于使用Python語言結(jié)合PIL庫批量添加水印。 需要注意的是,所選用的圖片格式不應(yīng)為JPG或JPEG,因?yàn)檫@兩種格式的圖片不支持透明度設(shè)置。 先前的文章已經(jīng)詳細(xì)介紹過PIL庫,這

    2024年01月16日
    瀏覽(53)
  • Spring Boot 集成 ElasticSearch:實(shí)現(xiàn)模糊查詢、批量 CRUD、排序、分頁和高亮功能

    Spring Boot 集成 ElasticSearch:實(shí)現(xiàn)模糊查詢、批量 CRUD、排序、分頁和高亮功能

    文章來源:https://blog.csdn.net/qq_52355487/article/details/123805713 在pom.xml里加入如下依賴 非常重要:檢查依賴版本是否與你當(dāng)前所用的版本是否一致,如果不一致,會連接失?。?1.創(chuàng)建、判斷存在、刪除索引 2.對文檔的CRUD 創(chuàng)建文檔: 注意:如果添加時不指定文檔ID,他就會隨機(jī)生成

    2024年02月04日
    瀏覽(26)
  • vue實(shí)現(xiàn)動態(tài)路由添加(簡單無廢話版本)

    最近練習(xí)vue的項(xiàng)目,有關(guān)于后臺管理系統(tǒng)的動態(tài)添加路由部分,根據(jù)思路實(shí)現(xiàn)了基本的功能,在這里記錄一下,等后面學(xué)習(xí)后在進(jìn)行優(yōu)化。 這里只是記錄我個人最后實(shí)現(xiàn)的思路,本人由于是初學(xué)者,可能思路和代碼有不正確地方,還求多見諒。也請能不吝賜教,一同進(jìn)步。 我

    2023年04月08日
    瀏覽(21)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包