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

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

Inverted index: vì sao Elasticsearch tìm toàn văn nhanh hơn LIKE của SQL

LIKE '%từ%' trong SQL phải quét từng dòng — chậm dần khi dữ liệu lớn. Elasticsearch lật ngược bài toán bằng inverted index: mỗi từ trỏ thẳng tới danh sách tài liệu chứa nó. Bài này đo thật trên es-lab với 100.000 tài liệu: truy vấn match dùng inverted index chạy 1 ms, còn wildcard quét từ điển term mất 8-10 ms — cùng kết quả, và khoảng cách lớn dần theo quy mô.

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.