Bài viết mới nhất

Tổng 2300 bài
Lập trình 22/09/2026 7 phút

Analyzer trong Elasticsearch: vì sao tìm 'fox jump' lại khớp 'The foxes are jumping'

Inverted index tra theo từ, nhưng 'từ' là gì do analyzer quyết định — và nó quyết luôn truy vấn của bạn khớp hay trượt. Bài này đo thật trên es-lab: standard analyzer tách và hạ chữ thường, english analyzer còn stemming (foxes thành fox), keyword giữ nguyên cả chuỗi. Xem token thật sinh ra, vì sao Email khớp email, và cách edge_ngram tạo autocomplete.

Lập trình 22/09/2026 6 phút

match, term hay match_phrase: vì sao term 'Quick' trả về 0 kết quả dù dữ liệu có

Ba loại truy vấn hay nhầm nhất trong Elasticsearch, và một cạm bẫy kinh điển: term tìm 'Quick' trên trường text trả về 0 kết quả dù tài liệu rõ ràng chứa chữ đó. Bài này đo thật trên es-lab: match phân tích query (quick HOẶC brown), match_phrase đòi đúng thứ tự, còn term khớp token y nguyên không qua analyzer — nên hợp cho keyword, sai cho text.

Lập trình 22/09/2026 7 phút

Relevance và BM25: đọc explain API để hiểu vì sao Elasticsearch xếp kết quả thế này

Elasticsearch không chỉ trả về tài liệu khớp — nó chấm điểm và xếp hạng bằng thuật toán BM25. Bài này đo thật trên es-lab bằng explain API: cùng tìm một từ, tài liệu chứa nó 3 lần được 0,645 điểm, tài liệu câu ngắn chứa 1 lần được 0,554, còn tài liệu câu dài 16 từ chỉ 0,248. Mổ xẻ từng thành phần TF, IDF, field length để biết vì sao.

Lập trình 22/09/2026 6 phút

Bool query: must, should, filter, must_not — và vì sao filter cho _score bằng 0

Truy vấn thật hiếm khi chỉ một điều kiện: tìm 'wireless' NHƯNG chỉ hãng logi, còn hàng, giá dưới 50. Bool query ghép chúng lại. Bài này đo thật trên es-lab bốn mệnh đề must/should/filter/must_not: filter cho _score=0 (không tính điểm, được cache), must/should cộng điểm BM25, và khớp nhiều should thì điểm càng cao. Chọn đúng mệnh đề quyết định cả thứ tự lẫn hiệu năng.

Lập trình 22/09/2026 7 phút

Aggregation trong Elasticsearch: gom nhóm và thống kê 1 triệu bản ghi trong 50 mili giây

Elasticsearch không chỉ tìm kiếm — nó là một cỗ máy phân tích. Bài này đo thật trên es-lab với 1 triệu bản ghi: terms gom nhóm theo danh mục trong 28ms, stats tính min/max/avg/sum trong 40ms, histogram phân bố trong 51ms. Và một cạm bẫy quan trọng: cardinality đếm khách duy nhất trả về 99.776 trong khi thực tế là 100.000 — vì nó là ước lượng, không chính xác.

Lập trình 22/09/2026 6 phút

Mapping Elasticsearch: text hay keyword, và vì sao sort trên trường text lại báo lỗi

Mapping là schema của index Elasticsearch — và chọn sai kiểu làm hỏng truy vấn mà không báo lỗi lúc index. Bài này đo thật trên es-lab: sort trên trường text báo lỗi Fielddata is disabled, số gửi dạng chuỗi bị ES đoán thành text (mất phép toán số học), và đổi kiểu một field đã có là bất khả thi — phải reindex. Hiểu text vs keyword và mapping động vs tường minh.