实现twitter和facebook就像hashtags一样

时间:2014-04-28 12:38:13

标签: java mysql mongodb database-design elasticsearch

这可能看起来很愚蠢..而且这个问题没有研究,但相信我并非如此。我已经做过一些研究。其中一个将是以下链接: http://www.quora.com/Twitter-1/How-does-Twitter-implement-hashtags

此外,我不是在寻找一个完整的解决方案..我会努力工作,但我只是需要一些指导,只想知道我应该采用哪种方式?

我想实现twitter,现在甚至像我的应用程序那样使用hashtags。所以用户可以使用主题标签添加消息,而其他人可以搜索它们。就像趋势和相关内容一样。

我们在存储技术堆栈中使用Mysql,mongo和elasticsearch。任何想法我怎么能开始实现这个?我需要另一个存储空间吗?一种方法是我可以将我的hastags存储在db中,然后在Elasticsearch中对它们进行文本搜索。

在这个领域有更多经验的人可以在这里提出什么建议?

1 个答案:

答案 0 :(得分:17)

MongoDB的一个开端是解析用户使用的主题标签的每条消息,并将它们放入文档的子数组中。示例状态更新:

  

彼得

     

2014年4月29日12:28:34

     

朋友们,我参观了#washington的#tradeshow,喝了一顿美味的#coffee

此消息在MongoDB中如下所示:

{
    author: "Peter",
    date: ISODate("2014-04-29 12:28:34"),
    text: "Hello friends, I visited the #tradeshow in #washington and drank a delicious #coffee",
    hashtags: [
        "tradeshow",
        "washington",
        "coffee"
    ]
}

然后,当您在db.collection.hashtags上创建索引时,您可以快速搜索包含其中一个主题标签的所有邮件。您可能希望按日期排序和限制结果,以便用户首先查看最新结果。当你把它作为一个复合索引(也包括日期)时,你也可以加快速度。

如何实施“趋势”主题是一个非常复杂的问题。这也是非常主观的,取决于你会认为“趋势”。 Twitter或Facebook用于确定哪些主题趋势的确切算法不公开。根据各种社交媒体分析师的说法,他们也经常更改它们,因此我们可以假设它们现在非常复杂。

这意味着我们无法帮助您自己提出算法。但是当你已经有一个算法来计算一个标签的“时尚性”时,我们可以帮助你找到一个好的实现。