基礎17 Elastic Search 基於groovy指令碼進行partial update
阿新 • • 發佈:2019-02-16
Elastic Search 基於groovy指令碼進行partial update
概述
- es,其實是有個內建的指令碼支援的,可以基於groovy指令碼實現各種各樣的複雜操作
- 基於groovy指令碼,如何執行partial update
- es scripting module
例子
PUT /test_index/test_type/11
{
"num": 0,
"tags": []
}
1)內建指令碼
POST /test_index/test_type/11/_update
{
"script" : "ctx._source.num+=1"
}
{ "_index": "test_index", "_type": "test_type", "_id": "11", "_version": 2, "found": true, "_source": { "num": 1, "tags": [] } }
2)外部指令碼
- 新增檔案 config/scripts/test-add-tags.groovy
ctx._source.tags+=new_tag
POST /test_index/test_type/11/_update
{
"script": {
"lang": "groovy",
"file": "test-add-tags",
"params": {
"new_tag": "tag1"
}
}
}
3)用指令碼刪除文件
ctx.op = ctx._source.num == count ? 'delete' : 'none'
POST /test_index/test_type/11/_update { "script": { "lang": "groovy", "file": "test-delete-document", "params": { "count": 1 } } }
4)upsert操作
POST /test_index/test_type/11/_update
{
"doc": {
"num": 1
}
}
{ "error": { "root_cause": [ { "type": "document_missing_exception", "reason": "[test_type][11]: document missing", "index_uuid": "6m0G7yx7R1KECWWGnfH1sw", "shard": "4", "index": "test_index" } ], "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
{
"script" : "ctx._source.num+=1",
"upsert": {
"num": 0,
"tags": []
}
}