基于mongodb的弹性搜索过滤数据

时间:2020-07-14 05:09:27

标签: mongodb elasticsearch database-design

我在ElasticSearch中有一个项目列表。用户输入查询,然后从弹性搜索中获取结果。现在,我在mongodb中存储了一些用户首选项,我希望根据这些用户首选项过滤弹性搜索的结果。

  1. 假设我从Elasticsearch获得了一个项目列表(item_ids)。

  2. Mongo DB具有以下架构。 id, user_id, item_id

  3. 我之所以选择这种MongoDB模式,是因为用户可能有一个很大的项目列表(按百万个顺序),而他不想在结果中看到这些项目。

如何实现规模化?我需要更改架构吗?

1 个答案:

答案 0 :(得分:1)

为此,您应该使用elasticsearch过滤,您可以在ES查询中包括过滤条件,这样可以减少返回结果的数量

  1. 您必须从ES返回巨大的数据集,然后在MongoDB中进行过滤,这是两步过程,在ES和mongo方面都非常昂贵。
  2. 在ES上使用过滤器,它将返回较少的数据,从而避免在mongoDB上进行额外的后处理,并且过滤器首先执行,并且默认情况下在elasticsearch端缓存,因此您不需要进一步的缓存解决方案,例如redis等。

请参阅filter and query context,并从同一正式文档中获得有关过滤器缓存的信息。

Elasticsearch将自动缓存常用的过滤器, 加快性能。