关于 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%
。所以我有几个问题:
密钥生成是否会使用这 2 个元素自动创建一个名为 ID 的字段,或者我是否需要在我的 CSV 数据集中创建一个 ID 列?
如何为这两个字段创建索引?我了解如何对复合字段使用 CREATE INDEX
命令,但该索引看起来像 %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")
我已将数据集导入 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%
。所以我有几个问题:
密钥生成是否会使用这 2 个元素自动创建一个名为 ID 的字段,或者我是否需要在我的 CSV 数据集中创建一个 ID 列?
如何为这两个字段创建索引?我了解如何对复合字段使用
CREATE INDEX
命令,但该索引看起来像%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")