Sdílet prostřednictvím


Přizpůsobení zásad indexování ve službě Cosmos DB v Microsoft Fabric

Indexování ve službě Cosmos DB je navržené tak, aby poskytovalo rychlý a flexibilní výkon dotazů bez ohledu na to, jak se vaše data vyvíjejí. V této příručce upravíte zásady indexování pro kontejner pomocí portálu Fabric nebo sady Azure SDK.

Požadavky

  • Python 3.12 nebo novější
  • Node.js 22 nebo novější
  • .NET SDK 9.0 nebo novější

Nastavení pomocí portálu Fabric

Nejprve pomocí portálu Fabric nastavte zásady indexování pro kontejner.

  1. Otevřete portál Fabric (https://app.fabric.microsoft.com).

  2. Přejděte do existující databáze Cosmos DB.

  3. Vyberte a rozbalte existující kontejner. Pak vyberte Nastavení.

  4. V části Nastavení vyberte kartu Zásady indexování .

    Snímek obrazovky sekce 'Zásady indexování' pro kontejner v databázi na portálu Fabric.

  5. V editoru aktualizujte nastavení na novou hodnotu. Představte si například tuto ukázkovou strukturu dokumentů, která obsahuje obchodní data i systémová metadata:

    {
      "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. Můžete vytvořit zásadu indexování, která indexuje všechny vlastnosti s výjimkou polí metadat, která se obvykle nepoužívají v dotazech:

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

    Poznámka:

    Cesta /_etag/? slouží ? k vyloučení samotné vlastnosti _etag, zatímco /metadata/* používá * k vyloučení celého metadata objektu a všech jeho podřízených vlastností.

    S použitím této zásady indexování v ukázkovém dokumentu:

    • Indexované vlastnosti: id, name, , categoryprice(a všechny ostatní vlastnosti kromě těch vyloučených)
    • Vyloučeno z indexování:
      • _etag vlastnost (jedna hodnota)
      • Celý objekt metadata včetně createdBy, lastModified, version, tags a vnořeného objektu audit s jeho vlastnostmi

    Tento přístup optimalizuje úložiště a výkon vyloučením systémových metadat, která se obvykle nepoužívají v uživatelských dotazech, a přitom umožňuje prohledávat všechna obchodní data.

Nastavení pomocí sady Azure SDK

Nakonec pomocí sady Azure SDK nastavte zásady indexování pro kontejner.

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);