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