0

[Elasticsearch - CLI] Reindexing

Sau một thời gian sử dụng, bạn có thể nhận ra rằng mapping types hiện tại của mình chưa thực sự tối ưu và có thể được cải thiện. Tuy nhiên, Elasticsearch chỉ hỗ trợ một số thay đổi nhất định trên existing mapping types. Nếu bạn cần một cách tiếp cận linh hoạt hơn, Elasticsearch cung cấp Reindexing API, giúp bạn dễ dàng tái cấu trúc dữ liệu.

Ví dụ, để tạo một index mới với updated mapping types, ta có thể sử dụng lệnh sau:

$ echo ’{"source": {"index": "catalog"}, "dest": {"index": "catalog-v2"}}’ | http POST https://localhost:9200/_reindex

Kết quả:

{
  "batches": 0,
  "created": 200,
  "deleted": 0,
  "failures": [],
  "noops": 0,
  "requests_per_second": -1.0,
  "retries": {
    "bulk": 0,
    "search": 0
  },
  "throttled_millis": 0,
  "throttled_until_millis": 0,
  "timed_out": false,
  "took": 265,
  "total": 200,
  "updated": 0,
  "version_conflicts": 0
}

Cách Tiếp Cận Hiệu Quả Với Reindexing API

Thủ thuật quan trọng ở đây là:

  1. Tạo một index mới với updated mapping types (trong trường hợp này là catalog-v2).
  2. Yêu cầu Elasticsearch lấy toàn bộ dữ liệu từ index cũ (catalog) và nhập vào index mới (catalog-v2).
  3. Hoán đổi indices, nghĩa là thay đổi alias để catalog-v2 trở thành index chính được sử dụng.

Một điểm đáng lưu ý: Reindexing API hoạt động không chỉ trên local indices mà còn có thể dùng để di chuyển dữ liệu giữa remote indices.

Tuy nhiên, mặc dù Reindexing API đơn giản và tiện lợi, nó vẫn đang được coi là experimental và có thể không phù hợp với tất cả các tình huống. Ví dụ:

  • Nếu index quá lớn, việc reindex có thể mất nhiều thời gian và ảnh hưởng đến hiệu suất của Elasticsearch cluster.
  • Nếu cluster đang chịu tải cao, có thể ưu tiên application requests hơn là thực hiện reindexing.

Vì vậy, trước khi thực hiện reindexing, bạn nên đánh giá tình trạng hiện tại của cluster để đảm bảo hiệu suất tốt nhất. 🚀


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í