Путаница с ключами и индексами Couchbase - PullRequest
0 голосов
/ 27 апреля 2018

Я импортировал набор данных в 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?

  • Как я могу создать индекс из этих 2 полей? Я понимаю, как использовать команду CREATE INDEX с составными полями, но будет ли этот индекс похож на ключ, сгенерированный %SET_NUM%::%TYPE%? Мне нужно, чтобы они были такими же, с :: в середине.

Надеюсь, мой вопрос ясен! Буду признателен за любую помощь.

1 Ответ

0 голосов
/ 29 апреля 2018

В Couchbase идентификатор / ключ документа фактически отсутствует в самом документе. Если вы используете шаблон --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")

...