什么是保存搜索?
保存是用户在高级搜索中找不到所需结果的机制,只需按下“保存我的搜索条件”底部,我们就会保存搜索条件,当相应的数据发布到网站时,我们会通知用户“嘿,用户,该项目( s)您正在寻找的存在现在来访问它”。
已保存的搜索对于具有复杂搜索选项的站点或用户可能希望重新访问或共享动态搜索结果集的站点很有用。
我们有高级搜索,不需要实现新的搜索,我们需要一个良好的性能场景来实现保存搜索机制。
我们有一个网站,用户每天在网站上发布大约 120,000 条帖子,我们将实施 SAVED SEARCH 方案(类似于https://www.gumtree.com/所做的事情),这意味着用户使用高级搜索,但他们找不到他们想要的内容,只想保存搜索条件,如果网站上有任何结果,我们会通知他们。
我们在我们的网站中使用 Elastic search 和 Mysql。我们仍然没有实施任何东西,只是想找到可以处理高约会率的好解决方案,另一方面**问题是工作规模,因为我们每天有很多帖子,而且我们猜测用户经常使用此功能,因此我们正在寻找可以轻松处理这种规模的工作并具有高性能的良好场景。
建议的解决方案,但不是最好的
一个快速的解决方案是我们将保存的搜索保存在 Elastic 中的保存搜索索引中,然后运行一个 cronjob,为所有保存的搜索项从 Posts-index-Elastic 获取结果,如果有任何结果,将记录推送到 RabbitMq 到通知等效用户。
在用户将项目发布到网站时,我们检查它是否存在已保存的搜索在 Elastic 中的保存搜索索引中,如果匹配,我们将记录放入 RabbitMq,(这种方法的主要问题是它可以匹配一个巨大的插入网站的每个帖子中保存的搜索次数)。
我最关心的是规模和性能,我会很感激与我分享你关于这个问题的经验和想法。
我对规模的估计
- 已保存搜索的有效期为三个月
- 每天至少 200,000 次保存搜索
- 所以我们有9,000,000 条活动记录
如果您与我分享您的想法,我将不胜感激
*仅供参考** - 我们的队列作业也有 RabbitMQ - 我们的 ES 服务器足够好,有 64GB RAM