一尘不染

像标签一样实现Twitter和Facebook

elasticsearch

这看起来真的很愚蠢..并且没有研究的问题,但是请相信我不是。我对此做了一些研究。其中之一是以下链接:http : //www.quora.com/Twitter-1/How-does-
Twitter-implement-hashtags

另外,我不是在这里寻找完整的解决方案。.我会尽力而为,但是我只需要一些指导,只是想知道我应该采用哪种方法?

我想为我的应用程序实现Twitter,现在甚至实现Facebook之类的标签。.以便用户可以添加带有标签的消息,而其他人可以在它们上搜索..诸如趋势和相关内容。

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

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


阅读 263

收藏
2020-06-22

共1个答案

一尘不染

从MongoDB开始是将解析每个消息以获取用户使用的主题标签,并将其放入文档的子数组中。状态更新示例:

彼得

2014年4月29日12:28:34

朋友您好,我参观了#华盛顿的#tradeshow并喝了美味的#咖啡

该消息在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用于确定哪些主题趋向或不流行的确切算法是不公开的。根据各种社交媒体分析师的说法,他们也经常更改它们,因此我们可以假设它们现在已经很复杂。

这意味着我们无法帮助您自己提出算法。但是,当您已经在考虑一种算法来计算主题标签的“整洁度”时,我们可以帮助您找到一个好的实现。

2020-06-22