Mặc định Elasticsearch chọn shard theo hash(_id) % number_of_primary_shards. Custom routing cho phép ép các document liên quan nằm chung một shard.
PUT /orders/_doc/1?routing=customer_42
GET /orders/_search?routing=customer_42 # chi cham 1 shardLợi ích: query chỉ chạm một shard thay vì fan-out ra tất cả, nên latency giảm rõ và cluster chịu được nhiều query đồng thời hơn. Rất hợp cho hệ multi-tenant nơi mọi query đều có tenant_id.
Rủi ro chính là hot shard: một khách hàng lớn chiếm 30% dữ liệu sẽ dồn hết vào một shard, làm node đó quá tải trong khi các node khác rảnh. Cân bằng lại rất khó vì routing key đã cố định.
Ràng buộc kèm theo: mọi thao tác GET, update, delete theo _id đều phải truyền đúng routing value, quên là không tìm thấy document. Khai báo _routing: { required: true } trong mapping để lỗi này lộ ra sớm thay vì âm thầm.