0

我有一个 dynamodb 模型来源。现在我通过 ElasticSearch 查询它们,所以我可以进行地理搜索。

给我 30 公里圈内的所有模型。

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

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

4

1 回答 1

0

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

一种方法是预热必须向用户显示的内容。

解决方案:

后台作业每 x 小时运行一次,它使用具有给定参数(如年龄、性别、兴趣、位置等)的搜索查询从 Elastic Search 中获取所有可能的结果。有关用户已经看到的信息可以存储在布隆过滤器中。所有尚未看到的记录都可以存储在缓存中,当用户获取下一条记录时,将返回缓存的实体。每当用户看到一个人时,该人就会被添加到布隆过滤器中,这样就不会再次显示同一个人。

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

  1. 结合超级明星功能

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

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

    这是一个很难解决的问题,我们可以添加某种随机化或参数(例如上次更新,或者保留一个指针,表明我们在上一个作业中已经遍历了多少用户,这次从那个计数器的 +1 开始。)这可以确保每当我们查询弹性搜索结果时几乎是随机的,并且前几个并不总是相同的。

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

    假设用户更改了他的偏好/位置,我们应该能够使缓存无效并用新的结果重新加热缓存。

于 2019-05-23T04:36:43.873 回答