Ba lựa chọn, chọn theo yêu cầu:
1. completion suggester — nhanh nhất, dựng FST trong memory, phù hợp khi chỉ cần gợi ý tiền tố từ một danh sách.
json
"suggest": { "s": { "prefix": "lap", "completion": { "field": "suggest", "fuzzy": { "fuzziness": 1 } } } }2. search_as_you_type — field type dựng sẵn n-gram, khớp cả cụm ở giữa, dễ dùng hơn completion và vẫn nhanh.
3. Edge n-gram analyzer tự cấu hình — linh hoạt nhất, kết hợp được với filter và boost nghiệp vụ.
json
"analyzer": { "autocomplete": {
"tokenizer": "standard",
"filter": ["lowercase", { "type": "edge_ngram", "min_gram": 2, "max_gram": 15 }]
}}Điểm bắt buộc với edge n-gram: search_analyzer phải KHÁC analyzer. Không tách ra thì chuỗi user gõ cũng bị n-gram và kết quả loạn hẳn.
Đánh đổi: completion tốn heap và không filter được linh hoạt; n-gram làm index phình đáng kể. Với e-commerce cần lọc theo category và còn hàng, n-gram thường là lựa chọn thực tế.