ELASTICSEARCH 5. UPDATE API (PHẦN 1)

  1. Công nghệ thông tin

UPDATE API LÀ GÌ?

Update API cho phép ta cập nhật cho một hoặc nhiều bản ghi trong Elasticsearch. Cơ chế hoạt động của Update API là lấy ra các dữ liệu phù hợp từ index, thực hiện các lệnh và cập nhật kết quả. Vì thế ta có thể cập nhật một vài trường hoặc cập nhật toàn bộ (thay đổi một số trường, loại bỏ một số trường khác) của một bản ghi định trước bằng id, hoặc cập nhật một loạt bản ghi thỏa mãn các điều kiện tìm kiếm

Thực tế tiến trình này là lấy dữ liệu (get) và xóa bỏ bản ghi, sau đó thay đổi và thêm trở lại (reindex), ES sẽ đảm bảo rằng tiến trình này được thực thi trọn vẹn tránh các cập nhật hay thêm mới khác nhằm tránh xung đột dữ liệu (ví dụ: xung đột về _id)

Update API sử dụng REST method POST

SCRIPTED UPDATE - CẬP NHẬT BẰNG SCRIPT:

Trước tiên ta thêm một bản ghi có id =1 vào index test, type _doc:

PUT test/_doc/1 { "counter" : 1, "tags" : ["red"] }
Sau đó thực thi một scripted update để tăng giá trị cho counter (lưu ý cần có param _update):
POST test/_doc/1/_update { "script" : { "source": "ctx._source.counter += params.count", "lang": "painless", "params" : { "count" : 4 } } }
Ta có thể thêm một tag vào tag list (nếu tag này đã có thì vẫn sẽ được thêm mới vào list):
POST test/_doc/1/_update { "script" : { "source": "ctx._source.tags.add(params.tag)", "lang": "painless", "params" : { "tag" : "blue" } } }
Loại bỏ một tag trong tag list (lưu ý rằng nếu tag đó xuất hiện nhiều lần trong list thì chỉ có tag xuất hiện trước bị xóa):
POST test/_doc/1/_update { "script" : { "source": "if (ctx._source.tags.contains(params.tag)) { ctx._source.tags.remove(ctx._source.tags.indexOf(params.tag)) }", "lang": "painless", "params" : { "tag" : "blue" } } }
Ta có thể thêm một trường mới tên là new_field:
POST test/_doc/1/_update { "script" : "ctx._source.new_field = 'value_of_new_field'" } 
Hoặc loại bỏ một trường tên là new_field:
POST test/_doc/1/_update { "script" : "ctx._source.remove('new_field')" }
Có thể thực thi một cấu trúc điều kiện, ví dụ nếu tag list của document có phần tử green thì sẽ bị xóa (delete) hoặc không làm gì (none) thông qua ctx.op:
POST test/_doc/1/_update { "script" : { "source": "if (ctx._source.tags.contains(params.tag)) { ctx.op = 'delete' } else { ctx.op = 'none' }", "lang": "painless", "params" : { "tag" : "green" } } }
Ngoài ctx._source, ta có thể truy cập đến các phần tử khác của ES trong biến ctx, ví dụ như _index, _type, _id, _now (trả về thời gian hiện tại)

Trong phần tiếp theo, ta sẽ tìm hiểu về cách thức cập nhật bằng document (Update with a partial document) và một số chức năng đặc biệt khác của Update API.

(còn tiếp)

Từ khóa: 

elasticsearch

,

vtcc_intern_9

,

công nghệ thông tin

Series bài viết ấn tượng ! Like
Trả lời
Series bài viết ấn tượng ! Like