在CouchDB中搜索关键字列表

时间:2018-08-03 14:08:35

标签: couchdb couchdb-2.0 couchdb-mango

我有一些包含关键字列表的文档。如何进行查询,例如搜索关键字belafleck仅返回同时具有这两个关键字的文档:

{
    "_id": "track/bela-fleck/big-country",
    "title": "Big Country",
    "artist": "Bela Fleck",
    "keywords": ["bela", "fleck", "big", "country"]
}

2 个答案:

答案 0 :(得分:1)

这可以通过Mango查询来完成。首先,在@WebListener字段上创建索引:

keywords

然后,使用{ "index": { "fields": [ "keywords" ] }, "name": "keywords-index", "type": "json" } 查询以找到与每个关键字匹配的数组中的项目,并使用$elemMatch查询以找到与所有关键字匹配的文档:

$and

请注意,此方法does not use indexes用于在数组内部进行搜索。

答案 1 :(得分:0)

类似的事情可能起作用:

function map(doc) {
  // sort by each keyword
  for (var k in doc.keywords) {
    emit(doc.keywords[k], null);
  }      
}

db.query(map).then(function (result) {
  // handle result
}).catch(function (err) {
  console.log(err);
});

...但是我还没有测试!这也会进行完整的数据库扫描,因此,为了提高效率,您应该按照PouchDb API documentation for Map/Reduce中的描述在设计文档中创建一个视图。希望这会有所帮助。

更新... the CouchDb guide还提供了一些详细的示例,可能会有所帮助。