Keyword search khớp term chính xác; vector search khớp ý nghĩa bằng cách so khoảng cách giữa các embedding.
Câu "laptop cho dân thiết kế" khớp được document viết "MacBook Pro cho designer" dù không chung từ nào.
json
"embedding": { "type": "dense_vector", "dims": 768, "index": true, "similarity": "cosine" }json
{ "knn": { "field": "embedding", "query_vector": [...], "k": 10, "num_candidates": 100 } }Thực tế hybrid search cho kết quả tốt nhất: chạy cả BM25 và kNN rồi hợp nhất bằng RRF. Vector giỏi ý nghĩa nhưng dở với tên riêng, mã SKU và số phiên bản — đúng những thứ BM25 làm tốt.
Các chi phí phải tính: sinh embedding tốn thời gian và tiền cho mọi document; HNSW index tốn thêm heap và RAM đáng kể; và đổi model embedding là phải reindex toàn bộ.
Lời khuyên thực dụng: làm BM25 cho đúng trước, đo bằng rank evaluation, rồi mới thêm vector nếu số liệu cho thấy vẫn thiếu.