首页 > 解决方案 > 基于mongodb从弹性搜索中过滤数据

问题描述

我的 ElasticSearch 中有一个项目列表。用户输入查询,我从弹性搜索中获取结果。现在,我有一些用户偏好存储在 mongodb 中,我想根据这些偏好过滤弹性搜索的结果。

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

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

  3. 我选择这个 MongoDB 模式是因为用户可能有一个非常大的项目列表(以百万计),他不想在结果中看到。

我如何通过规模实现这一目标?我需要更改我的架构吗?

标签: mongodbelasticsearchdatabase-design

解决方案


您应该为此使用弹性搜索过滤,您可以在 ES 查询中包含过滤条件,这将减少返回的结果数量,没有

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

请参阅过滤器和查询上下文以及来自同一官方文档的有关过滤器缓存的信息。

Elasticsearch 会自动缓存常用的过滤器,以提高性能。


推荐阅读