1

我有以下数据库结构:

{"_id": "0096874","genre": ["Adventure","Comedy", "Sci-Fi" ]}
{"_id": "0099088","genre": ["Comedy", "Sci-Fi", "Western"]}

并且喜欢像在 mongodb 中那样查询它

db.movies.find({genre: {$in: ["Comedy"]}})

当我为整个数据库使用文本索引时它可以工作,但这似乎非常浪费:

// index
    {
      "index": {},
      "type": "text"
    }
//query
{
  "selector": {
    "genre": {
      "$in": ["Comedy"]
    }
  },
  "fields": [
    "_id",
    "genre"
  ]
}

以下索引不起作用:

{
  "index": {
    "fields": [
      "genre"
    ]
  },
  "type": "json"
}

Cloudant 查询的正确索引是什么,它不索引整个数据库?谢谢你的帮助

4

1 回答 1

2

你说得几乎是正确的。您的索引是正确的,但是您需要输入一个选择器来获取所有 ID https://cloudant.com/blog/mango-json-vs-text-indexes/

正如托尼所说,这在性能方面并不是一个很好的解决方案,

再次,这是因为 Mango 执行上述 $in 操作作为对所有文档的过滤机制。正如我们在上一节关于 JSON 语法的结论中看到的那样,与上述查询的性能权衡是,它本质上是执行完整的索引扫描,然后应用过滤器。

{
  "selector": {
    "_id": {
      "$gt": null
    }, 
    "genre": {
      "$in": ["Western"]
    }
  },
  "fields": [
    "_id",
    "genre"
  ],
  "sort": [
    {
      "_id": "asc"
    }
  ]
}
于 2015-12-07T16:02:18.940 回答