mongodb - 基于mongodb从弹性搜索中过滤数据
问题描述
我的 ElasticSearch 中有一个项目列表。用户输入查询,我从弹性搜索中获取结果。现在,我有一些用户偏好存储在 mongodb 中,我想根据这些偏好过滤弹性搜索的结果。
假设,我从 Elasticsearch 获得了一个项目列表(item_ids)。
Mongo DB 具有以下架构。
id, user_id, item_id
我选择这个 MongoDB 模式是因为用户可能有一个非常大的项目列表(以百万计),他不想在结果中看到。
我如何通过规模实现这一目标?我需要更改我的架构吗?
解决方案
您应该为此使用弹性搜索过滤,您可以在 ES 查询中包含过滤条件,这将减少返回的结果数量,没有
- 您必须从 ES 返回庞大的数据集,然后在 MongoDB 中进行过滤,这是一个两步过程,并且在 ES 和 mongo 方面都很昂贵。
- 使用 ES 的过滤器,它将返回更少的数据,这将避免在 mongoDB 进行额外的后处理,并且过滤器首先执行,默认情况下缓存在弹性搜索端,因此您不需要像 redis 等进一步的缓存解决方案。
请参阅过滤器和查询上下文以及来自同一官方文档的有关过滤器缓存的信息。
Elasticsearch 会自动缓存常用的过滤器,以提高性能。
推荐阅读
- python - 如何为字典中的键分配多个值
- excel - 将单元格中的信息插入代码
- google-sheets - 计算 SUM() 或类似函数时将跳过一列的公式
- r - 带有下拉选择的 R 闪亮可编辑表
- ios - iOS 14.2+ MaterialComponents 密码字段显示空白键盘
- javascript - 当要排序的值是计算结果时如何在Vue中对列进行排序
- python - 获取重复索引列表的列表
- node.js - 尽管 buildpack 在本地的 Docker 中构建和运行良好,但 Google Cloud Functions 有时找不到 @google-cloud/* 依赖项
- google-bigquery - Bigquery Stackoverflow - 按类别查询已关闭的问题
- assembly - 内部重定位(类型:OFFST_IMM)与汇编器中的寄存器变量