elasticsearch,database-design,Mongodb,elasticsearch,Database Design" /> elasticsearch,database-design,Mongodb,elasticsearch,Database Design" />

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

基于mongodb的弹性搜索数据过滤,mongodb,elasticsearch,database-design,Mongodb,elasticsearch,Database Design,我的ElasticSearch中有一个项目列表。用户输入查询,我从弹性搜索中获取结果。现在,我在mongodb中存储了一些用户偏好,我想根据这些偏好过滤弹性搜索的结果 假设,我从Elasticsearch获得一个项目列表(项目ID) MongoDB具有以下模式。 id、用户id、项目id 我选择这个MongoDB模式是因为用户可能有一个非常大的项目列表(以百万计),而他不希望在结果中看到这些项目 我如何通过规模实现这一点?是否需要更改我的架构?您应该使用elasticsearch筛选。为此

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

  • 假设,我从Elasticsearch获得一个项目列表(项目ID)

  • MongoDB具有以下模式。
    id、用户id、项目id

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


  • 我如何通过规模实现这一点?是否需要更改我的架构?

    您应该使用elasticsearch筛选。为此,您可以在ES查询中包含筛选条件,这将减少返回的结果数,而不使用这些条件

  • 您必须从ES返回大量数据集,然后在MongoDB中进行过滤,这是一个两步过程,在ES和mongo端都很昂贵
  • 使用ES的过滤器,它将返回更少的数据,这将避免在mongoDB进行额外的后处理,过滤器首先执行,默认情况下缓存在elasticsearch端,因此您不需要像redis等进一步的缓存解决方案
  • 请参考同一官方文件中有关过滤器缓存的信息

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


    如前所述,用户在首选项中可能有一百万个项目ID。如何在弹性搜索的筛选器请求中发送数百万个项目ID?我在这里遗漏了什么吗?@AviYadav数百万个偏好ID听起来不太好,这意味着你的基本设计本身有缺陷。这不完全是用户偏好。但是,我从用户活动中获得这些数据。我不能给你确切的用例。但是,假设它类似于用户以前访问过的任何项目页面(历史记录),它将不断增长。我假设每天有300个这样的条目,一个月后将变成大约10000个条目。我也觉得这个设计有一些缺陷。你有什么建议吗?@AviYadav这不是一个正确的设计,是一个关于设计的大问题,建议你按照这个思路来理解SO的用法,以及在哪里可以进行后续询问question@AviYadav另外,请不要忘记投票并接受答案:)