在Elasticsearch中标记/标记文档有哪些选项?

问题描述 投票:0回答:1

假设我有一个博客的前端应用程序,并且将博客文章存储在Elasticsearch实例中(这是一个示例)。

我希望多个用户能够将某些博客文章标记为收藏,而超级用户则可以标记博客文章。对于标记为收藏,只有进行标记的用户才能看到已标记。对于标记,如果一个用户标记了它,则所有其他用户都将其标记为已标记。

我正在考虑为标记添加boolean field,并为标记添加具有用户ID的array field。这样,我可以使用boolean query查找已标记的帖子,对于用户喜欢的帖子,我可以使用exists query

我对Elasticsearch来说还很陌生,所以我不确定这是否能在数以百万计的帖子中表现出色。还有什么其他选择?

elasticsearch
1个回答
0
投票

要创建喜欢的系统,一种解决方案是使用blog_id将数据存储在不同的索引中用户身份created_at

通过这种方式,您可以轻松添加删除和搜索。

我希望多个用户能够将某些博客帖子标记为收藏夹

用户1单击博客2的收藏夹链接,系统将存储在“收藏夹”索引{“ user_id”:1,“ blog_id”:2,2,“ created_at”:“ 2019-10-02 12:00:02” }

只有进行标记的用户才能看到标记的标记。

如果将user_id-blog_id连接起来,则可以使用get by id进行搜索;也可以使用blog_id,user_id进行搜索,并且如果显示的博客被阅读的用户标记为收藏,则可以知道记录是否存在。与您知道的user_id一样,列表页面也是如此,并且在构建blog_ids列表后将显示,您可以搜索并检索一个列表,该列表将在您显示博客列表时使用。

即使对于数十亿个帖子,此解决方案也将具有良好的性能。

如果您有标记,也可以用相同的方式标记博客文章并放置类别字段。

取决于您拥有多少标志和哪种标志,可以考虑使用类别字段['favorite','flag',...]保存在相同的索引中,或者保存在不同的索引中。

另外要检查的是使用定期索引(每月,每周或每天)取决于要存储的文档数量以及要进行的更新(添加/删除收藏夹)数量。如果您对它们有不良活动,则可以在以后每年汇总一次索引。最后一件事,也许考虑使用缓存来处理“收藏夹”按钮的疯狂单击,这可能导致添加/删除文档,这将增加索引中已删除文档的数量,这会使索引变慢。

© www.soinside.com 2019 - 2024. All rights reserved.