【Elasticsearch】文檔遷移(Reindex)

文檔遷移

  • 1.為什么要進行 reindex 操作
  • 2.Reindex 操作的本質
  • 3.實際案例
    • 3.1 同集群索引之間的全量數據遷移
    • 3.2 同集群索引之間基于特定條件的數據遷移
      • 3.2.1 源索引設置檢索條件
      • 3.2.2 基于 script 腳本的索引遷移
      • 3.2.3 基于預處理管道的數據遷移
    • 3.3 不同集群之間的索引遷移
    • 3.4 查看及取消 reindex 任務
      • 3.4.1 查看 reindex 任務
      • 3.4.2 取消 reindex 任務
  • 4.注意事項

1.為什么要進行 reindex 操作

Reindex 是 Elasticsearch 中一種將數據從一個索引復制到另一個索引的操作,主要用途包括:

  • 索引結構變更:當需要修改映射設置,但無法直接更新現有索引時。
  • 數據遷移:將數據從一個索引/集群遷移到另一個索引/集群。
  • 數據轉換:在遷移過程中對數據進行修改或過濾。
  • 分片優化:調整分片數量或分片策略。
  • 版本升級:跨大版本升級時重建索引。

2.Reindex 操作的本質

Reindex 本質上是 Elasticsearch 內部的一個 數據復制 過程,它:

  • 從源索引讀取文檔。
  • 可選地對文檔進行轉換。
  • 將文檔寫入目標索引。
  • 不是簡單的文件復制,而是重新索引文檔的過程。

3.實際案例

3.1 同集群索引之間的全量數據遷移

場景:將 old_index 的所有數據遷移到新建的 new_index,因為需要修改分片數量。

生成測試數據。

// 創建源索引 old_index
PUT old_index
{"mappings": {"properties": {"name": { "type": "text" },"age": { "type": "integer" },"email": { "type": "keyword" }}}
}// 批量插入測試數據
POST old_index/_bulk
{"index":{}}
{"name":"John Doe","age":28,"email":"john@example.com"}
{"index":{}}
{"name":"Jane Smith","age":32,"email":"jane@example.com"}
{"index":{}}
{"name":"Bob Johnson","age":45,"email":"bob@example.com"}
{"index":{}}
{"name":"Alice Brown","age":23,"email":"alice@example.com"}
{"index":{}}
{"name":"Tom Wilson","age":37,"email":"tom@example.com"}

在這里插入圖片描述

執行遷移操作。

POST _reindex
{"source": {"index": "old_index"},"dest": {"index": "new_index"}
}

在這里插入圖片描述
在這里插入圖片描述

說明:這是最基本的 reindex 操作,將源索引所有文檔復制到目標索引。

3.2 同集群索引之間基于特定條件的數據遷移

3.2.1 源索引設置檢索條件

場景:只遷移 old_indexstatus 字段為 active 的文檔。

生成測試數據。

// 創建帶 status 字段的索引
PUT status_index
{"mappings": {"properties": {"name": { "type": "text" },"status": { "type": "keyword" },"value": { "type": "integer" }}}
}// 批量插入測試數據
POST status_index/_bulk
{"index":{}}
{"name":"Item 1","status":"active","value":100}
{"index":{}}
{"name":"Item 2","status":"inactive","value":200}
{"index":{}}
{"name":"Item 3","status":"active","value":150}
{"index":{}}
{"name":"Item 4","status":"pending","value":300}
{"index":{}}
{"name":"Item 5","status":"active","value":250}

在這里插入圖片描述

執行遷移操作。

POST _reindex
{"source": {"index": "status_index","query": {"term": {"status": "active"}}},"dest": {"index": "status_index_new"}
}

在這里插入圖片描述

3.2.2 基于 script 腳本的索引遷移

場景:遷移時修改字段,例如將 price 字段值增加 10 % 10\% 10%

生成測試數據。

// 創建產品索引
PUT products
{"mappings": {"properties": {"name": { "type": "text" },"price": { "type": "double" },"category": { "type": "keyword" }}}
}// 批量插入測試數據
POST products/_bulk
{"index":{}}
{"name":"Laptop","price":1000.00,"category":"electronics"}
{"index":{}}
{"name":"Smartphone","price":700.00,"category":"electronics"}
{"index":{}}
{"name":"Desk Chair","price":150.00,"category":"furniture"}
{"index":{}}
{"name":"Coffee Mug","price":10.00,"category":"kitchen"}
{"index":{}}
{"name":"Notebook","price":5.00,"category":"stationery"}

在這里插入圖片描述

執行遷移操作。

POST _reindex
{"source": {"index": "products"},"dest": {"index": "products_new"},"script": {"source": "ctx._source.price *= 1.10"}
}

在這里插入圖片描述

3.2.3 基于預處理管道的數據遷移

場景:在遷移過程中使用預處理管道處理數據,例如添加時間戳。

生成測試數據。

// 創建原始日志索引
PUT raw_logs
{"mappings": {"properties": {"message": { "type": "text" },"level": { "type": "keyword" },"source": { "type": "keyword" }}}
}// 批量插入測試日志數據
POST raw_logs/_bulk
{"index":{}}
{"message":"User logged in","level":"INFO","source":"auth-service"}
{"index":{}}
{"message":"Failed authentication attempt","level":"WARN","source":"auth-service"}
{"index":{}}
{"message":"Database connection lost","level":"ERROR","source":"db-service"}
{"index":{}}
{"message":"Cache refreshed successfully","level":"INFO","source":"cache-service"}
{"index":{}}
{"message":"High memory usage detected","level":"WARN","source":"monitoring-service"}

在這里插入圖片描述

執行遷移操作。

PUT _ingest/pipeline/add_timestamp
{"description": "Adds a timestamp to documents","processors": [{"set": {"field": "@timestamp","value": "{{_ingest.timestamp}}"}}]
}POST _reindex
{"source": {"index": "raw_logs"},"dest": {"index": "raw_logs_new","pipeline": "add_timestamp"}
}

在這里插入圖片描述

3.3 不同集群之間的索引遷移

場景:將集群 A 的 cluster_a_index 遷移到集群 B 的 cluster_b_index

生成測試數據。

// 創建模擬跨集群遷移的源索引
PUT cluster_a_index
{"mappings": {"properties": {"title": { "type": "text" },"views": { "type": "integer" },"published": { "type": "date" }}}
}// 批量插入測試數據
POST cluster_a_index/_bulk
{"index":{}}
{"title":"Introduction to Elasticsearch","views":1500,"published":"2023-01-15"}
{"index":{}}
{"title":"Kibana Dashboard Tutorial","views":3200,"published":"2023-02-20"}
{"index":{}}
{"title":"Advanced Logstash Pipelines","views":875,"published":"2023-03-10"}
{"index":{}}
{"title":"Elasticsearch Performance Tuning","views":2100,"published":"2023-04-05"}
{"index":{}}
{"title":"Machine Learning with ELK","views":1800,"published":"2023-05-12"}

在這里插入圖片描述

在集群 B 上執行遷移操作。

// 在集群 B 上執行
POST _reindex
{"source": {"remote": {"host": "http://clusterA:9200","username": "admin","password": "xxxxxx"},"index": "cluster_a_index"},"dest": {"index": "cluster_b_index"}
}

在這里插入圖片描述
在這里插入圖片描述

注意事項(非常重要)

  • ? 需要配置遠程集群白名單。
    • elasticsearch.yml 中的 reindex.remote.whitelist 配置項。
  • ? 網絡連接必須暢通,比如:
    • 是否在同一 VPC 下;
    • 以何種方式訪問,HTTP 還是 HTTPS(如果是 HTTPS,可能需要配置證書)。
  • ? 大數據量遷移建議使用快照/恢復方式更高效。

3.4 查看及取消 reindex 任務

生成測試數據。

// 創建一個大索引用于測試長時間運行的 reindex 任務
PUT large_source_index
{"mappings": {"properties": {"data": { "type": "text" },"counter": { "type": "integer" }}}
}// 批量插入大量測試數據(1000條)
POST _scripts/generate_large_data
{"script": {"lang": "painless","source": """def bulk = new StringBuilder();for (int i = 0; i < 1000; i++) {bulk.append('{"index":{}}\n');bulk.append('{"data":"Test data ' + i + '","counter":' + i + '}\n');}return bulk.toString();"""}
}POST large_source_index/_bulk
{ "script": { "id": "generate_large_data" } }

3.4.1 查看 reindex 任務

GET _tasks?detailed=true&actions=*reindex

3.4.2 取消 reindex 任務

POST _tasks/{task_id}/_cancel

示例

// 先查看任務
GET _tasks?detailed=true&actions=*reindex// 返回結果中獲取任務ID后取消
POST _tasks/oTUltX4IQMOUUVeiohTt8A:12345/_cancel

4.注意事項

  • Reindex 會占用大量資源,建議在低峰期執行
  • 大數據量 reindex 建議使用 slices 并行處理
  • 可以使用 wait_for_completion=false 異步執行
  • 監控任務進度,避免影響集群性能
  • 考慮版本兼容性問題,特別是跨大版本遷移時

Reindex 是 Elasticsearch 數據管理的重要工具,合理使用可以解決許多數據遷移和結構調整問題。

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

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

相關文章

WordPress 區塊版面配置指南

WordPress 的區塊編輯器(Gutenberg)提供了靈活的版面配置選項&#xff0c;以下是主要配置方法&#xff1a; 基本區塊布局 添加區塊&#xff1a;點擊””按鈕或按”/”鍵快速插入區塊 常用內容區塊&#xff1a; 段落(Paragraph) 標題(Heading) 圖像(Image) 畫廊(Gallery)…

TensorFlow基礎之理解張量

2.理解張量 張量&#xff08;Tensors&#xff09;介紹 張量是物理和工程領域的基礎數學結構。但是過去張量很少在計算機科學里使用。它與離散數學和邏輯學有更多的聯系。隨著機器學習的出現&#xff0c;這種狀態開始顯著的改變&#xff0c;成為連續向量的計算基礎。現代機器學…

Flume 安裝與配置步驟

1.解壓 tar -zxvf apache-flume-1.9.0-bin.tar.gz 2.配置環境變量 vim /etc/profile export FLUME_HOME/home/wang/soft/flume/apache-flume-1.9.0-bin export PATH$PATH:$FLUME_HOME/bin source /etc/profile 3.創建必要的目錄 mkdir -p $FLUME_HOME/conf 4.創建 Flume 配置文…

還原線上 WebView 異常:手機端APP遠程調試

前端調試總被理解為開發階段的事&#xff0c;但在實際項目中&#xff0c;真正困難的調試往往發生在產品上線之后。用戶反饋“看不到內容”、“一直轉圈”、“點了沒反應”&#xff0c;而開發環境無法復現&#xff0c;測試機也正常運行&#xff0c;這時怎么定位、驗證和解決問題…

102頁滿分PPT | 汽車設備制造業企業信息化業務解決方案智能制造汽車黑燈工廠解決方案

這份文檔是一份汽車設備制造業企業信息化業務解決方案&#xff0c;詳細闡述了企業從生產到銷售的全流程信息化建設。針對企業目前手工管理為主、信息化程度低、數據追溯困難等問題&#xff0c;提出了建立統一信息化平臺的目標&#xff0c;涵蓋財務、業務、流程和數據的整合。方…

SQLite 表達式詳解

SQLite 表達式詳解 引言 SQLite 是一個輕量級的數據庫,廣泛用于移動設備和桌面應用程序。SQLite 的表達式是 SQL 語句的核心,它們用于查詢、更新和刪除數據庫中的數據。本文將詳細解釋 SQLite 的各種表達式,并探討它們在數據庫操作中的重要性。 表達式概述 在 SQLite 中…

沉浸式AI交互數字人技術解析

360智匯云沉浸式AI交互數字人支持開發者靈活接入和私有化部署大模型服務&#xff0c;構建面向業務場景的實時音視頻交互能力。系統集成了360智匯云自研的沉浸式AI交互數字人引擎與高性能 RTC 模塊&#xff0c;保障音視頻傳輸過程中的低延遲、高穩定性和高并發承載能力&#xff…

HarmonyOS 評論回復彈窗最佳實踐

HarmonyOS 評論回復彈窗最佳實踐 前言 在移動應用開發中&#xff0c;評論回復功能是一個常見且重要的交互場景。本文將詳細介紹如何在 HarmonyOS 中實現一個功能完善的評論回復彈窗&#xff0c;包括彈窗選型、富文本編輯、軟鍵盤適配等關鍵技術點。 功能概述 我們要實現的評…

Git 回退操作詳解:帶示例的“小白”指南

前言 在日常開發中&#xff0c;我們難免會遇到&#xff1a; 改錯代碼&#xff1a;推送之前才發現某些行根本就不該動提交錯誤&#xff1a;commit 信息打錯、提交到錯誤分支想回到之前版本&#xff1a;測試時發現之前版本是好的&#xff0c;需要回去查看 這就需要用到 Git 的…

redux以及react-redux

1.redux案例完整版 上一篇文章我們是沒有action文件&#xff0c;直接在countre組件與store以及reducer直接進行狀態的改變以及展示。 下面我們加上action文件&#xff0c;我們就不能直接通過dispatch傳&#xff0c;而是通過調用action里面的函數講我們傳入的參數變成action這種…

idea中配置svn及提交提示“未檢測到更改”提示

首先要安裝TortoiseSVN&#xff0c;選command line client tools&#xff1b; 在idea中&#xff0c;文件->設置->Subversion->如下圖 文件->設置->目錄映射->如下圖 初次導入到svn&#xff0c; 輸入服務器上的svn地址&#xff0c;等待成功即可&#xff1b;…

vue 實現dot-dropdown

<template><div class"app-container"><div class"mt30"></div><el-row :gutter"20"><!-- title --><!-- <div class"modt-box">導航管理</div> --><el-col :span"2&q…

使用 mysql2/promise 模塊返回以后,使用 await 返回數據總結

SELECT 返回結構 const [rows, fields] await db.query(SELECT * FROM folders);返回&#xff1a; rows: 是一個數組&#xff0c;包含所有查到的記錄。fields: 是字段的結構定義&#xff08;列信息&#xff09;&#xff0c;一般不用。 rows 是一個數組&#xff0c;包含所有…

Manus Metagloves pro高精度+無漂移+低延遲 ,重構VR/XR手部交互方式

manus metagloves pro是一款專為動畫制作、虛擬現實及游戲開發打造的高精度無線動作捕捉手套。采用先進的Quantum追蹤技術&#xff0c;實現毫米級動作捕捉&#xff0c;精準還原手指細節&#xff0c;顯著提升創作效率與交互真實感。 MANUS Metagloves Pro解鎖動捕 / 機器人 / XR…

Uniapp插件改造指南:如何讓vue-plugin支持HarmonyOS5原生能力?

一、分層架構設計 采用通用邏輯與平臺實現分離的三層結構&#xff1a; uni-plugin-harmony ├── common # 跨平臺通用層 │ ├── interfaces # 能力接口抽象&#xff08;如Scanner.ets&#xff09; │ └── utils # 工具類 ├── harmony …

P1040 [NOIP 2003 提高組] 加分二叉樹 題解

題目描述 設一個 n n n 個節點的二叉樹 tree \text{tree} tree 的中序遍歷為 ( 1 , 2 , 3 , … , n ) (1,2,3,\ldots,n) (1,2,3,…,n)&#xff0c;每個節點都有一個分數&#xff08;均為正整數&#xff09;。任一棵子樹 subtree \text{subtree} subtree&#xff08;包含 tr…

【Golang面試題】Data Race 問題怎么檢測?

Go Race Detector 深度指南&#xff1a;原理、用法與實戰技巧 一、什么是數據競爭&#xff1f; 在并發編程中&#xff0c;數據競爭發生在兩個或多個 goroutine 同時訪問同一內存位置&#xff0c;且至少有一個是寫操作時。這種競爭會導致不可預測的行為和極其難以調試的問題。…

257. 二叉樹的所有路徑(js)

257. 二叉樹的所有路徑——DFS 回溯&#xff08;js&#xff09; 題目描述解題思路完整代碼時間復雜度分析 題目描述 257. 二叉樹的所有路徑 解題思路 題意理解 給定一棵二叉樹&#xff0c;要求返回所有從根節點到葉子節點的路徑&#xff0c;路徑以字符串形式表示&#xff0c…

自動化文檔生成工具(親測可運行)

本文介紹了一個用Java編寫的自動化文檔生成工具&#xff0c;通過讀取開發清單文本自動生成格式規范的Word文檔。該工具的主要特點包括&#xff1a; 采用Apache POI庫處理Word文檔&#xff0c;支持多級標題和段落自動生成實現中文數字轉換功能&#xff0c;將編號轉換為"一、…

湖北理元理律師事務所債務優化模型:法律與生活的平衡之道

在債務重組領域&#xff0c;專業機構需同時解決兩個矛盾&#xff1a;法律合規性與債務人可持續生存能力。湖北理元理律師事務所通過“三維干預模型”&#xff0c;在武漢某餐飲連鎖企業債務危機中驗證了該方案的有效性。 一、法律底層設計&#xff1a;還款方案的合法性審查 以該…