我如何查询键以使其部分匹配?

时间:2017-07-20 22:41:09

标签: couchdb cloudant

我们以此文件为例:

{
"id":1
"planet":"earth-616"
"data":[
    ["wolverine","mutant"],
    ["Storm","mutant"],
    ["Mark Zuckerberg","human"]]
}

我创建了一个搜索索引来索引名称和类型,例如,如果搜索名称:wolverine或者type:mutant我会得到包含它的文档。但根据我的要求我不想要整个文档,我只想要["wolverine","mutant"] 我创建了一个输出为:

的视图
{
    "id":1,
    "key":"earth-616",
    "value":["earth-616","wolverine","mutant"]
}

然后我发现我只能用键查询。 (是否可以在视图上创建搜索索引?,在文档中找不到任何内容) 或者我应该像上面这样创建视图:

{
    "id":1,
    "key":"wolverine",
    "value":["earth-616","wolverine","mutant"]
}

{
    "id":,
    "key":"mutant"
    "value":["earth-616","wolverine","mutant"]
}

这样我可以用我想要的键查询,但我似乎无法部分匹配键(我错过了什么?)

1 个答案:

答案 0 :(得分:3)

如果您需要输出完全如上所述,那么我相信您必须使用视图,并且为了支持通配符搜索,我相信您必须索引键的每个子字符串。

一种替代方法是使用Cloudant Query,但诚然,您无法获得所需的确切输出。如果您发出如下查询:

{
  "selector": {
    "_id": {
      "$gt": 0
    },
    "data": {
      "$elemMatch": {
        "$elemMatch": {
          "$regex": "(?i)zuck"
        }
      }
    }
  },
  "fields": [
    "data"
  ]
}

结果将是整个数据阵列:

{
  "data": [
    ["wolverine", "mutant"],
    ["Storm", "mutant"],
    ["Mark Zuckerberg", "human"]
  ]
}