ELASTICSEARCH 6. UPDATE API (PHẦN 2)
Phần này chúng ta sẽ tiếp tục tìm hiểu về Update API với chức năng 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ác ví dụ sẽ dựa theo index và type của phần trước.
CẬP NHẬT BẰNG DOCUMENT - UPDATE WITH A PARTIAL DOCUMENT
Update API hỗ trợ truyền vào một document để "trộn" (merge) với document đã tồn tại, thay đổi hoặc thêm mới trường. Ví dụ nếu trường name đã có, nó sẽ được cập nhật giá trị thành new_name, nếu chưa thì document sẽ có thêm trường name:
POST test/_doc/1/_update
{
"doc" : {
"name" : "new_name"
}
}
Nếu trong request body có cả document và script thì script sẽ được ưu tiên thực hiện, document sẽ bị bỏ qua.
XÁC ĐỊNH "NOOP" UPDATE
Nếu document được khai báo trong body thì giá trị của nó được trộn với phần _source đã tồn tại. Mặc định rằng ES sẽ không cập nhật bất cứ thứ gì nếu nó không tìm thấy giá trị nào mới và sẽ trả về result là noop như sau:
{
"_shards": {
"total": 0,
"successful": 0,
"failed": 0
},
"_index": "test",
"_type": "_doc",
"_id": "1",
"_version": 7,
"result": "noop"
}
Tức là nếu name từ trước đã có giá trị là "new_name" thì khi gửi request với "name": "new_name" thì mặc nhiên toàn bộ yêu cầu cập nhật sẽ bị bỏ qua và trả về response như trên. Ta có thể tắt chức năng trên bằng cách thêm tham số detect_noop vào request như sau:
UPSERT (UPDATE + INSERT)
Nếu document chưa có trên ES, phần nội dung bên trong tham số upsert sẽ được thêm như một document mơi, ngược lại nếu đã tồn tại thì phần script sẽ được thực thi: