Thời điểm đánh index khi sử dụng Elasticsearch
Chào mọi người, mình đang dùng Elasticsearch để phục vụ chức năng tìm kiếm user trong hệ thống. Hiện tại mình đang làm theo hướng là cấu hình một con cronjob để chạy vào lúc 12h tối để đánh lại index cho Elasticsearch (Move dữ liệu user được đăng ký mới trong ngày hôm đó sang Elasticsearch server). Vấn đề bất cập ở đây là khi có người dùng tạo tài khoản mới, vì chưa được đánh index nên người dùng khác sẽ không tìm thấy người đó trên hệ thống cho đến khi nó được đánh index. Mong mọi người suggest cho mình giải pháp nào tốt hơn với, cảm ơn (bow)
1 ANSWERS
@bs90 Cách này mình có nghĩ đến nhưng cứ mỗi lần tạo hay update user mà update lại index thì phải call API để update index của ES, như thế thì người dùng phải đợi cho đến khi index ES được cập nhật lại thì tiến trình create hay update user mới thành công cũng không hay lắm.
@vhung Theo kinh nghiệm của mình mình thì đánh lại index khi có một user thay đổi (create hay update) diễn ra nhanh mà nhỉ. Nếu vì một lý do nào đó việc tạo hoặc update index cho 1 user mất thời gian quá (cỡ 500ms đổ lên chẳng hạn) thì bạn có thể dùng delayed job. Tức là sau khi user được tạo hoặc update thì bạn tạo ra một delayed job A (có nội dung là update lại index trên elasticsearch) rồi response thành công cho user luôn.
Sau đó các worker sẽ tự tìm delayed job A để chạy. Nếu lượng worker đủ lớn để handle hết các job thì việc delay cũng sẽ không quá đáng kể (Sau khi user tạo tài khoản xong trong lúc gõ từ khoá để search thì job A đã chạy xong rồi chẳng hạn )