Ba tầng chạy tuần tự: character filter (sửa chuỗi thô, ví dụ bỏ HTML tag), tokenizer (cắt thành token), token filter (lowercase, bỏ stopword, stemming, asciifolding).
json
"analysis": {
"analyzer": {
"vi_search": {
"tokenizer": "standard",
"filter": ["lowercase", "asciifolding"]
}
}
}Phải hiểu vì hầu hết bug "tìm mãi không ra" đều nằm ở đây.
Cách debug nhanh nhất là gọi _analyze để xem thực tế index lưu token gì:
bash
GET /products/_analyze
{ "field": "name", "text": "Áo Thun Nam" }Quy tắc quan trọng: analyzer lúc index và lúc search phải tương thích. Đổi analyzer trong mapping không tự động áp lại cho document cũ — chúng vẫn giữ token cũ cho tới khi reindex.
Một cấu hình hay gặp là search_analyzer khác analyzer — thường dùng cho autocomplete với edge n-gram lúc index nhưng không n-gram lúc search.