Ba yếu tố: term frequency (từ xuất hiện nhiều trong document thì điểm cao), inverse document frequency (từ hiếm trong toàn index thì có trọng số lớn), và field length (field ngắn mà chứa từ đó thì điểm cao hơn).
So với TF-IDF cũ, BM25 có saturation: lặp từ 100 lần không cho điểm gấp 100 lần.
Debug điểm bằng explain:
GET /products/_search
{ "explain": true, "query": { "match": { "name": "laptop" } } }Một hệ quả hay gây bất ngờ: điểm được tính trên từng shard, nên với index nhiều shard và dữ liệu ít, cùng một document có thể xếp hạng khác nhau tuỳ shard vì IDF khác nhau. Test trên index nhỏ thấy thứ tự lạ thường là do việc này (dùng ?search_type=dfs_query_then_fetch để kiểm chứng).
Điểm BM25 không so sánh được giữa các query khác nhau — không có thang tuyệt đối, nên đừng đặt ngưỡng kiểu "score > 5 mới hiển thị".