代码之家  ›  专栏  ›  技术社区  ›  dan

按多个标记筛选文章以返回具有所有这些标记且性能良好的文章

  •  4
  • dan  · 技术社区  · 16 年前

    StackOverflow允许您按标记搜索文章,并允许您按标记的交集进行筛选,例如。 ruby x mysql x tags . 但通常情况下,在标记上使用多个连接从mysql检索这样的列表是低效的。实现多个标记查询筛选的更有效的方法是什么?

    有没有一个好的nosql方法来解决这个问题?

    1 回复  |  直到 16 年前
        1
  •  2
  •   Ryan Duffield    16 年前

    在nosql或面向文档的场景中,实际的标记将作为文档的一部分,可能存储为列表。既然您已经用“couchdb”标记了这个问题,我将用它作为一个例子。

    couchdb中的“post”文档可能如下所示:

    {
       "_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。一个例子 the documentation . 使用这种技术,您可以通过多个标记进行搜索。

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