3

假设我的 couchdb 文档看起来像这样:

{
    "_id": "id",
    "_rev": "rev",
    "title": "foobar",
    "URI": "http://www.foobar.com",
    "notes": "",
    "date": 1334177254774,
    "tags": [
        "tag1",
        "tag2",
        "tag3"
    ],
    "date_modified": 1334177278457,
    "deleted": false
}

我想要的是从标签创建一个倒排索引,所以我最终得到的是:

{
    "tag1": [
        _id,
        _id,
        _id
    ],
    "tag2": [
        _id,
        _id,
        ...
    ]
}

根据我的阅读和尝试,couchdb 可能不会让我这样做。我无法在地图阶段完成它,而且我似乎无法在沙发缩减阶段完成它。这是我需要在应用程序的另一层完成的事情吗?

4

1 回答 1

3

可以使用 CouchDB 的地图功能来实现这一点。

CouchDB 喜欢列表,而不是列表。因此,要在这个问题上“切入正题”,您需要一个在标签上键入的视图,每个文档 ID 有一行。

// View rows (conceptual diagram)
// Key  , Value
[ "tag1", "_id1"
, "tag1", "_id2"
, "tag1", "_id3"

, "tag2", "_id2"
, "tag2", "_id4"
, "tag3", "_id6"
]

要获取带有标签的所有文档 ID 的列表,请点击以标签名称作为键的视图,GET /db/_design/ddoc/_view/tags?key="tag1".

这应该足够了。但是作为 lagniappe,您可以将"reduce"值设置为"_count"以获取所有使用的标签的计数(对于构建标签云很有用)。只记得&reduce=false在要查询索引时添加。

于 2012-04-23T14:00:06.193 回答