Tôi đang làm việc trên trang web giống như Airbnb và tôi đang trong quá trình viết lại hệ thống tìm kiếm dựa trên SQL trong nhà của chúng tôi với Algolia. Nó đã được một hành trình thực sự dễ chịu cho đến nay, như tôi đã quản lý để loại bỏ rất nhiều mã di sản và thuê ngoài nó, với kết quả tuyệt vời. Tuy nhiên, có một phần quan trọng trong hệ thống tìm kiếm của chúng tôi mà tôi không chắc chắn có thể được thực hiện với Algolia.Tính khả dụng theo dõi với Algolia
Nội bộ, chúng tôi lưu trữ tính khả dụng/không có sẵn (và giá) của mỗi ngày cho từng nội dung dưới dạng một hàng trong cơ sở dữ liệu. Điều này có nghĩa bảng availabilities
của chúng tôi trông như thế này:
asset_id | date | status | price_cents
-------- | ---------- | ----------- | -----------
1 | 2017-02-09 | available | 15000
1 | 2017-02-10 | available | 15000
1 | 2017-02-11 | unavailable | NULL
1 | 2017-02-12 | available | 20000
Khi người dùng tìm kiếm các thuộc tính có sẵn, họ bước vào một phạm vi ngày và tùy chọn, một mức giá.
Hiện tại, chúng tôi đang truy vấn bảng availabilities
và đảm bảo rằng tất cả các ngày trong phạm vi ngày đều có sẵn cho nội dung đó (nghĩa là số ngày có sẵn bằng số ngày trong phạm vi). Nếu người dùng nhập một phạm vi giá, chúng tôi cũng đảm bảo rằng giá trung bình cho những ngày đó nằm trong phạm vi được yêu cầu. Truy vấn SQL khá phức tạp, nhưng đây là những gì nó làm vào cuối ngày.
Tôi đã cố gắng sao chép điều này bằng Algolia, nhưng không thể tìm thấy bất kỳ tài liệu nào về tính năng tương tự. Trong thực tế, tôi đang phải đối mặt với hai vấn đề riêng biệt ngay bây giờ:
- tôi không có cách nào để đảm bảo tất cả các ngày trong phạm vi ngày được cung cấp có sẵn, vì Algolia có ít hoặc không có kiến thức về các hiệp hội, và
- Tôi có không có cách nào để tính toán (và truy vấn) giá trung bình cho phạm vi ngày được cung cấp, bởi vì nó phụ thuộc vào đầu vào của người dùng (tức là phạm vi ngày).
Có cách nào để đạt được điều này với Algolia không? Nếu không, là nó khả thi để sử dụng SQL hoặc công cụ khác kết hợp với Algolia để đạt được kết quả mong muốn? Tất nhiên, tôi có thể làm tất cả những điều này với Elasticsearch, nhưng Algolia quá nhanh và dễ dàng đến nỗi tôi ghét phải tránh xa nó vì những vấn đề này.
Thật không may, chúng tôi lưu trữ availabilities cho cả năm. Có cách nào tôi có thể sử dụng SQL để lọc trước hoặc sau Algolia? –
Sau đó, bạn sẽ nhìn vào 66795 phạm vi ngày cho mỗi căn hộ, mà có lẽ sẽ là quá đắt tiền, thực sự. – Jerska
Danh sách các kết quả có luôn luôn thấp (<1000) không? Ví dụ, bạn cũng giới hạn bởi vị trí? Nếu bạn đang có, bạn có thể có thể sử dụng Algolia để có được một danh sách các objectID khớp với truy vấn văn bản + vị trí và gửi danh sách các ID này tới MySQL để tính toán các ID có sẵn trong danh sách này. – Jerska