天天看點

Python Elasticsearch批量操作用戶端

基于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批量操作用戶端
Python Elasticsearch批量操作用戶端

源碼下載下傳位址:基于Python實作的Elasticsearch批量操作用戶端

作者:授客

QQ:1033553122

全國軟體測試QQ交流群:7156436

Git位址:https://gitee.com/ishouke

友情提示:限于時間倉促,文中可能存在錯誤,歡迎指正、評論!

作者五行缺錢,如果覺得文章對您有幫助,請掃描下邊的二維碼打賞作者,金額随意,您的支援将是我繼續創作的源動力,打賞後如有任何疑問,請聯系我!!!

           微信打賞                       

支付寶打賞                  全國軟體測試交流QQ群  

Python Elasticsearch批量操作用戶端
Python Elasticsearch批量操作用戶端
Python Elasticsearch批量操作用戶端