如何增加 Elasticsearch 中的 primary shard 數量

作者:來自 Elastic?Kofi Bartlett

探索增加 Elasticsearch 中 primary shard 數量的方法。

更多閱讀:

  • Elasticsearch:Split index API - 把一個大的索引分拆成更多分片

  • Elasticsearch:通過 shrink API 減少 shard 數量來縮小 Elasticsearch 索引

  • Elasticsearch: Reindex 接口

無法增加已有索引的 primary shard 數量,這意味著如果你想增加 primary shard 數量,必須重新創建索引。在這種情況下通常有兩種方法可用: _reindex API 和 _split API。

_split API 通常比 _reindex API 更快。在執行這兩種操作之前必須停止寫入索引,否則 source_index 和 target_index 的文檔數量會不一致。

方法 1?– 使用 split API

split API 用于通過復制現有索引的設置和映射,創建一個具有所需 primary shard 數量的新索引。可以在創建過程中設置所需的 primary shard 數量。在使用 split API 之前應檢查以下設置:

  • 源索引必須是只讀的。這意味著需要停止寫入過程。

  • 目標索引的 primary shard 數量必須是源索引 primary shard 數量的倍數。例如,如果源索引有 5 個 primary shard,目標索引可以設置為 10、15、20 等。

注意:如果只需要更改 primary shard 數量,建議使用 split API,因為它比 Reindex API 快得多。

實現 split API

創建一個測試索引:

POST test_split_source/_doc
{"test": "test"
}

我們可以使用如下的命令來查看這個索引的設置:

GET test_split_source/_settings
{"test_split_source": {"settings": {"index": {"routing": {"allocation": {"include": {"_tier_preference": "data_content"}}},"number_of_shards": "1","provided_name": "test_split_source","creation_date": "1744934104333","number_of_replicas": "1","uuid": "Ixn7Y6gdTaOnuW9x9AbEjg","version": {"created": "9009000"}}}}
}

我們可以看到 number_of_shards 為 1。

源索引必須是只讀的才能進行 split:

PUT test_split_source/_settings
{"index.blocks.write": true
}

設置和映射會自動從源索引復制:

POST /test_split_source/_split/test_split_target
{"settings": {"index.number_of_shards": 3}
}

在上面,我們可以看到 number_of_shards 是 3。它是我們之前的 1 的整數倍。

你可以使用以下命令檢查進度:

GET _cat/recovery/test_split_target?v&h=index,shard,time,stage,files_percent,files_total

由于設置和映射是從源索引復制的,目標索引是只讀的。現在讓我們為目標索引啟用寫入操作:

PUT test_split_target/_settings
{"index.blocks.write": null
}

在刪除原始索引之前,檢查源索引和目標索引的 docs.count:

GET _cat/indices/test_split*?v&h=index,pri,rep,docs.count

索引名稱和別名名稱不能相同。你需要刪除源索引,并將源索引名稱作為別名添加到目標索引:

DELETE test_split_source
PUT /test_split_target/_alias/test_split_source

在將 test_split_source 別名添加到 test_split_target 索引后,你應該使用以下命令進行測試:

GET test_split_source
POST test_split_source/_doc
{"test": "test"
}

方法 2?– 使用 reindex API

通過使用 Reindex API 創建新索引,可以設置任何數量的 primary shard 數量。在使用所需的 primary shard 數量創建新索引后,源索引中的所有數據可以重新索引到該新索引。

除了 split API 的功能外,還可以使用 reindex API 中的 ingest_pipeline 對數據進行處理。通過 ingest_pipeline,只有符合篩選條件的指定字段會使用查詢索引到目標索引中。數據內容可以通過 painless 腳本進行修改,并且可以將多個索引合并為一個索引。

實現 reindex API

創建一個測試 reindex:

POST test_reindex_source/_doc
{"test": "test"
}

從源索引復制設置和映射:

GET test_reindex_source

使用設置、映射和所需的 shard 數量創建目標索引:

PUT test_reindex_target
{"mappings" : {},"settings": {"number_of_shards": 10,"number_of_replicas": 0,"refresh_interval": -1}
}

*注意:設置 number_of_replicas: 0 和 refresh_interval: -1 將提高 reindex 速度。

啟動 reindex 過程。設置 requests_per_second=-1 和 slices=auto 將調整 reindex 速度。

POST _reindex?requests_per_second=-1&slices=auto&wait_for_completion=false
{"source": {"index": "test_reindex_source"},"dest": {"index": "test_reindex_target"}
}

當你運行 reindex API 時,系統會顯示 task_id。復制該 task_id 并使用 _tasks API 檢查進度:

GET _tasks/<task_id>

在 reindex 完成后,更新設置:

PUT test_reindex_target/_settings
{"number_of_replicas": 1,"refresh_interval": "1s"
}

在刪除原始索引之前,檢查源索引和目標索引的 docs.count,應該是相同的:

GET _cat/indices/test_reindex_*?v&h=index,pri,rep,docs.count

索引名稱和別名名稱不能相同。刪除源索引,并將源索引名稱作為別名添加到目標索引:

DELETE test_reindex_source
PUT /test_reindex_target/_alias/test_reindex_source

在將 test_split_source 別名添加到 test_split_target 索引后,使用以下命令進行測試:

GET test_reindex_source

總結

如果你想增加已有索引的 primary shard 數量,需要將設置和映射重新創建到一個新索引中。實現這一點有兩種主要方法:reindex API 和 split API。在使用這兩種方法之前,必須停止當前的索引操作。

想獲得 Elastic 認證嗎?了解下一期 Elasticsearch 工程師培訓的時間!

Elasticsearch 擁有許多新特性,幫助你為你的用例構建最佳的搜索解決方案。深入了解我們的示例筆記本,開始免費的云試用,或現在就嘗試在本地機器上使用 Elastic。

原文:How to increase primary shard count in Elasticsearch - Elasticsearch Labs

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/76690.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/76690.shtml
英文地址,請注明出處:http://en.pswp.cn/web/76690.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

基于SA模擬退火算法的車間調度優化matlab仿真,輸出甘特圖和優化收斂曲線

目錄 1.程序功能描述 2.測試軟件版本以及運行結果展示 3.核心程序 4.本算法原理 5.完整程序 1.程序功能描述 基于SA模擬退火算法的車間調度優化matlab仿真,輸出甘特圖和優化收斂曲線。輸出指標包括最小平均流動時間&#xff0c;最大完工時間&#xff0c;最小間隙時間。 2…

Spring_MVC 快速入門指南

Spring_MVC 快速入門指南 一、Spring_MVC 簡介 1. 什么是 Spring_MVC&#xff1f; Spring_MVC 是 Spring 框架的一個模塊&#xff0c;用于構建 Web 應用程序。它基于 MVC&#xff08;Model-View-Controller&#xff09;設計模式&#xff0c;將應用程序分為模型&#xff08;M…

爬蟲獲取sku信息需要哪些庫

在使用 Python 爬蟲獲取淘寶商品的 SKU 詳細信息時&#xff0c;通常需要以下幾種庫來完成任務。這些庫各有其用途&#xff0c;可以幫助你更高效地實現爬蟲功能。 1. requests 用途&#xff1a;用于發送 HTTP 請求&#xff0c;獲取網頁內容。 安裝&#xff1a; bash pip insta…

賽靈思Xilinx FPGa XCKU15P?2FFVA1156I AMD Kintex UltraScale+

XCKU15P?2FFVA1156I 是 AMD Kintex UltraScale 系列中的高性能 FPGA&#xff0c;基于 16 nm FinFET UltraScale 架構 制造&#xff0c;兼顧卓越的性能與功耗比&#xff0c;該器件集成 1,143,450 個邏輯單元和 82,329,600 位片上 RAM&#xff0c;配備 1,968 個 DSP 切片&#…

從規則到大模型:知識圖譜信息抽取實體NER與關系RE任務近10年演進發展詳解

摘要: 本文回顧了關系抽取與實體抽取領域的經典與新興模型,清晰地梳理了它們的出現時間與核心創新,并給出在 2025 年不同資源與場景下的最佳實踐推薦。文章引用了 BiLSTM?CRF、BiLSTM?CNN?CRF、SpanBERT、LUKE、KnowBERT、CasRel、REBEL、UIE,大模型抽取 等模型的原始論…

基于Django實現農業生產可視化系統

基于Django實現農業生產可視化系統 項目截圖 登錄 注冊 首頁 農業數據-某一指標表格展示 農業數據-某一指標柱狀圖展示 農業數據-某一指標餅狀圖展示 氣候數據-平均氣溫地圖展示 氣候數據-降水量合并圖展示 后臺管理 一、系統簡介 農業生產可視化系統是一款基于DjangoMVTMyS…

【無人機】無人機的電調校準,ESC Calibration,PX4使用手冊電調校準詳細步驟

目錄 1、前提 條件? 2、詳細步驟? 3、故障 排除? 無人機的電調校準&#xff0c;ESC Calibration&#xff0c;PX4使用手冊電調校準詳細步驟 參考&#xff1a;ESC 校準 |PX4 指南 &#xff08;v1.15&#xff09; ?信息 這些說明僅與 PWM ESC 和 OneShot ESC 相關。DShot…

區塊鏈預言機(Oracle)詳解:如何打通鏈上與現實世界的關鍵橋梁?

文章目錄 一、什么是區塊鏈預言機&#xff1f;1.1 區塊鏈的封閉性問題1.2 預言機的定義與作用舉個例子&#xff1a; 1.3 為什么預言機是 Web3 的關鍵基礎設施&#xff1f; 二、預言機的基本分類與工作模式2.1 輸入型與輸出型預言機&#xff08;1&#xff09;輸入型預言機&#…

工具:下載vscode .vsix擴展文件及安裝的方法

1 背景 vscode的使用環境無法連接互聯網訪問Extensions for Visual Studio family of products | Visual Studio Marketplace&#xff0c;導致無法直接在vscode里面下載并安裝所需擴展 所以需要先在有網的環境下載插件文件&#xff0c;然后在沒網的環境安裝插件 2 下載方式 …

Oracle 23ai Vector Search 系列之6 向量相似性搜索(Similarity Search)

文章目錄 Oracle 23ai Vector Search 系列之6 向量相似性搜索&#xff08;Similarity Search&#xff09;向量相似性搜索&#xff08;Similarity Search&#xff09;概述向量距離度量歐式距離&#xff08;Euclidean Distances&#xff09;歐式平方距離&#xff08;Euclidean Sq…

NLP與社區檢測算法的結合:文本中的社區發現

NLP與社區檢測算法的結合&#xff1a;文本中的社區發現 在自然語言處理&#xff08;NLP&#xff09;領域&#xff0c;社區檢測算法被廣泛應用于從大規模文本數據中識別出具有相似主題或興趣的不同群體。這種結合不僅能夠幫助我們理解文本內容的結構&#xff0c;還能揭示隱藏在…

解鎖古籍中的氣候密碼,探索GPT/BERT在歷史災害研究中的前沿應用;氣候史 文本挖掘 防災減災;臺風案例、干旱案例、暴雨案例

歷史災害文獻分析方法論的研究&#xff0c;是連接過去與未來的關鍵橋梁。通過對古籍、方志、檔案等非結構化文本的系統性挖掘與量化分析&#xff0c;不僅能夠重建千年尺度的災害事件序列&#xff08;如臺風、洪旱等&#xff09;&#xff0c;彌補儀器觀測數據的時空局限性&#…

超級桌面 TV 版下載:安卓電視版官方正版與刷機固件深度剖析

在智能電視領域&#xff0c;一款出色的桌面應用能極大提升用戶的使用體驗。超級桌面 TV 版作為備受矚目的選擇&#xff0c;以其獨特的功能和優勢脫穎而出。今天&#xff0c;我們就來深入探討安卓電視版官方正版超級桌面 TV 版的下載方法&#xff0c;以及刷機固件的奧秘&#xf…

金融圖QCPFinancial

QCPFinancial 是 QCustomPlot 中用于繪制金融圖表&#xff08;如蠟燭圖/K線圖&#xff09;的核心類。以下是其關鍵特性的詳細說明&#xff1a; 一、主要屬性 屬性類型說明dataQSharedPointer<QCPFinancialDataContainer>存儲金融數據的數據容器chartStyleQCPFinancial:…

Linux學習筆記|入門指令

man 指令 用法&#xff1a;man [指令名稱] &#xff0c;用于查看指定指令的幫助手冊&#xff0c;獲取指令的詳細語法、選項及使用示例等信息 。示例&#xff1a;想了解 ls 指令的用法&#xff0c;執行 man ls &#xff0c;會進入 man 手冊頁面展示 ls 相關信息。按 q 鍵可退出。…

PD分離:優化大語言模型推理效率

PD分離&#xff1a;優化大語言模型推理效率 在大語言模型的推理過程中&#xff0c;Prefill 和 Decode 是兩個關鍵階段。隨著模型規模的不斷擴大&#xff0c;如何高效地處理這兩個階段的計算任務&#xff0c;成為了一個亟待解決的問題。 一、什么是 Prefill 和 Decode&#xf…

【MATLAB例程】AOA定位、AOA與TOA混合定位,二維環境下的對比,基站(錨點數量)自適應調整,附代碼下載鏈接

該代碼實現了一個 A O A AOA AOA&#xff08;到達角&#xff09;與 T O A TOA TOA&#xff08;到達時間&#xff09;混合定位的例程&#xff0c;適用于二維平面&#xff0c;并支持自適應基站數量。訂閱專欄后可直接獲取完整的源代碼&#xff0c;粘貼到MATLAB空腳本中即可運行 文…

uCOS3實時操作系統(系統架構和中斷管理)

文章目錄 系統架構中斷管理ARM中斷寄存器相關知識ucos中斷機制 系統架構 ucos主要包含三個部分的源碼&#xff1a; 1、OS核心源碼及其配置文件&#xff08;ucos源碼&#xff09; 2、LIB庫文件源碼及其配置文件&#xff08;庫文件&#xff0c;比如字符處理、內存管理&#xff0…

前端api(請求后端)簡易template

微信小程序 API 模塊模板 基本 API 模塊結構 /*** 示例API模塊*/ const api require(../api); const config require(../../config/index);// 示例API對象 const exampleApi {// API方法定義... };// 導出模塊 module.exports exampleApi;標準 RESTful 請求方法 獲取列表…

leetcode 1035. Uncrossed Lines

題目描述 本題本質上就是求nums1和nums2的最長公共子序列的長度。因此本題本質上與第1143題一模一樣。 代碼&#xff1a; class Solution { public:int maxUncrossedLines(vector<int>& nums1, vector<int>& nums2) {//本題等價于求nums1和nums2的最長公…