我们如何将 tasker 搜索引擎从 MongoDB 迁移到 Elasticsearch

我们如何将 tasker 搜索引擎从 MongoDB 迁移到 Elasticsearch

原文:https://medium.com/hackernoon/how-we-migrated-our-tasker-search-engine-from-mongodb-to-elasticsearch-4dd4534449d3

扩展家庭服务招聘平台。

Parafuzo ,我们面临的最大挑战之一是选择最好的专业人员来执行清洁工作。这是我们服务成功的关键,因为必须考虑许多错综复杂的因素,包括客户和任务者的偏好、地理位置、以前的反馈、每周或每月的固定工作、任务者对某些工作类型的能力。

每隔几个月,我们就会坐下来考虑升级我们的 tasker(专业)搜索引擎。早在 2015 年,当我们有一个基于短信的招聘系统时,我们意识到从招聘到工作日期有一个最佳的时间距离。如果通知时间太短,我们将无法自动完成所有工作,我们的运营团队必须手动将任务分配给许多工作。如果离工作地点太远,大约 6 到 10 天,失约率就会飙升,特别是对于前一个周三接受的周二的工作。这些都被我们的引擎覆盖了。

我们之前的设置

我们曾经有一个非常简单和未经优化的引擎,考虑到上述所有规则,它只需要几十秒钟就可以生成一份工作的 20 个最佳专业人员的列表。首先,我们将运行多个查询来确定列表中的排除项,然后以工作位置为基础的地理位置查询将获得 20 公里半径内的可用任务者,按照平均分数对任务者进行排序,并过滤不良反馈、服务要求(任务者知道如何熨烫衣服吗?)、tas ker 可用性等。

然后,我们会考虑任务者的平均分数和任务者的位置进行加权排名,我们更喜欢分数更高的任务者和真正邻近的任务者。如果工作离任务者的家有步行距离,它将得到最大的距离分数,但是任务者的平均分数仍然是更重要的决定因素。

然后,我们为 5 名最佳定位的任务负责人生成报价,该报价将被通知(首先通过短信,然后在 2015 年晚些时候通过 Parafuzo App),最佳专业人员将有最多 4 个小时的时间来接受或拒绝该报价(只要该报价仍然可用)。随着我们越来越接近工作日期,我们会更频繁地向更多的任务负责人发送邀请,总是优先选择最好的专业人员。

输入 Elasticsearch

当我们决定再次升级引擎时,我们有一个新的问题要解决。随着我们平台的发展,我们必须为更好的任务者提供更多的价值(意味着更多的工作),而笨重而缓慢的基于 Mongodb 的引擎将无法满足我们为最佳职业匹配最佳工作的多种要求。

当我们试图打造尖端技术时,即使我们只有 4 个人的工程团队,我们也评估了增强这个引擎的可能性,我们发现 elasticsearch 是最适合这项工作的。

Elasticsearch 使用其强大的查询语言,允许我们过滤必须满足的特定标准,并对维度标准(如分数、任务偏好和距离)进行排序和排名。它做的几乎和我们的引擎以前做的一样(过滤和排序),但是以一种非常专业和有效的方式。

微服务架构

作为我们基础架构的一部分,我们模型的每一个变化都被异步发布到一个在 SQS 排队的 SNS 主题,由凯龙星使用,这是我们的一个小而强大的应用程序,可以跨系统同步 ou 数据。

凯龙星是一个小服务,它使用这样的 SQS 消息:

并把这些资源发布到我们想要的任何地方,在这里,是 elasticsearch。

所以,我们没有去找一份最好的工作,而是去找一份最好的工作。通过这种方式,我们可以更好地控制哪些任务负责人将获得哪些工作,我们将能够为任务负责人提供更好、更近的工作,甚至是连续两个或更多的工作,一个挨着一个,优化我们的市场。

我们通过在几秒钟内同步可用的作业来保证我们的 elasticsearch 是热的,我们用一个真正优化的查询代替了多个 mongodb 查询,为我们做了所有的匹配工作。

Elasticsearch 拥有所有可用职位的信息,如下所示:

并在每次需要时为每个任务者匹配最佳工作。:)

在接下来的几个月里,我将尝试讲述我如何与一个出色的团队在巴西建立了一个家庭服务市场的故事。截至 2017 年 7 月,我离开了 Parafuzo,我觉得我应该与社区分享我收集的知识。通过 Twitter @jturolla 保持联系。


本站为非盈利网站,作品由网友提供上传,如无意中有侵犯您的版权,请联系删除