使用elasticsearch进行基于用户的建模

时间:2016-06-13 14:48:07

标签: mysql elasticsearch web-applications

我想将elasticsearch添加到我现有的webapp中,目前基于mysql。
为简化起见,我的应用程序是一种博客容器:每个用户都会写一些帖子,这些帖子可以是公开的或私有的。 一旦用户订阅了另一个用户,他的时间线就会充满了他和他朋友的帖子。帖子可以评论或评分。评论也可以评分。
现在,我需要在elasticsearch中索引这样的时间线,因为我想提供一个好的搜索引擎,基于帖子和评论内容,帖子和评论评级以及用户的数据,但我有一些麻烦,想弄清楚如何最好地模拟我的弹性搜索索引

显然,“时间轴”和“帖子”之间的关系是多对多关系,因为根据社交图,每个用户的时间轴可能包含多个帖子。

阅读elasticsearch文档,我发现了一些不同的解决方案,但我不确定其中的任何一个。

  1. 非规范化。
    我的第一次尝试是以这种方式对数据进行非规范化:在ES索引中创建一个“post”类型,并将其与具有“timeline”的父子关系链接起来。 这样我就没有重复的帖子了,但是每个用户 - 用户关系都有一个“时间轴”对象。此外,作为一个rdbms用户,我以为每个用户只有一个时间轴对象,但不幸的是,这不是真的:elasticsearch为每个帖子创建一个时间轴对象,具有相同的id值但路由不同(但可能是这个是我的错,因为我对ES很新。
  2. 基于用户的数据
    另一种方法是基于用户的数据,即为每个用户创建(假的)索引。但同样,根据文档,我看到用户和时间线之间的关系是一对多的(参考:https://www.elastic.co/guide/en/elasticsearch/guide/current/shared-index.html) 我错过了什么吗?
  3. 所以,回顾一下:我的应用程序有用户,帖子,评论和评级。用户的时间表由订阅的用户帖子组成。由于帖子可以是私人的 - 即只有订阅的用户可以阅读它们,我想基于“时间轴”进行搜索。为此,我想将我的数据建模为elasticsearch。

    对它进行建模的最佳方法是什么?

0 个答案:

没有答案