Hi,
I’m trying to use covered field when using an array index.
This is my document
{
"values": {
"blocks": [
{
"type": "pageMeta"
}
]
}
}
Index:
create index idx_test
on engage_testing(DISTINCT array v.type for v in values
.blocks WHEN v.type=‘pageMeta’);
Explain:
Explain shows that my query still fetches.
explain select first v for v in values
.blocks when v.type=‘pageMeta’ end from engage_testing where any v in values
.blocks satisfies v.type=‘pageMeta’ end
{
"requestID": "91a53126-b694-45d8-9fc9-5b18d8031e74",
"clientContextID": "d31795b2-90e6-4195-af1b-e85f7cb34a86",
"signature": "json",
"results": [
{
"plan": {
"#operator": "Sequence",
"~children": [
{
"#operator": "DistinctScan",
"scan": {
"#operator": "IndexScan",
"index": "idx_test",
"index_id": "62c14b9e984dfacd",
"keyspace": "engage_testing",
"namespace": "default",
"spans": [
{
"Range": {
"High": [
"\"pageMeta\""
],
"Inclusion": 3,
"Low": [
"\"pageMeta\""
]
}
}
],
"using": "gsi"
}
},
{
"#operator": "Fetch",
"keyspace": "engage_testing",
"namespace": "default"
},
{
"#operator": "Parallel",
"~child": {
"#operator": "Sequence",
"~children": [
{
"#operator": "Filter",
"condition": "any `v` in ((`engage_testing`.`values`).`blocks`) satisfies ((`v`.`type`) = \"pageMeta\") end"
},
{
"#operator": "InitialProject",
"result_terms": [
{
"expr": "first `v` for `v` in ((`engage_testing`.`values`).`blocks`) when ((`v`.`type`) = \"pageMeta\") end"
}
]
},
{
"#operator": "FinalProject"
}
]
}
}
]
},
"text": "select first v for v in `values`.blocks when v.type='pageMeta' end from engage_testing where any v in `values`.blocks satisfies v.type='pageMeta' end"
}
],
"status": "success",
"metrics": {
"elapsedTime": "3.851ms",
"executionTime": "3.822ms",
"resultCount": 1,
"resultSize": 2708
}
}
Is there a way to cover a block with type = ‘pageMeta’ in memory so that my query does not fetch the document? The document size is pretty big. I would like to avoid fetching document at all if that’s possible.
Thank you in advance.