我正在研究Meteor中的一个项目,该项目使用ElasticSearch作为搜索引擎 . 我需要网站上的搜索功能才能进行“堆叠”搜索 . 因此,例如,可以通过“堆叠”用户的名称来搜索某个“组”中的用户的文件,然后是组名,并以文件名或文件中的某些内容结束 .

现在,在MongoDB数据库中,组,用户和文件将存储在单独的集合中,并通过ID相互关联 . 但是,ElasticSearch使用分布式数据存储,其中所有内容都是'flat' . 这使得有必要对数据进行非规范化/进行应用程序端连接/等 . (https://www.elastic.co/guide/en/elasticsearch/guide/current/relations.html) .

My question is :哪种方法最好......

  • 非规范化数据,使用巢等 .

  • 因此,当将数据传输到elasticsearch数据存储区时,我会复制数据,并将每个父元素替换为添加了数据的新元素 . FOR EX . 如果有人评论让我们说一个组中的帖子 . 服务器必须添加到一般注释列表中找到post对象,将注释附加到它,并将post对象重新添加到数据库更新包含post对象的group对象,该对象应该包含注释做同样的事情对于用户对象(因为我希望能够在组,用户等上堆叠搜索) . Basically 当添加或删除某些内容时,我必须更新数据库中与其相关的每个对象 .

  • 运行多个弹性搜索查询(https://www.elastic.co/guide/en/elasticsearch/guide/current/application-joins.html)以检索我想要的数据 .

  • 只需对每个分散集合执行搜索查询,并在服务器端使用javascript来比较数组并生成搜索结果 .

**注意:这是为了扩展到相对中等级别的负载/使用 . 因此,要搜索数十万个数据实例 . 虽然,如果这可以更大规模(数百万),那将是伟大的!

如果我对任何事情的理解是错误的,请纠正我,并感谢您阅读所有这些!