Elasticsearch là một công cụ mạnh mẽ không chỉ giúp bạn tìm kiếm dữ liệu mà còn cho phép thực hiện các thay đổi trực tiếp trên documents. Trong bài viết này, chúng ta sẽ tìm hiểu cách sử dụng Delete By Query API và Update By Query API để xóa và cập nhật hàng loạt các documents trong Elasticsearch.
Thay Đổi Documents Bằng Delete By Query API
Một trong những khía cạnh thú vị của Elasticsearch là khả năng xóa dữ liệu một cách hiệu quả bằng Delete By Query API. Ví dụ, nếu bạn muốn xóa tất cả các cuốn sách có rating thấp trong catalog và được xuất bản bởi Manning, bạn có thể gửi yêu cầu như sau:
bash
$ curl -i https://localhost:9200/catalog/books/_delete_by_query?pretty -d '
{
"query": {
"bool": {
"must": [
{ "range" : { "rating" : { "lt" : 3 } } }
],
"filter": [
{ "term" : { "publisher" : "Manning" } }
]
}
}
}'
Và đây là kết quả trả về từ Elasticsearch:
json
{
"took" : 12,
"timed_out" : false,
"total" : 0,
"deleted" : 0,
"batches" : 0,
"version_conflicts" : 0,
"noops" : 0,
"retries" : { "bulk" : 0, "search" : 0 },
"throttled_millis" : 0,
"requests_per_second" : -1.0,
"throttled_until_millis" : 0,
"failures" : []
}
Cập Nhật Documents Bằng Update By Query API
Nếu bạn muốn cập nhật các documents, bạn có thể sử dụng Update By Query API. Chẳng hạn, nếu bạn muốn tăng điểm rating của tất cả các cuốn sách do O'Reilly xuất bản thêm 1 điểm, bạn có thể thực hiện như sau:
bash
$ curl -i https://localhost:9200/catalog/books/_update_by_query?pretty -d '
{
"script": {
"source": "ctx._source.rating += 1",
"lang": "painless"
},
"query": {
"term": { "publisher": "O'Reilly" }
}
}'
Lưu Ý Quan Trọng
- Delete By Query API rất hiệu quả trong việc xóa child documents khi bạn cần xóa parent document. Điều này khá hữu ích trong các tình huống phức tạp.
- Cả Delete By Query API và Update By Query API đều có thể tạo ra tải lớn cho cluster, vì vậy bạn nên cân nhắc điều chỉnh tham số
requests_per_second
để kiểm soát tốc độ xử lý.
Với các kỹ thuật Mutations by Query, bạn có thể thực hiện thay đổi hàng loạt một cách nhanh chóng và hiệu quả mà không cần tải dữ liệu xuống trước khi chỉnh sửa! Việc tận dụng tối đa khả năng của Elasticsearch sẽ giúp bạn tối ưu hóa quy trình làm việc và quản lý dữ liệu một cách hiệu quả hơn. 🚀