基于Python實作的Elasticsearch批量操作用戶端
by:授客 QQ:1033553122
1. 代碼用途 1
2. 測試環境 1
3. 使用方法 1
3.1 配置ES伺服器資訊 1
3.2 配置ES操作資料 2
3.2.1 批量插入資料 2
3.2.2批量更新文檔字段值|新增字段值 4
3.2.3 批量删除 7
3.2.4 批量去除備援(重複)的資料 8
3.2.5 批量複制資料 9
3.3 運作程式 10
1.代碼用途
Elasticsearch用戶端,目的在于實作批量操作,如下:
<1> 批量插入資料
<2> 批量更新文檔字段值
<3> 批量新增文檔字段值
<4> 批量删除資料
<5> 批量複制資料
<6> 批量去除備援資料
2.測試環境
Win7 64位
Python 3.3.2
Win elasticsearch-5.4.1
chardet-2.3.0
下載下傳位址1:https://pypi.python.org/pypi/chardet/
下載下傳位址2:http://pan.baidu.com/s/1nu7XzjN
3.使用方法
3.1 配置ES伺服器資訊
編輯配置檔案conf/hostconfig
[DESTHOSTCONFIG]
host = 127.0.0.1
port = 9200
protocol = http
[SRCHOSTCONFIG]
[README]
host = Elasticsearch所在伺服器IP位址
port = Elasticsearch通路端口
protocol = 暫且固定為http
說明:
[DESTHOSTCONFIG]: 該節點下配置需要執行批量插入,批量更新文檔,批量删除,批量複制時的ES主機資訊
[SRCHOSTCONFIG]:該節點下配置需要複制ES資料的資料源主機資訊,即從該節點下的ES主機複制到[DESTHOSTCONFIG]下的主機,兩者可以是同一台主機
3.2 配置ES操作資料
3.2.1 批量插入資料
編輯配置檔案conf/runconfig.txt
[RUNCONFIG]
runtimes
= 1
說明:
runtimes = 執行批量插入時,每組資料會被重複執行的次數,總插入記錄數=runtimes x 資料組數
編輯配置檔案conf/esdataconfig_insertdata.txt
[INSERTDATA]
index= business_chance
type = customer_num1
{
"group_customer_code":
"1",
"second_class":
"服裝||手機||水果",
"customer_num":
100||200||300,
"province":
"廣東省||福建省||雲南省",
"branch":
"品牌1||品牌2"
}
end
"2",
"服裝",
400,
"廣東省",
"品牌3"
type = customer_num2
600,
"品牌",
"rank":1
index= business_index
type = customer_type
"品牌2",
[INSERTDATA] ------------->固定值
index= 索引名稱,不能為空
type =
類型名稱,不可為空
需要送出的一組資料,沒組資料遵守json格式,後面一定要跟“end” 表示資料範圍結束
"second_class": "服裝||手機||水果",
1)如果有多個參數值,以
|| 分隔,運作時程式随機選取一個
2)參數值如果是字元串類型,加以英文雙引号",否則不加雙引号
從上往下,
1)如果已填寫index,需要切換文檔類型,可直接另起一行,如下
表示接下來的資料組插入到該文檔類型,直到遇到其它索引、文檔類型
2)如果需要送出到其它新的索引,可直接另起一行,填寫新的索引和類型,如下
表示接下來的資料組插入到新索引名稱下的新索引類型中
3.2.2批量更新文檔字段值|新增字段值
編輯配置檔案conf/esdataconfig_updatefield.txt
[UPDATEFIELD]
index=business_chance
查詢=
"query":
"match_phrase":
"province":
"廣東省"
}
},"size":150
"branch": "品牌99||品牌66",
"customer_num": 900||888
"match_all":
{}
},
"size":
100
"branch": "品牌999",
"customer_num": 990
"branch": "品牌666",
"customer_num": 666
[UPDATEFIELD] ------------>固定值
index=
需要更新記錄所在索引名稱,不可為空
需要更新記錄所在文檔類型,不可為空
查詢={……} 僅更新滿足查詢條件的結果,不可為空
"size":150
這裡的邏輯是這樣的:先“查詢”,再對查詢出來的每條記錄進行更新
注意:
不使用size參數的話,ES預設僅僅會傳回10條記錄,程式僅會對傳回的記錄數進行更新,是以,如果需要更新的記錄數大于10條,需要通過"size"參數,顯示控制ES傳回的記錄數,比如“需要更新的記錄數有150條,則size的值要設定大于等于150”(下同,不在贅述)
參數資料組
"branch": "品牌99||品牌66",
同批量插入
表示接下來的資料組更新,隻更新歸屬該文檔類型的記錄,直到遇到其它索引、文檔類型
3)如果需要更新歸屬其它新索引的記錄,可直接另起一行,填寫新的索引和類型,如下
表示接下來的資料組隻更新新索引名稱下的新索引類型中的記錄,直到遇到其它索引、文檔類型
同批量插入,查詢,參數資料組,都必須跟 end,表示資料範圍結束
另外,需要注意的是:“查詢”,必須位于參數數組上方,索引類型下方
批量新增文檔字段:如果填寫的字段不存在,則會新增字段及對應值
3.2.3
批量删除
編輯配置檔案conf/esdataconfig_deletedata.txt
[DELETEDATA]
index=
business_chance
type
= customer_num1
}
business_index
= customer_type
[DELETEDATA] --------固定值
要删除記錄所在索引
=
要删除記錄所在類型
這裡的邏輯是這樣的:如先“查詢”,再對查詢出來的每條記錄(ES實際傳回的記錄)進行删除
其它說明同上
3.2.4
批量去除備援(重複)的資料
編輯配置檔案conf/esdataconfig_deduplicatedata.txt
[DEDUPLICATEDATA]
"size":100
這裡的查詢不能為空,一定要填寫
這裡的實作邏輯是這樣的:先查詢,然後删除查詢出來的全部記錄,最後再把不重複的記錄寫回到ES中。
3.2.5
批量複制資料
編輯配置檔案conf/esdataconfig_copydata.txt
[COPYDATA]
格式基本同上述的批量更新文檔的配置,多少有點不一樣,需要注意如下:
1) 這裡的index,type分别為資料源所在的索引和類型,即需要從該索引和類型中複制資料到目标索引和類型,不能為空
2)條件=
配置需要“複制資料到”的目标索引,和目标類型,如下,以逗号分隔,一個條件僅僅支援一個目标index和type
條件 = index = business_index
, type = customer_num2
條件和查詢都不能為空。
這裡的實作邏輯是這樣的:對資料源所在的index, type通過“查詢”得到要複制的資料,然後根據“條件”設定的目标索引和類型名,複制到對應目标主機上的目标索引,目标類型中。
說明:重複複制,會生成重複資料
如果覺得麻煩,以上幾個資料配置的内容,可以寫在一個檔案裡,但是必須按格式填寫
3.3
運作程式
cmd進入ESBatchOperator根目錄(main.py所在目錄)
python main.py
按提示,輸入數字編号 1、2、3、4、5,回車運作

源碼下載下傳位址:基于Python實作的Elasticsearch批量操作用戶端
作者:授客
QQ:1033553122
全國軟體測試QQ交流群:7156436
Git位址:https://gitee.com/ishouke
友情提示:限于時間倉促,文中可能存在錯誤,歡迎指正、評論!
作者五行缺錢,如果覺得文章對您有幫助,請掃描下邊的二維碼打賞作者,金額随意,您的支援将是我繼續創作的源動力,打賞後如有任何疑問,請聯系我!!!
微信打賞
支付寶打賞 全國軟體測試交流QQ群