Vì field text đã bị analyze thành nhiều token, nên không có một giá trị duy nhất để so sánh. Sort cần đọc giá trị theo từng document (doc values), mà text không sinh doc values.
Lỗi nhận được là Fielddata is disabled on text fields by default.
Cách đúng là sort trên sub-field keyword:
json
"name": { "type": "text", "fields": { "raw": { "type": "keyword" } } }json
{ "sort": [{ "name.raw": "asc" }] }Đừng bật fielddata: true để "chữa" lỗi. Fielddata nạp toàn bộ giá trị của field lên heap và là nguyên nhân kinh điển làm sập cluster khi index lớn.
Cùng lý do đó, aggregation trên text cũng bị chặn — group theo tên sản phẩm phải dùng name.raw.
Một chi tiết cần biết: keyword mặc định ignore_above: 256, chuỗi dài hơn sẽ không được index ở sub-field đó nên sort/agg sẽ bỏ sót document.