mongodb - 基于mongodb的 Elasticsearch 过滤数据

标签 mongodb elasticsearch database-design

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

  • 假设,我从Elasticsearch获得了一个项目列表(item_ids)。
  • Mongo DB具有以下架构。id, user_id, item_id
  • 我选择此MongoDB模式是因为用户可能有一个很大的项目列表(按百万个顺序),他不想在结果中看到这些项目。

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

    最佳答案

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

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

  • 请参阅filter and query context并从同一官方文档中获取有关过滤器缓存的信息。

    Frequently used filters will be cached automatically by Elasticsearch, to speed up performance.

    关于mongodb - 基于mongodb的 Elasticsearch 过滤数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62888443/

    相关文章:

    mongodb - 使用官方 C# 驱动程序存储小文件时 MongoDb gridfs 中的 block 开销

    elasticsearch - 如何查看已索引的分析数据?

    ruby-on-rails - 带mongoid的elasticsearch-rails-本文的未定义方法as_indexed_json

    mongodb - 在使用 java api 的 mongodb 版本 3 中,我们如何在查询时给出提示

    node.js - MongoDB (noSQL) 何时拆分集合

    java - Elasticsearch 和 Java API 中时间戳字段的每小时聚合

    mysql - 我应该如何在mysql表设计中存储问题和答案

    mysql - 不删除数据库表

    sql-server - 单个 SQL Server 命名实例上的多个数据库

    javascript - 将平面结构转换为对象