通过文档数据库中的多个标签进行高效搜索

问题描述

这个问题不是关于某个文档数据库的提供者,而是一个关于通用文档数据库数据设计的问题。

想象一个简单的文档数据库,它只支持

  • 分区
  • 身份证

现在想象一个拥有博客文章的简单场景,每篇博客文章都带有多达 10 个标签。这是博客文章文档:

{
   "id": 1,"partition": "nielsbrinch","title": "My First Blog Post","content": "<div>Here is my blog content</div>","tags": ["tech","personal","2021","short"]
}

在这个简单的文档数据库中,实际上没有任何搜索。您可以从一个分区中获取所有文档,然后查看内容,因此如果您想通过标签搜索,则必须获取所有文档并检查内容

但是,当您保存文档时,您可以为每个标签在另一个分区中保存一个副本。它看起来像这样(注意分区是“nielsbrinch-tech”):

{
   "id": 1,"partition": "nielsbrinch-tech","short"]
}

这意味着相同的数据出现了 5 次。一个在原始分区中,每个标签再一次。那没问题。这意味着所有标记为“tech”的博客文章都已准备好在一个分区中,并且可以以最佳效率获取

然而,现在假设我有 100,000 篇博文,每篇博文有 20 个标签。不过,没关系,我们可以复制博客文章 20 次。空间便宜。

想象一下,现在我希望能够找到具有两个标签的任意组合的帖子。也许我想(有效地)获得所有标有“技术”和“个人”标签的帖子。

如果我要复印文件并为每个组合制作副本,那么文件数量会爆炸,而且太多了。所以在我看来,这不是一个解决方案。

那是什么?

也许是一些巧妙的映射文档或带有每个组合的匹配集合的文档或类似的东西。我什至不知道从哪里开始,所以我希望有人可以分享一些有关文档数据库设计的理论。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...