4

StackOverflow 允许您按标签搜索帖子,并允许您按标签的交集进行过滤,例如ruby x mysql x tags. 但通常使用标记上的多重连接从 MySQL 检索此类列表效率低下。实现按多个标签查询过滤的更高效的方法是什么?

有没有很好的 NoSQL 方法来解决这个问题?

4

1 回答 1

2

在 NoSQL 或面向文档的场景中,您会将实际标签作为文档的一部分,可能存储为列表。由于您已用“couchdb”标记了此问题,因此我将使用它作为示例。

CouchDB 中的“发布”文档可能如下所示:

{
   "_id": <generated>,
   "question": "Question?",
   "answers": [... list of answers ...],
   "tags": ["mysql", "tagging", "joins", "nosql", "couchdb"]
}

然后,生成由标签键入的视图:

{
   "_id": "_design/tags",
   "language": "javascript",
   "views": {
      "all": {
         "map": "function(doc) {
            emit(doc.tags, null);
         }"
      }
   }
}

在 CouchDB 中,如果您愿意,可以使用多个键发出 HTTP POST。文档中有一个示例。使用该技术,您将能够按多个标签进行搜索。

注意:在上面将值设置为 null 有助于保持视图较小。include_docs=true如果您还想查看实际文档,请在查询中使用。

于 2010-03-03T03:01:00.157 回答