Kết hợp điểm text với tín hiệu nghiệp vụ bằng function_score, đừng thay thế hẳn điểm text.
json
{
"function_score": {
"query": { "match": { "name": "laptop gaming" } },
"functions": [
{ "field_value_factor": {
"field": "sales_30d", "modifier": "log1p", "missing": 1 } },
{ "filter": { "term": { "in_stock": true } }, "weight": 1.5 }
],
"boost_mode": "multiply"
}
}log1p rất quan trọng: không có nó, sản phẩm bán 10.000 cái sẽ đè bẹp mọi tín hiệu liên quan và kết quả tìm kiếm biến thành bảng xếp hạng bán chạy.
Các tín hiệu thường dùng: doanh số gần đây, rating, còn hàng, và độ mới (gauss decay trên created_at).
Lưu ý về vận hành: field dùng để boost phải được cập nhật thường xuyên, mà mỗi lần update là reindex cả document. Với chỉ số đổi liên tục, cân nhắc cập nhật theo lô hằng giờ thay vì realtime.
Chỉnh xong phải đo bằng dữ liệu, không phải bằng cảm nhận — xem câu tiếp theo về rank evaluation.