В CouchBase (4.1.1) N1QL может индексировать get, созданный с использованием всего элемента, взять эти два примера.CockBase Index вложенные элементы
сказать, что мы этот документ структура:
{
"name": "blah",
"credentials": [
{
"level": 5,
"sector": "XP"
}
],
}
Теперь говорит, что мы хотели создать INDEX1 основан от имени и всего мандатного элемента является то, что это возможно?
что-то вроде
create index indexName on `bucketName` (name, credentials) USING GSI;
или index2 основаны от имени и один из вложенных полей, таких как уровень; как это можно сделать? что-то вроде
create index indexName on `bucketName`(name, credential.levels) USING GSI;
при запуске объяснить мои вторичные индексы не используются и couchbase по умолчанию первичного индекса для этого ведра.
вот выбор, который я использую.
select s.name, s.credentials
from `security` unnest s.credentials
where credentials is not missing and name = 'tom';
Вот полученный объяснить:
{
"requestID": "f8d46eeb-3898-4ace-a24f-1582e0504eb7",
"signature": "json",
"results": [
{
"#operator": "Sequence",
"~children": [
{
"#operator": "PrimaryScan",
"index": "#primary",
"keyspace": "read",
"namespace": "default",
"using": "gsi"
},
{
"#operator": "Parallel",
"~child": {
"#operator": "Sequence",
"~children": [
{
"#operator": "Fetch",
"as": "s",
"keyspace": "bucketName",
"namespace": "default"
},
{
"#operator": "Unnest",
"as": "beacons",
"expr": "(`s`.`credentials`)"
},
{
"#operator": "Filter",
"condition": "((`s`.`name`) = \"tom\")"
},
{
"#operator": "InitialProject",
"result_terms": [
{
"expr": "(`s`.`id`)"
},
{
"expr": "`credentials`"
}
]
},
{
"#operator": "FinalProject"
}
]
}
}
]
}
],
"status": "success",
"metrics": {
"elapsedTime": "2.82063ms",
"executionTime": "2.765439ms",
"resultCount": 1,
"resultSize": 1917
}
}
Измените вопрос, чтобы указать (1) версию Couchbase, (2) запрос, который вы хотите запустить (включая полный запрос), и (3) что вы подразумеваете под «это не работает для меня» (что происходит?). – geraldss
Я просто запустил их на Couchbase, и они выполнили правильно. Я предполагаю, что то, что вы подразумеваете под «не работает для меня», заключается в том, что вы используете SELECT, который не использует эти индексы? Это помогло бы, если бы вы включили SELECT, который вы используете, и EXPLAIN для него (что, вероятно, означает, что означает @geraldss) –
@mgroves Я добавил пример запроса –