Cloudant按嵌套对象的属性搜索文档

时间:2017-03-01 11:59:01

标签: indexing couchdb cloudant nosql

我在cloudant中的文档具有以下结构

{
 "_id"      : "1234",
 "name"     : "test",
 "objects"  : [
   {
     "type"  :  "TYPE1"
     "time"  :  "1215
   },
   {
     "type"  :  "TYPE2"
     "time"  :  "1115"
   }
 ]
}

现在我需要通过类型列表查询我的文档。

实施例

1)如果我使用 TYPE1 进行查询,那么将返回存在此类型对象的所有文档。 (示例doc将返回)

2)如果我使用 TYPE1 TYPE3 进行查询,则会返回包含其中任何一个的所有文档(示例文档将返回)

3)如果我使用 TYPE3 TYPE4 TYPE5 进行查询,则会返回包含其中任何一个的所有文档(示例doc)不会回来)

_design文档中的代码如何?我的API请求将如何?

1 个答案:

答案 0 :(得分:3)

一种选择是使用Cloudant Search

名为types的示例设计文档,用于索引type数组中的每个objects属性

{
 "_id": "_design/types",
 "views": {},
 "language": "javascript",
 "indexes": {
  "one-of": {
   "analyzer": "standard",
   "index": "function (doc) {\n  for(var i in doc.objects) {\n    index(\"type\", doc.objects[i].type);  \n  }\n}"
  }
 }
}

查询示例:

搜索一个密钥(type=val

GET https://$HOST/$DATABASE/_design/$DDOC/_search/one-of?q=type%3ATYPE1

搜索多个密钥(type=val1 OR type=val2

GET https://$HOST/$DATABASE/_design/$DDOC/_search/one-of?q=type%3ATYPE1%20OR%20type%3ATYPE2

搜索多个密钥(type=val1 AND type=val2

GET https://$HOST/$DATABASE/_design/$DDOC/_search/one-of?q=type%3ATYPE1%20AND%20type%3ATYPE2

将文档包含在响应追加&include_docs=true