0

[Elasticsearch - CLI] Thay Đổi Documents Bằng Query (Mutations by Query)

Một điều thú vị về Elasticsearch Query DSL là nó không chỉ hỗ trợ tìm kiếm mà còn có thể thực hiện các thay đổi trên documents, chẳng hạn như update hoặc delete hàng loạt.

Ví dụ, nếu chúng ta 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, chúng ta có thể sử dụng Delete By Query API như sau:

$ curl -i https://localhost:9200/catalog/books/_delete_by_query?pretty -d '
{
  "query": {
    "bool": {
      "must": [
        { "range" : { "rating" : { "lt" : 3 } } }
      ],
      "filter": [
        { "term" : { "publisher" : "Manning" } }
      ]
    }
  }
}'

Kết quả:

{
  "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" : []
}

Tương tự, nếu muốn cập nhật documents bằng Query DSL, chúng ta có thể sử dụng Update By Query API.

Ví dụ, nếu chúng ta muốn tăng rating của tất cả các cuốn sách do O'Reilly xuất bản thêm 1 điểm, chúng ta có thể thực hiện:

$ 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 hữu ích hơn so với Delete API thông thường khi bạn cần xóa child documents sau khi xóa parent document.
  • Cả Delete By Query APIUpdate By Query API đều có thể gây tải lớn trên cluster, vì vậy bạn nên kiểm soát tốc độ xử lý bằng cách điều chỉnh tham số requests_per_second.

Với 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! 🚀


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí