使用 nosql/elastic 搜索设计标签系统

Designing tags system with nosql/elastic search

我必须用这个模式设计一个系统。

{
 "documentId" : 123
 "documentType" : "paper"
 "tags" :["abc","xyz"]
 //other meta data of document
}

我将要执行的查询是查找 k 个流行标签、按标签获取文档、添加、删除、更新标签以及获取文档的所有标签。考虑到数据库应该具有高度可扩展性,执行此操作的最佳策略是什么。我正在考虑三种解决方案 -

  1. 在 NoSql DB 中创建一个文档,如 MongoDB 并在标签数组上建立索引。所以 MongoDB 是我的主要数据库
  2. 使用弹性搜索作为主数据库和索引完整文档。然后轻松搜索所有查询。
  3. 将 kafka 与 spark/storm 流解决方案结合使用
  4. 在视频中设计慢速和快速管道 - https://www.youtube.com/watch?v=kx-XDoPjoHw&t=1835s(不确定 spark 是否仅在内部以这种方式工作)

处理此类情况的最佳方法是什么?

视情况而定;

  • 我们需要对标签系统进行自由文本搜索吗?
  • 更新率是多少(每分钟更新的文档数)。

恕我直言, 如果对 Q1 的回答是 Yes 且更新率低,请使用 ES

如果问题 1 的答案是否定的,并且更新率很高,您可能需要考虑 non-Elasticsearch 解决方案。

如果更新率高且Q1为是,考虑non-Elasticsearch解决方案(取决于你的索引大小,很有可能使用ES,而不是它可能是最优的)