标记CouchDB的模式。这会有用吗?

时间:2010-10-18 19:41:27

标签: couchdb tagging

我想知道以下场景是否适合CouchDB?我正在构建一个基于Web的闪卡应用程序。用户可以创建抽认卡(一边是问题,另一边是回答)。 Flashcard作者和其他用户可以使用关键字/短语标记抽认卡。用户可以根据标签检索/生成卡的虚拟堆栈,包括支持布尔搜索(tagA和tagB NOT tagC OR tagD)。数据库将(显然)存储卡,但也存储用户,标签和可能的虚拟堆栈卡的“文档”。我已经阅读了有关CouchDB中标记的其他SO问题,但我想知道以下是否会起作用或写密集...(1)卡文档包含分配给该卡的JSON数组标记字符串,(2)标记文档包含JSON数组卡使用标签,(3)标签文件还具有存储使用该标签的卡的数量的元素,(4)无论何时创建新卡或将标签添加到卡,相关的卡标识符也被添加到标签文档和标签文档的CardCount元素递增。 (5)生成由卡ID和由标签串索引的标签索引的卡的永久视图。如果我知道卡ID,我可以快速找到该文档,并可以快速获得相关标签的列表。如果给我一个标签字符串,我可以快速找到标签文档,然后使用标签获取卡ID列表。对于更精细的布尔搜索,我可以检索布尔搜索中每个标记的卡ID列表,然后在客户端上找出这些集合的联合/交集/等。这看起来合情合理吗?我知道使用Lucene的全文索引选项,但如果可能的话,我想避免这种情况。感谢。

1 个答案:

答案 0 :(得分:1)

我认为没有充分的理由让事情变得复杂 - 只需在每张卡片上创建一个文档,然后在这些文档中添加标签。创建一些存储的视图,以便在需要时计算/显示标签及其使用编号。

这样你只需要:

卡片文件:

问题 回答 标签[]

的观点:

显示卡片信息 显示(也许是最流行的)标签 每个标签显示卡片

只要您的文档结构合理,就不需要全文搜索来处理所有内容。