Asked Aug 12th, 2018 8:44 AM 247 0 1
  • 247 0 1
0

Thời điểm đánh index khi sử dụng Elasticsearch

Share
  • 247 0 1

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


Answered Aug 12th, 2018 9:21 AM
Accepted
+3

Mỗi lần create hay update user thì add hay update lại index trên index ES là được mà bạn 😃

Share
Avatar Van Hung @vhung
Aug 12th, 2018 9:34 AM

@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.

0
| Reply
Share
Aug 12th, 2018 11:33 AM

@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 😃)

+1
| Reply
Share
Avatar Van Hung @vhung
Aug 16th, 2018 9:10 AM

@bs90 Mình làm theo cách của bạn được rồi, mỗi lần create hay update data user thì mình gọi API update lại index, ném nó vào job chạy bất đồng bộ, vừa không ảnh hưởng đến trải nghiệm người dùng mà dữ liệu vẫn được cập nhật mới, cảm ơn bạn nhiều (bow)

+2
| Reply
Share
Viblo
Let's register a Viblo Account to get more interesting posts.