关于Couchbase密钥和索引的困惑

时间:2018-04-27 19:28:52

标签: couchbase

我已将数据集导入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%。所以我有几个问题:

  • 密钥生成是否会自动使用这两个元素创建一个名为ID的字段,还是需要在我的CSV数据集中创建一个ID列?

  • 如何从这两个字段中创建索引?我理解如何将CREATE INDEX命令与复合字段一起使用,但该索引是否会像%SET_NUM%::%TYPE%生成的密钥一样?我需要它们是相同的,中间是::

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

1 个答案:

答案 0 :(得分:0)

在Couchbase中,文档的ID /密钥实际上并不在文档本身中。如果您使用--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。您只需执行键/值GET操作即可。例如,在Java中:bucket.get("10000163::SET")