Anpassa indexeringsprinciper i Cosmos DB i Microsoft Fabric

Indexering i Cosmos DB är utformat för att leverera snabba och flexibla frågeprestanda, oavsett hur dina data utvecklas. I den här guiden ändrar du indexeringsprincipen för en container med hjälp av Fabric-portalen eller ett Azure SDK.

Förutsättningar

  • Python 3.12 eller senare
  • Node.js 22 eller senare
  • .NET SDK 9.0 eller senare

Ange med hjälp av Fabric-portalen

Använd först Infrastrukturportalen för att ange indexeringsprincipen för en container

  1. Öppna Fabric-portalen (https://app.fabric.microsoft.com).

  2. Gå till din befintliga Cosmos DB-databas.

  3. Välj och expandera din befintliga container. Välj sedan Inställningar.

  4. I avsnittet Inställningar väljer du fliken Indexeringsprincip .

    Skärmbild av avsnittet 'Indexeringsprincip' för en container i en databas i Fabric-portalen.

  5. Uppdatera inställningen till ett nytt värde i redigeraren. Tänk dig till exempel den här exempeldokumentstrukturen som innehåller både affärsdata och systemmetadata:

    {
      "id": "product-123",
      "_etag": "abc123def456",
      "name": "Wireless Headphones",
      "category": "Electronics",
      "price": 99.99,
      "metadata": {
        "createdBy": "system",
        "lastModified": "2025-10-30T10:30:00Z",
        "version": 1.2,
        "tags": ["internal", "generated"],
        "audit": {
          "importSource": "legacy-system",
          "reviewStatus": "pending"
        }
      }
    }
    
  6. Du kan skapa en indexeringsprincip som indexerar alla egenskaper förutom metadatafält som vanligtvis inte används i frågor:

    {
      "indexingMode": "consistent",
      "automatic": true,
      "includedPaths": [
        {
          "path": "/*"
        }
      ],
      "excludedPaths": [
        {
          "path": "/_etag/?"
        },
        {
          "path": "/metadata/*"
        }
      ]
    }
    

    Anmärkning

    Sökvägen /_etag/? använder ? för att exkludera endast _etag egenskapen själv, medan /metadata/* använder * för att exkludera hela metadata objektet och alla dess underliggande egenskaper.

    Med den här indexeringsprincipen tillämpad på exempeldokumentet:

    • Indexerade egenskaper: id, name, category, price (och alla andra egenskaper förutom de som undantas)
    • Exkluderas från indexering:
      • _etag egenskap (enskilt värde)
      • Hela metadata objektet inklusive createdBy, lastModified, version, tagsoch det kapslade audit objektet med dess egenskaper

    Den här metoden optimerar lagring och prestanda genom att exkludera systemmetadata som vanligtvis inte används i användarfrågor samtidigt som alla affärsdata kan sökas.

Ange med Azure SDK

Slutligen använder du Azure SDK för att ange indexeringsprincipen för en container.

database = client.get_database_client("<database-name>")

container = database.get_container_client("<container-name>")

# Create policy that indexes all paths except metadata fields
indexing_policy = {
  "indexingMode": "consistent",
  "automatic": True,
  "includedPaths": [
    {
      "path": "/*"
    }
  ],
  "excludedPaths": [
    {
      "path": "/_etag/?"
    },
    {
      "path": "/metadata/*"
    }
  ]
}

# Apply the indexing policy to the container
await database.replace_container(container, partition_key=PartitionKey(path='/<partition-key-path>'), indexing_policy=indexing_policy)
const container: Container = client.database('<database-name>').container('<container-name>');

const { resource: containerProperties } = await container.read();

// Create policy that indexes all paths except metadata fields
containerProperties['indexingPolicy'] = {
  indexingMode: 'consistent',
  automatic: true,
  includedPaths: [
    {
      path: '/*'
    }
  ],
  excludedPaths: [
    {
      path: '/_etag/?'
    },
    {
      path: '/metadata/*'
    }
  ]
}

await container.replace(containerProperties);
Container container = client
    .GetDatabase("<database-name>")
    .GetContainer("<container-name>");

ContainerProperties properties = await container.ReadContainerAsync();

// Create policy that indexes all paths except metadata fields
IndexingPolicy indexingPolicy = new()
{
    IndexingMode = IndexingMode.Consistent,
    Automatic = true
};
indexingPolicy.IncludedPaths.Add(
    new IncludedPath { Path = "/*" }
);
indexingPolicy.ExcludedPaths.Add(
    new ExcludedPath{ Path = "/_etag/?" }
);
indexingPolicy.ExcludedPaths.Add(
    new ExcludedPath{ Path = "/metadata/*" }
);
properties.IndexingPolicy = indexingPolicy;

await container.ReplaceContainerAsync(properties);