Elasticsearch(三) 批量操作

2021-09-30 18:08:15 字數 2646 閱讀 3237

語法:

什麼是partial update?

put /index/type/id,建立文件&替換文件,就是一樣的語法

一般對應到應用程式中,每次的執行流程基本是這樣的:

(1)應用程式先發起乙個get請求,獲取到document,展示到前台介面,供使用者檢視和修改

(2)使用者在前台介面修改資料,傳送到後台

(3)後台**,會將使用者修改的資料在記憶體中進行執行,然後封裝好修改後的全量資料

(4)然後傳送put請求,到es中,進行全量替換

(5)es將老的document標記為deleted,然後重新建立乙個新的document

partial update

post /index/type/id/_update 

}看起來,好像就比較方便了,每次就傳遞少數幾個發生修改的field即可,不需要將全量的document資料傳送過去

ut /test_index/test_type/10

post /test_index/test_type/10/_update

}指令碼:

es,其實是有個內建的指令碼支援的,可以基於groovy指令碼實現各種各樣的複雜操作

基於groovy指令碼,如何執行partial update

es scripting module,我們會在高手高階篇去講解,這裡就只是初步講解一下

put /test_index/test_type/11

(1)內建指令碼

post /test_index/test_type/11/_update

}(2)外部指令碼

ctx._source.tags+=new_tag

post /test_index/test_type/11/_update}}

(3)用指令碼刪除文件

ctx.op = ctx._source.num == count ? 'delete' : 'none'

post /test_index/test_type/11/_update}}

(4)upsert操作

post /test_index/test_type/11/_update}],

"type": "document_missing_exception",

"reason": "[test_type][11]: document missing",

"index_uuid": "6m0g7yx7r1kecwwgnfh1sw",

"shard": "4",

"index": "test_index"

},"status": 404

}如果指定的document不存在,就執行upsert中的初始化操作;如果指定的document存在,就執行doc或者script指定的partial update操作

post /test_index/test_type/11/_update

}bulk語法

post /_bulk} }

} }}每乙個操作要兩個json串,語法如下:

}舉例,比如你現在要建立乙個文件,放bulk裡面,看起來會是這樣子的:

}有哪些型別的操作可以執行呢?

(1)delete:刪除乙個文件,只要1個json串就可以了

(2)create:put /index/type/id/_create,強制建立

(3)index:普通的put操作,可以是建立文件,也可以是全量替換文件

(4)update:執行的partial update操作

bulk api對json的語法,有嚴格的要求,每個json串不能換行,只能放一行,同時乙個json串和乙個json串之間,必須有乙個換行

],"type": "json_e_o_f_exception",

"reason": "unexpected end-of-input: expected close marker for object (start marker at [source: org.elasticsearch.transport.netty4.bytebufstreaminput@5a5932cd; line: 1, column: 1])\n at [source: org.elasticsearch.transport.netty4.bytebufstreaminput@5a5932cd; line: 1, column: 3]"

},"status": 500},

"status": 200}},

,"created": true,

"status": 201}},

}},,"created": true,

"status": 201}},

,"created": false,

"status": 200}},

,"status": 200}}

]}bulk操作中,任意乙個操作失敗,是不會影響其他的操作的,但是在返回結果裡,會告訴你異常日誌

post /test_index/_bulk} }

}}} }

post /test_index/test_type/_bulk} }

}}} }

2、bulk size最佳大小

bulk request會載入到記憶體裡,如果太大的話,效能反而會下降,因此需要反覆嘗試乙個最佳的bulk size。一般從1000~5000條資料開始,嘗試逐漸增加。另外,如果看大小的話,最好是在5~15mb之間。

Elasticsearch學習筆記(三)

在elasticsearch中,文件歸屬於一種型別,而這些型別存在於索引中,我們可以畫一些簡單的對比圖來模擬傳統關係型資料庫 relational db databases tables rows columns elasticsearch indices types documents field...

elasticsearch 檢視文件 三

一 檢視info索引下的所有資料 hits hits 看起來還是返回了很多東西,只不過過濾掉了一些字段,如果在我們的文件field比較多的時候,這個api會很有用。二 插敘索引為info,型別為student,id為1的資料 curl localhost 9200 info student 1?pr...

三 Elasticsearch 集群搭建

此處 演示三個節點的偽集群搭建 即單機實現三個節點的es集群 3 現在有三個節點 es 06 01,es 06 02,es 06 03 進入es 06 01 再進入config目錄,開啟 elasticsearch.yml 這是es最重要的配置檔案 4 新增以下配置 分別開啟三個節點的config目...