可以从couchdb视图中反转索引?

时间:2012-04-21 04:53:06

标签: indexing couchdb inverted-index

假设我的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可能不会让我这样做。我无法在地图阶段完成它,似乎我无法在沙发减少阶段完成它。 这是我需要在应用程序的另一层完成的事情吗?

1 个答案:

答案 0 :(得分: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