Tinder如何知道曾见过谁? (后端)

时间:2019-05-22 15:52:29

标签: node.js aws-lambda nosql amazon-dynamodb tinder

我有模型的动力源。 现在,我通过ElasticSearch查询它们,以便进行地理搜索。

将30公里范围内的所有型号都给我。

现在,用户拥有一个Tinder系统。因此可以擦拭。我如何知道不再需要检索哪些模型?做这个的最好方式是什么?

一张已经看过地图的桌子? 然后我从ElasticSearch中减去,得到一个包含100张卡片的数组并进行比较?如果他已经看过全部100个,则再次询问ElasticSearch? 那没有什么意义。用户看到的越多,请求进行的时间就越长。你怎么做到的?

1 个答案:

答案 0 :(得分:0)

这是一个基于观点的问题,因此是我基于观点的答案。

执行此操作的一种方法是预热,必须向用户显示。

解决方案:

每隔x个小时运行一次后台作业,该作业使用带有给定参数(例如年龄,性别,兴趣,位置等)的搜索查询从Elastic Search中获取所有可能的结果。有关用户已经看到的内容的信息可以存储在{{ 3}}。所有尚未看到的记录都可以存储在缓存中,并且当用户提取下一条记录时,将返回缓存的实体。每当用户看到一个人时,该人就会被添加到bloom筛选器中,以便不再显示该人。

但是,这是非常静态的方法,将需要一些额外的思考

  1. 结合了超级明星功能

    每当A将B标记为超级喜欢时,无论将A添加到B的要显示列表中的任何内容。

  2. 每当查询弹性搜索时批处理作业将运行,则前几个结果很可能与前一个相同

    这是一个棘手的问题,我们可以添加某种随机化或参数(例如上次更新,或保留一个指针,该指针指示我们在上一份工作中已经遍历了多少个用户,这次是从+1开始)计数器)。这样可以确保每当我们查询弹性搜索结果时,搜索结果几乎都是随机的,而前几个搜索结果并不总是相同。

  3. 可以在需要时触发批处理作业。

    比方说,用户更改了自己的偏好/位置,我们应该能够使缓存无效并以新的结果重新武装缓存。

相关问题