关于 Couchbase 键和索引的困惑

Confusion about Couchbase keys and indexes

我已将数据集导入 Couchbase,如下所示:

{
  "CLUSTER": "M1M",
  "CLUSTER_NAME": "MARTIN MARIETTA",
  "PRIMARY": "",
  "SET_NUM": "10000163",
  SHORTENED_NAME": "MARTIN MARIETTA MATERIALS",
  "TYPE": "SET",
  "_class": "com.company.aad.xref.model.ClusterCodeXref"
}

我必须提供一个密钥生成策略,并且我制定了我最终希望我的索引看起来像的策略,%SET_NUM%::%TYPE%。所以我有几个问题:

我希望我的问题很清楚!非常感谢任何帮助。

在 Couchbase 中,文档的 ID/key 实际上并不在文档本身中。如果您使用 --generate-key 模板,您的文档将类似于:

key = "10000163::SET"
{
  "CLUSTER": "M1M",
  "CLUSTER_NAME": "MARTIN MARIETTA",
  "PRIMARY": "",
  "SET_NUM": "10000163",
  SHORTENED_NAME": "MARTIN MARIETTA MATERIALS",
  "TYPE": "SET",
  "_class": "com.company.aad.xref.model.ClusterCodeXref"
}

Couchbase 中没有指定的 "id" 字段。您当然可以创建一个 id 字段,但它与任何其他字段一样。

至于索引,那要看你想要什么样的查询了运行。您可以像您提到的那样CREATE INDEX idx_setnumandtype ON bucketname (SET_NUM, TYPE)。这将成为查询的有用索引,例如:SELECT b.* FROM bucketname WHERE SET_NUM = 'foo' AND TYPE = 'bar';

但是,如果您知道这两个值并且只需要查找单个文档,则无需创建索引或使用 N1QL。您可以简单地执行 key/value GET 操作。例如在 Java 中:bucket.get("10000163::SET")