Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
En Azure Cosmos DB, para indexar los datos se usan las directivas de indexación que se definen para cada contenedor. La directiva de indexación predeterminada para los contenedores recién creados exige que se usen índices de intervalo para todas las cadenas o números. Puede invalidar esta directiva con su propia directiva de indexación personalizada.
Nota:
El método de actualización de las directivas de indexación que se describe en este artículo solo se aplica a Azure Cosmos DB for NoSQL. Obtenga información sobre la indexación en Azure Cosmos DB for MongoDB e Indexación secundaria en Azure Cosmos DB for Apache Cassandra.
Ejemplos de directiva de indexación
Estos son algunos ejemplos de directivas de indexación que se muestran en formato JSON. Se exponen en Azure Portal en formato JSON. Los mismos parámetros se pueden establecer mediante la CLI de Azure o cualquier SDK.
Política de exclusión voluntaria que excluye de forma selectiva algunas rutas de acceso a propiedades
{
"indexingMode": "consistent",
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/path/to/single/excluded/property/?"
},
{
"path": "/path/to/root/of/multiple/excluded/properties/*"
}
]
}
Nota:
- La clave de partición (a menos que también sea
/id) no está indexada y debe incluirse en el índice. - Las propiedades del sistema
idy_tssiempre se indexan cuando el modo de indexación de la cuenta de Cosmos esconsistent. - Las propiedades
iddel sistema y_tsno se incluyen en la descripción de las rutas de acceso indexadas de la directiva de contenedor. Esto es así por diseño porque estas propiedades del sistema se indexan de forma predeterminada y este comportamiento no se puede deshabilitar.
Directiva de participación que incluye de forma selectiva algunas rutas de acceso de propiedades
{
"indexingMode": "consistent",
"includedPaths": [
{
"path": "/path/to/included/property/?"
},
{
"path": "/path/to/root/of/multiple/included/properties/*"
}
],
"excludedPaths": [
{
"path": "/*"
}
]
}
Nota:
Por lo general, se recomienda usar una directiva de indexación de exclusión. Azure Cosmos DB indexa, de manera proactiva, todas las propiedades nuevas que se agregan a su modelo de datos.
Uso de un índice espacial solo en una ruta de acceso de una propiedad concreta
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
}
],
"spatialIndexes": [
{
"path": "/path/to/geojson/property/?",
"types": [
"Point",
"Polygon",
"MultiPolygon",
"LineString"
]
}
]
}
Ejemplos de directivas de indexación de vectores
Además de incluir o excluir rutas de acceso para propiedades individuales, también puede especificar un índice de vector. En general, se deben especificar índices vectoriales cada vez que se usa la función del sistema VectorDistance para medir la similitud entre un vector de consulta y una propiedad vectorial.
Nota:
Antes de continuar, debe habilitar la indexación y búsqueda de vectores NoSQL de Azure Cosmos DB.
Importante
Una directiva de indexación de vectores debe estar en la misma ruta de acceso definida en la directiva de vectores del contenedor. Para más información, consulte Directivas de vectores de contenedor.
{
"indexingMode": "consistent",
"automatic": true,
"includedPaths": [
{
"path": "/*"
}
],
"excludedPaths": [
{
"path": "/_etag/?"
}
],
"vectorIndexes": [
{
"path": "/vector",
"type": "quantizedFlat"
}
]
}
Importante
Los caracteres comodín (*, []) y las rutas de acceso vectoriales anidadas dentro de matrices no se admiten actualmente en la directiva de vectores o en el índice de vectores.
Importante
Actualmente, las directivas de vectores y los índices vectoriales son inmutables después de la creación. Para realizar cambios, cree una nueva colección.
Puede definir los siguientes tipos de directivas de índice vectorial:
| Tipo | Description | Dimensiones máximas |
|---|---|---|
flat |
Almacena vectores en el mismo índice que otras propiedades indexadas. | 505 |
quantizedFlat |
Cuantifica (comprime) vectores antes de almacenarlos en el índice. Esto puede mejorar la latencia y el rendimiento a costa de una pequeña cantidad de precisión. | 4096 |
diskANN |
Crea un índice basado en DiskANN para una búsqueda aproximada rápida y eficaz. | 4096 |
Los flat tipos de índice y quantizedFlat usan el índice de Azure Cosmos DB para almacenar y leer cada vector al realizar una búsqueda de vectores. Las búsquedas vectoriales con un índice flat es una búsqueda por fuerza bruta y produce una precisión del 100 %. Sin embargo, hay una limitación de 505 dimensiones para vectores en un índice plano.
El índice quantizedFlat almacena vectores cuantificados o comprimidos en el índice. Las búsquedas de vectores con índices quantizedFlat también son búsquedas por fuerza bruta, pero su precisión podría ser ligeramente inferior al 100 %, ya que los vectores son cuantizados antes de agregarlos al índice. Sin embargo, las búsquedas vectoriales con quantized flat deben tener una latencia menor, un mayor rendimiento y un menor costo de RU que el vector de búsqueda en un índice flat. Esta es una buena opción para escenarios en los que se usan filtros de consulta para restringir la búsqueda de vectores a un conjunto relativamente pequeño de vectores.
El diskANN índice es un índice independiente definido específicamente para vectores que usan DiskANN, un conjunto de algoritmos de indexación de vectores de alto rendimiento desarrollados por Microsoft Research. Los índices DiskANN pueden ofrecer algunas de las consultas de menor latencia, mayor número de consultas por segundo (QPS) y menor costo de RU, todo con alta precisión. Sin embargo, dado que DiskANN es un índice aproximado de vecinos más cercanos (ANN), la precisión puede ser menor que quantizedFlat o flat.
Los índices diskANN y quantizedFlat pueden tomar parámetros opcionales de construcción de índices que se pueden usar para ajustar la compensación entre precisión y latencia que se aplica a todos los índices vectoriales de ANN.
-
quantizationByteSize: establece el tamaño (en bytes) para la cuantificación de productos: Min=1, Default=dynamic (decide el sistema), Max=512. Establecer este valor mayor podría dar lugar a búsquedas de vectores de mayor precisión a costa de un mayor costo de RU y una mayor latencia. Esto se aplica a los tipos de índicequantizedFlatyDiskANN. -
indexingSearchListSize: establece cuántos vectores se van a buscar durante la construcción de la compilación del índice: Min=10, Default=100, Max=500. Establecer este valor mayor podría dar lugar a búsquedas de vectores de mayor precisión a costa de tiempos de compilación de índices más largos y latencias de ingesta de vectores más altas. Esto solo se aplica a los índices deDiskANN.
Uso de DiskANN particionado
DiskANN particionado le ayuda a optimizar la búsqueda de vectores a gran escala dividiendo un índice diskANN en partes más pequeñas y manejables. Al especificar un VectorIndexShardKey en la directiva de indexación del contenedor, puede crear varios índices DiskANN, uno para cada valor único de una propiedad de documento elegida.
Este enfoque puede provocar un rendimiento más rápido de las consultas, una recuperación mejorada y menores costos de RU, especialmente cuando se trabaja con datos de alta cardinalidad. Tanto si va a crear motores de recomendaciones, búsqueda semántica o agentes inteligentes, DiskANN particionado le proporciona más control sobre cómo se estructura y ejecuta la indexación de vectores.
Aquí podemos ver un ejemplo de definición de la clave de partición basada en una propiedad tenantID. Puede ser cualquier propiedad del elemento de datos, incluso la clave de partición. La cadena única debe incluirse en una matriz. Para más información, consulte Sharded DiskANN: Búsqueda de vectores centrada.
"vectorIndexes": [
{
"path": "/vector2",
"type": "DiskANN",
"vectorIndexShardKey": ["/tenantID"]
}
]
Ejemplos de directivas de indexación de tupla
En este ejemplo, la directiva de indexación define un índice de tupla en events.name y events.category.
{
"automatic":true,
"indexingMode":"Consistent",
"includedPaths":[
{"path":"/*"},
{"path":"/events/[]/{name,category}/?"}
],
"excludedPaths":[],
"compositeIndexes":[]
}
El índice anterior se usa para la consulta siguiente.
SELECT *
FROM root r
WHERE
EXISTS (SELECT VALUE 1 FROM ev IN r.events
WHERE ev.name = 'M&M' AND ev.category = 'Candy')
Ejemplos de la política de indexación compuesta
Además de incluir o excluir rutas de acceso para las propiedades individuales, también puede especificar un índice compuesto. Para realizar una consulta que tenga una cláusula ORDER BY para varias propiedades, se necesita un índice compuesto en esas propiedades. Si la consulta incluye filtros junto con la ordenación en varias propiedades, es posible que necesite más de un índice compuesto.
Los índices compuestos tienen también una ventaja de rendimiento para las consultas con varios filtros, o bien, con un filtro y una cláusula ORDER BY.
Nota:
Las rutas de acceso compuestas tienen un carácter /? implícito, ya que solo se indexa el valor escalar de esa ruta de acceso. El carácter comodín /* no se admite en las rutas de acceso de compuestas. No debe especificar /? ni /* en las rutas de acceso compuestas. Las rutas de acceso compuestas también distinguen mayúsculas de minúsculas.
Índice compuesto definido para (nombre asc, edad desc)
{
"automatic":true,
"indexingMode":"Consistent",
"includedPaths":[
{
"path":"/*"
}
],
"excludedPaths":[],
"compositeIndexes":[
[
{
"path":"/name",
"order":"ascending"
},
{
"path":"/age",
"order":"descending"
}
]
]
}
El índice compuesto sobre nombre y edad es necesario para las siguientes consultas.
Consulta n.º 1:
SELECT *
FROM c
ORDER BY c.name ASC, c.age DESC
Consulta n.º 2:
SELECT *
FROM c
ORDER BY c.name DESC, c.age ASC
Este índice compuesto beneficia a las siguientes consultas y optimiza los filtros:
Consulta n.º 3:
SELECT *
FROM c
WHERE c.name = "Tim"
ORDER BY c.name DESC, c.age ASC
Consulta n.º 4:
SELECT *
FROM c
WHERE c.name = "Tim" AND c.age > 18
Índice compuesto definido para (nombre ASC, edad ASC) y (nombre ASC, edad DESC)
Puede definir varios índices compuestos dentro de la misma directiva de índice.
{
"automatic":true,
"indexingMode":"Consistent",
"includedPaths":[
{
"path":"/*"
}
],
"excludedPaths":[],
"compositeIndexes":[
[
{
"path":"/name",
"order":"ascending"
},
{
"path":"/age",
"order":"ascending"
}
],
[
{
"path":"/name",
"order":"ascending"
},
{
"path":"/age",
"order":"descending"
}
]
]
}
Índice compuesto definido para (nombre ASC, edad ASC)
Si quiere, puede especificar el orden. Si no lo especifica, el orden es ascendente.
{
"automatic":true,
"indexingMode":"Consistent",
"includedPaths":[
{
"path":"/*"
}
],
"excludedPaths":[],
"compositeIndexes":[
[
{
"path":"/name"
},
{
"path":"/age"
}
]
]
}
Excluir todas las rutas de propiedades, pero mantener la indexación activa
Puede usar esta directiva en la que la característica de período de vida (TTL) está activa, pero no es necesario usar ningún otro índice para usar Azure Cosmos DB como almacén de clave-valor puro.
{
"indexingMode": "consistent",
"includedPaths": [],
"excludedPaths": [{
"path": "/*"
}]
}
Sin indexación
Esta directiva desactiva la indexación. Si indexingMode está establecido en none, no puede establecer un TTL en el contenedor.
{
"indexingMode": "none"
}
Actualización de la directiva de indexación
En Azure Cosmos DB, la directiva de indexación se puede actualizar mediante cualquiera de los métodos siguientes:
- Desde Azure Portal
- Uso de la CLI de Azure
- Uso de PowerShell
- Usando uno de los SDK
Las actualizaciones de las directivas de indexación desencadenan transformaciones de índices. También se puede realizar un seguimiento del progreso de esta transformación mediante los SDK.
Nota:
Al actualizar la directiva de indexación, las escrituras en Azure Cosmos DB no se interrumpen. Obtenga más información sobre las transformaciones de indexación.
Importante
La eliminación de un índice surte efecto inmediatamente, mientras que agregar un nuevo índice tarda algún tiempo, ya que requiere una transformación de indexación. Al reemplazar un índice por otro (por ejemplo, reemplazar un único índice de propiedad por un índice compuesto), asegúrese de agregar primero el nuevo índice y, a continuación, espere a que se complete la transformación de índice antes de quitar el índice anterior de la directiva de indexación. De lo contrario, esto afecta negativamente a la capacidad de consultar el índice anterior y podría interrumpir las cargas de trabajo activas que hacen referencia al índice anterior.
Uso de Azure Portal
Los contenedores de Azure Cosmos DB almacenan su directiva de indexación en forma de documento JSON que Azure Portal permite editar directamente.
Inicie sesión en Azure Portal.
Cree una nueva cuenta de Azure Cosmos DB o seleccione una existente.
Abra el panel Data Explorer y seleccione el contenedor en el que quiere trabajar.
Seleccione Configuración y, a continuación, elija Directiva de indexación.
Modifique el documento JSON de la directiva de indexación, como se muestra en estos ejemplos.
Cuando haya terminado, haga clic en Guardar.
Uso de la CLI de Azure
Para crear un contenedor con una directiva de indexación personalizada, consulte Creación de un contenedor con una directiva de indexación personalizada mediante la CLI.
Uso de PowerShell
Para crear un contenedor con una directiva de indexación personalizada, consulte Creación de un contenedor con una directiva de indexación personalizada mediante PowerShell.
Uso del SDK de .NET
El objeto ContainerProperties del SDK de .NET v3 expone una propiedad IndexingPolicy que permite cambiar IndexingMode y agregar o quitar IncludedPaths y ExcludedPaths. Para más información, consulte Inicio rápido: Uso de Azure Cosmos DB para NoSQL con Azure SDK para .NET.
// Retrieve the container's details
ContainerResponse containerResponse = await client.GetContainer("database", "container").ReadContainerAsync();
// Set the indexing mode to consistent
containerResponse.Resource.IndexingPolicy.IndexingMode = IndexingMode.Consistent;
// Add an included path
containerResponse.Resource.IndexingPolicy.IncludedPaths.Add(new IncludedPath { Path = "/*" });
// Add an excluded path
containerResponse.Resource.IndexingPolicy.ExcludedPaths.Add(new ExcludedPath { Path = "/name/*" });
// Add a spatial index
SpatialPath spatialPath = new SpatialPath
{
Path = "/locations/*"
};
spatialPath.SpatialTypes.Add(SpatialType.Point);
containerResponse.Resource.IndexingPolicy.SpatialIndexes.Add(spatialPath);
// Add a composite index
containerResponse.Resource.IndexingPolicy.CompositeIndexes.Add(new Collection<CompositePath> { new CompositePath() { Path = "/name", Order = CompositePathSortOrder.Ascending }, new CompositePath() { Path = "/age", Order = CompositePathSortOrder.Descending } });
// Update container with changes
await client.GetContainer("database", "container").ReplaceContainerAsync(containerResponse.Resource);
Para realizar un seguimiento del progreso de transformación del índice, utilice un objeto RequestOptions que establezca la propiedad PopulateQuotaInfo en true. Recupere el valor del encabezado de respuesta x-ms-documentdb-collection-index-transformation-progress.
// retrieve the container's details
ContainerResponse containerResponse = await client.GetContainer("database", "container").ReadContainerAsync(new ContainerRequestOptions { PopulateQuotaInfo = true });
// retrieve the index transformation progress from the result
long indexTransformationProgress = long.Parse(containerResponse.Headers["x-ms-documentdb-collection-index-transformation-progress"]);
Al definir una directiva de indexación personalizada durante la creación de un nuevo contenedor, la API fluida del SDK v3 le permite escribir esta definición de una manera concisa y eficaz:
await client.GetDatabase("database").DefineContainer(name: "container", partitionKeyPath: "/myPartitionKey")
.WithIndexingPolicy()
.WithIncludedPaths()
.Path("/*")
.Attach()
.WithExcludedPaths()
.Path("/name/*")
.Attach()
.WithSpatialIndex()
.Path("/locations/*", SpatialType.Point)
.Attach()
.WithCompositeIndex()
.Path("/name", CompositePathSortOrder.Ascending)
.Path("/age", CompositePathSortOrder.Descending)
.Attach()
.Attach()
.CreateIfNotExistsAsync();
Uso del SDK de Java
El objeto DocumentCollection del SDK de Java expone los métodos getIndexingPolicy() y setIndexingPolicy(). El objeto IndexingPolicy que manipulan permite cambiar el modo de indexación y agregar o quitar las rutas de acceso incluidas y excluidas. Para más información, consulte Inicio rápido: Uso de Azure Cosmos DB para NoSQL con Azure SDK para Java.
// Retrieve the container's details
Observable<ResourceResponse<DocumentCollection>> containerResponse = client.readCollection(String.format("/dbs/%s/colls/%s", "database", "container"), null);
containerResponse.subscribe(result -> {
DocumentCollection container = result.getResource();
IndexingPolicy indexingPolicy = container.getIndexingPolicy();
// Set the indexing mode to consistent
indexingPolicy.setIndexingMode(IndexingMode.Consistent);
// Add an included path
Collection<IncludedPath> includedPaths = new ArrayList<>();
IncludedPath includedPath = new IncludedPath();
includedPath.setPath("/*");
includedPaths.add(includedPath);
indexingPolicy.setIncludedPaths(includedPaths);
// Add an excluded path
Collection<ExcludedPath> excludedPaths = new ArrayList<>();
ExcludedPath excludedPath = new ExcludedPath();
excludedPath.setPath("/name/*");
excludedPaths.add(excludedPath);
indexingPolicy.setExcludedPaths(excludedPaths);
// Add a spatial index
Collection<SpatialSpec> spatialIndexes = new ArrayList<SpatialSpec>();
Collection<SpatialType> collectionOfSpatialTypes = new ArrayList<SpatialType>();
SpatialSpec spec = new SpatialSpec();
spec.setPath("/locations/*");
collectionOfSpatialTypes.add(SpatialType.Point);
spec.setSpatialTypes(collectionOfSpatialTypes);
spatialIndexes.add(spec);
indexingPolicy.setSpatialIndexes(spatialIndexes);
// Add a composite index
Collection<ArrayList<CompositePath>> compositeIndexes = new ArrayList<>();
ArrayList<CompositePath> compositePaths = new ArrayList<>();
CompositePath nameCompositePath = new CompositePath();
nameCompositePath.setPath("/name");
nameCompositePath.setOrder(CompositePathSortOrder.Ascending);
CompositePath ageCompositePath = new CompositePath();
ageCompositePath.setPath("/age");
ageCompositePath.setOrder(CompositePathSortOrder.Descending);
compositePaths.add(ageCompositePath);
compositePaths.add(nameCompositePath);
compositeIndexes.add(compositePaths);
indexingPolicy.setCompositeIndexes(compositeIndexes);
// Update the container with changes
client.replaceCollection(container, null);
});
Para realizar un seguimiento del progreso de transformación del índice en un contenedor, utilice un objeto RequestOptions que solicite la información de cuota que se debe rellenar. Recupere el valor del encabezado de respuesta x-ms-documentdb-collection-index-transformation-progress.
// set the RequestOptions object
RequestOptions requestOptions = new RequestOptions();
requestOptions.setPopulateQuotaInfo(true);
// retrieve the container's details
Observable<ResourceResponse<DocumentCollection>> containerResponse = client.readCollection(String.format("/dbs/%s/colls/%s", "database", "container"), requestOptions);
containerResponse.subscribe(result -> {
// retrieve the index transformation progress from the response headers
String indexTransformationProgress = result.getResponseHeaders().get("x-ms-documentdb-collection-index-transformation-progress");
});
Uso del SDK de Node.js
La interfaz ContainerDefinition del SDK de Node.js expone una propiedad indexingPolicy que le permite cambiar el indexingMode y agregar o quitar includedPaths y excludedPaths. Para más información, consulte Inicio rápido: Uso de Azure Cosmos DB para NoSQL con Azure SDK para Node.js.
Recuperar los detalles del contenedor:
const containerResponse = await client.database('database').container('container').read();
Establecer el modo de indexación en coherente:
containerResponse.body.indexingPolicy.indexingMode = "consistent";
Agregar una ruta de acceso incluida con un índice espacial:
containerResponse.body.indexingPolicy.includedPaths.push({
includedPaths: [
{
path: "/age/*",
indexes: [
{
kind: cosmos.DocumentBase.IndexKind.Range,
dataType: cosmos.DocumentBase.DataType.String
},
{
kind: cosmos.DocumentBase.IndexKind.Range,
dataType: cosmos.DocumentBase.DataType.Number
}
]
},
{
path: "/locations/*",
indexes: [
{
kind: cosmos.DocumentBase.IndexKind.Spatial,
dataType: cosmos.DocumentBase.DataType.Point
}
]
}
]
});
Agregar una ruta de acceso excluida:
containerResponse.body.indexingPolicy.excludedPaths.push({ path: '/name/*' });
Actualizar el contenedor con cambios:
const replaceResponse = await client.database('database').container('container').replace(containerResponse.body);
Para realizar un seguimiento del progreso de transformación del índice en un contenedor, utilice un objeto RequestOptions que establezca la propiedad populateQuotaInfo en true. Recupere el valor del encabezado de respuesta x-ms-documentdb-collection-index-transformation-progress.
// retrieve the container's details
const containerResponse = await client.database('database').container('container').read({
populateQuotaInfo: true
});
// retrieve the index transformation progress from the response headers
const indexTransformationProgress = replaceResponse.headers['x-ms-documentdb-collection-index-transformation-progress'];
Agregar un índice compuesto:
console.log("create container with composite indexes");
const containerDefWithCompositeIndexes = {
id: "containerWithCompositeIndexingPolicy",
indexingPolicy: {
automatic: true,
indexingMode: IndexingMode.consistent,
includedPaths: [
{
path: "/*",
},
],
excludedPaths: [
{
path: '/"systemMetadata"/*',
},
],
compositeIndexes: [
[
{ path: "/field", order: "ascending" },
{ path: "/key", order: "ascending" },
],
],
},
};
const containerWithCompositeIndexes = (
await database.containers.create(containerDefWithCompositeIndexes)
).container;
Uso del SDK de Go
La estructura IndexingPolicy define la directiva de indexación para un contenedor. Se puede usar al crear un nuevo contenedor o volver a configurar uno existente.
db, _ := client.NewDatabase("demodb")
pkDefinition := azcosmos.PartitionKeyDefinition{
Paths: []string{"/state"},
Kind: azcosmos.PartitionKeyKindHash,
}
indexingPolicy := &azcosmos.IndexingPolicy{
IndexingMode: azcosmos.IndexingModeConsistent,
// add an included path
IncludedPaths: []azcosmos.IncludedPath{
{Path: "/*"},
},
// add an excluded path
ExcludedPaths: []azcosmos.ExcludedPath{
{Path: "/address/*"},
},
// add composite indices
CompositeIndexes: [][]azcosmos.CompositeIndex{
{
{
Path: "/name",
Order: azcosmos.CompositeIndexAscending,
},
{
Path: "/age",
Order: azcosmos.CompositeIndexDescending,
},
},
}
db.CreateContainer(context.Background(), azcosmos.ContainerProperties{
ID: "demo_container",
PartitionKeyDefinition: pkDefinition,
IndexingPolicy: indexingPolicy,
}, nil)
Uso del SDK de Python
Cuando se usa el SDK de Python v3, la configuración del contenedor se administra como un diccionario. Desde este diccionario, puede acceder a la directiva de indexación y a todos sus atributos. Para más información, consulte Inicio rápido: Uso de Azure Cosmos DB para NoSQL con Azure SDK para Python.
Recuperar los detalles del contenedor:
containerPath = 'dbs/database/colls/collection'
container = client.ReadContainer(containerPath)
Establecer el modo de indexación en coherente:
container['indexingPolicy']['indexingMode'] = 'consistent'
Definir una directiva de indexación con una ruta de acceso incluida y un índice espacial:
container["indexingPolicy"] = {
"indexingMode":"consistent",
"spatialIndexes":[
{"path":"/location/*","types":["Point"]}
],
"includedPaths":[{"path":"/age/*","indexes":[]}],
"excludedPaths":[{"path":"/*"}]
}
Definir una directiva de indexación con una ruta de acceso excluida:
container["indexingPolicy"] = {
"indexingMode":"consistent",
"includedPaths":[{"path":"/*","indexes":[]}],
"excludedPaths":[{"path":"/name/*"}]
}
Agregar un índice compuesto:
container['indexingPolicy']['compositeIndexes'] = [
[
{
"path": "/name",
"order": "ascending"
},
{
"path": "/age",
"order": "descending"
}
]
]
Actualizar el contenedor con cambios:
response = client.ReplaceContainer(containerPath, container)