Elasticsearch là near real-time, không phải real-time. Document chỉ search được sau khi refresh, mặc định 1 giây một lần.
Cơ chế: document ghi vào in-memory buffer + translog trước, refresh mới đẩy buffer thành một Lucene segment và segment đó mới search được.
Ba cách xử lý, theo mức độ nên dùng:
bash
# 1. Doi refresh cua doc vua ghi (tot nhat cho luong "ghi xong xem ngay")
PUT /products/_doc/1?refresh=wait_for
# 2. Ep refresh ngay - CHI dung trong test
POST /products/_refresh
# 3. Doc bang GET theo _id - luon thay ngay, khong can refresh
GET /products/_doc/1refresh=true sau mỗi lần ghi là sai lầm kinh điển: nó tạo ra vô số segment nhỏ, ép merge liên tục và giết throughput.
Ngược lại, khi bulk load hàng triệu record thì nên tăng refresh_interval lên 30s hoặc -1 rồi trả về sau khi nạp xong.