Skip to content

Commit b6666c7

Browse files
committed
June Freshness Pass
1 parent 7712442 commit b6666c7

8 files changed

+42
-46
lines changed

articles/search/keyless-connections.md

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
title: Use keyless connections in search apps
33
description: Use keyless connections with an Azure Identity library for Microsoft Entra ID authentication and authorization with Azure AI Search.
44
ms.topic: how-to
5-
ms.date: 10/30/2024
5+
ms.date: 06/17/2025
66
ms.service: azure-ai-search
77
author: HeidiSteen
88
ms.author: heidist
@@ -16,35 +16,31 @@ In your application code, you can set up a keyless connection to Azure AI Search
1616

1717
Keyless connections are enabled with the following steps:
1818

19-
* Configure your authentication.
19+
* Enable role-based access on your search service
2020
* Set environment variables, as needed.
2121
* Use an Azure Identity library credential type to create an Azure AI Search client object.
2222

2323
## Prerequisites
2424

2525
The following steps need to be completed for both local development and production workloads:
2626

27-
* [Create an AI Search resource](#create-an-ai-search-resource)
27+
* [Create an AI Search resource](search-create-service-portal.md)
2828
* [Enable role-based access on your search service](search-security-enable-roles.md)
2929
* [Install Azure Identity client library](#install-azure-identity-client-library)
3030

31-
### Create an AI Search resource
32-
33-
Before continuing with this article, you need an Azure AI Search resource to work with. If you don't have a resource, [create your resource](search-create-service-portal.md) now. [Enable role-based access control (RBAC)](search-security-enable-roles.md) for the resource.
34-
35-
### Install Azure Identity client library
31+
## Install Azure Identity client library
3632

3733
To use a keyless approach, update your AI Search enabled code with the Azure Identity client library.
3834

39-
#### [.NET](#tab/csharp)
35+
### [.NET](#tab/csharp)
4036

4137
Install the [Azure Identity client library for .NET](https://www.nuget.org/packages/Azure.Identity):
4238

4339
```dotnetcli
4440
dotnet add package Azure.Identity
4541
```
4642

47-
#### [Java](#tab/java)
43+
### [Java](#tab/java)
4844

4945
Install the [Azure Identity client library for Java](https://mvnrepository.com/artifact/com.azure/azure-identity) with the following POM file:
5046

@@ -60,15 +56,15 @@ Install the [Azure Identity client library for Java](https://mvnrepository.com/a
6056
</dependencyManagement>
6157
```
6258

63-
#### [JavaScript](#tab/javascript)
59+
### [JavaScript](#tab/javascript)
6460

6561
Install the [Azure Identity client library for JavaScript](https://www.npmjs.com/package/@azure/identity):
6662

6763
```console
6864
npm install --save @azure/identity
6965
```
7066

71-
#### [Python](#tab/python)
67+
### [Python](#tab/python)
7268

7369
Install the [Azure Identity client library for Python](https://pypi.org/project/azure-identity/):
7470

@@ -82,7 +78,7 @@ pip install azure-identity
8278

8379
The Azure Identity library's `DefaultAzureCredential` allows you to run the same code in the local development environment and in the Azure cloud. Create a single credential and reuse the credential instance as needed to take advantage of token caching.
8480

85-
#### [.NET](#tab/csharp)
81+
### [.NET](#tab/csharp)
8682

8783
For more information on `DefaultAzureCredential` for .NET, see [Azure Identity client library for .NET](/dotnet/api/overview/azure/identity-readme#defaultazurecredential).
8884

@@ -104,7 +100,7 @@ SearchClient searchClient = new(new Uri(endpoint), indexName, credential);
104100
SearchIndexClient searchIndexClient = new(endpoint, credential);
105101
```
106102

107-
#### [Java](#tab/java)
103+
### [Java](#tab/java)
108104

109105
For more information on `DefaultAzureCredential` for Java, see [Azure Identity client library for Java](/java/api/overview/azure/identity-readme#defaultazurecredential).
110106

@@ -148,7 +144,7 @@ SearchIndexAsyncClient searchIndexAsyncClient = new SearchIndexClientBuilder()
148144
.buildAsyncClient();
149145
```
150146

151-
#### [JavaScript](#tab/javascript)
147+
### [JavaScript](#tab/javascript)
152148

153149
For more information on `DefaultAzureCredential` for JavaScript, see [Azure Identity client library for JavaScript](/javascript/api/overview/azure/identity-readme#defaultazurecredential).
154150

@@ -178,7 +174,7 @@ const indexClient = new SearchIndexClient(
178174
);
179175
```
180176

181-
#### [Python](#tab/python)
177+
### [Python](#tab/python)
182178

183179
For more information on `DefaultAzureCredential` for Python, see [Azure Identity client library for Python](/python/api/overview/azure/identity-readme#defaultazurecredential).
184180

articles/search/knowledge-store-create-rest.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ ms.service: azure-ai-search
99
ms.custom:
1010
- ignite-2023
1111
ms.topic: how-to
12-
ms.date: 12/10/2024
12+
ms.date: 06/17/2025
1313
---
1414

1515
# Create a knowledge store using REST

articles/search/knowledge-store-projection-example-long.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ ms.service: azure-ai-search
1010
ms.custom:
1111
- ignite-2023
1212
ms.topic: conceptual
13-
ms.date: 12/10/2024
13+
ms.date: 06/17/2025
1414
---
1515

1616
# Detailed example of shapes and projections in a knowledge store

articles/search/knowledge-store-projection-overview.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
---
22
title: Projection concepts
33
titleSuffix: Azure AI Search
4-
description: Introduces projection concepts and best practices. If you are creating a knowledge store in Azure AI Search, projections determine the type, quantity, and composition of objects in Azure Storage.
4+
description: Introduces projection concepts and best practices. If you're creating a knowledge store in Azure AI Search, projections determine the type, quantity, and composition of objects in Azure Storage.
55

66
manager: nitinme
77
author: HeidiSteen
@@ -10,7 +10,7 @@ ms.service: azure-ai-search
1010
ms.custom:
1111
- ignite-2023
1212
ms.topic: conceptual
13-
ms.date: 12/10/2024
13+
ms.date: 06/17/2025
1414
---
1515

1616
# Knowledge store "projections" in Azure AI Search

articles/search/knowledge-store-projection-shape.md

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ ms.service: azure-ai-search
88
ms.custom:
99
- ignite-2023
1010
ms.topic: conceptual
11-
ms.date: 12/10/2024
11+
ms.date: 06/17/2025
1212
---
1313

1414
# Shaping data for projection into a knowledge store
@@ -21,9 +21,9 @@ By itself, the enrichment tree doesn't include logic that would inform how its c
2121

2222
## Approaches for creating shapes
2323

24-
There are two ways to shape enriched content to that it can be projected into a knowledge store:
24+
There are two ways to shape enriched content so that it can be projected into a knowledge store:
2525

26-
+ Use the [Shaper skill](cognitive-search-skill-shaper.md) to create nodes in an enrichment tree that are used expressly for projection. Most skills create new content. In contrast, a Shaper skill work with existing nodes, usually to consolidate multiple nodes into a single complex object. This is useful for tables, where you want the output of multiple nodes to be physically expressed as columns in the table.
26+
+ Use the [Shaper skill](cognitive-search-skill-shaper.md) to create nodes in an enrichment tree that are used expressly for projection. Most skills create new content. In contrast, a Shaper skill works with existing nodes, usually to consolidate multiple nodes into a single complex object. This is useful for tables, where you want the output of multiple nodes to be physically expressed as columns in the table.
2727

2828
+ Use an inline shape within the projection definition itself.
2929

@@ -111,11 +111,11 @@ Within a Shaper skill, an input can have a `sourceContext` element. This same pr
111111

112112
`sourceContext` is used to construct multi-level, nested objects in an enrichment pipeline. If the input is at a *different* context than the skill context, use the *sourceContext*. The *sourceContext* requires you to define a nested input with the specific element being addressed as the source.
113113

114-
In the example above, sentiment analysis and key phrases extraction was performed on text that was split into pages for more efficient analysis. Assuming you want the scores and phrases projected into a table, you'll now need to set the context to nested input that provides the score and phrase.
114+
In the previous example, sentiment analysis and key phrases extraction was performed on text that was split into pages for more efficient analysis. Assuming you want the scores and phrases projected into a table, you'll now need to set the context to nested input that provides the score and phrase.
115115

116116
### Projecting a shape into multiple tables
117117

118-
With the `tableprojection` node defined in the `outputs` section above, you can slice parts of the `tableprojection` node into individual, related tables:
118+
With the `tableprojection` node defined in the `outputs` in the previous section, you can slice parts of the `tableprojection` node into individual, related tables:
119119

120120
```json
121121
"projections": [
@@ -145,8 +145,8 @@ With the `tableprojection` node defined in the `outputs` section above, you can
145145

146146
Inline shaping is the ability to form new shapes within the projection definition itself. Inline shaping has these characteristics:
147147

148-
+ The shape can be used only by the projection that contains it.
149-
+ The shape can be identical to what a Shaper skill would produce.
148+
+ The shape is used only by the projection that contains it.
149+
+ The shape can be identical to what a Shaper skill produces.
150150

151151
An inline shape is created using `sourceContext` and `inputs`.
152152

articles/search/knowledge-store-projections-examples.md

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -10,20 +10,20 @@ ms.service: azure-ai-search
1010
ms.custom:
1111
- ignite-2023
1212
ms.topic: conceptual
13-
ms.date: 12/10/2024
13+
c
1414
---
1515

1616
# Define projections in a knowledge store
1717

18-
[Projections](knowledge-store-projection-overview.md) are the component of a [knowledge store definition](knowledge-store-concept-intro.md) that determines where AI enriched content is stored in Azure Storage. Projections determine the type, quantity, and composition of the data structures containing your content.
18+
[Projections](knowledge-store-projection-overview.md) are the component of a [knowledge store definition](knowledge-store-concept-intro.md) that determines how AI enriched content is stored in Azure Storage. Projections determine the type, quantity, and composition of the data structures containing your content.
1919

2020
In this article, learn the syntax for each type of projection:
2121

2222
+ [Table projections](#define-a-table-projection)
2323
+ [Object projections](#define-an-object-projection)
2424
+ [File projections](#define-a-file-projection)
2525

26-
Recall that projections are defined under the "knowledgeStore" property of a skillset.
26+
Recall that projections are defined under the `knowledgeStore` property of a skillset.
2727

2828
```json
2929
"knowledgeStore" : {
@@ -54,7 +54,7 @@ Except for file projections, which only accept binary images, the source must be
5454

5555
While a node might resolve to a single field, a more common representation is a reference to a complex shape. Complex shapes are created through a shaping methodology, either a [Shaper skill](cognitive-search-skill-shaper.md) or [an inline shaping definition](knowledge-store-projection-shape.md#inline-shape), but usually a Shaper skill. The fields or elements of the shape determine the fields in containers and tables.
5656

57-
Shaper skills are favored because it outputs JSON, where as most skills don't output valid JSON on their own. In many cases, the same data shape created by a Shaper skill can be used equally by both table and object projections.
57+
Shaper skills are favored because it outputs JSON, whereas most skills don't output valid JSON on their own. In many cases, the same data shape created by a Shaper skill can be used equally by both table and object projections.
5858

5959
Given source input requirements, knowing how to [shape data](knowledge-store-projection-shape.md) becomes a practical requirement for projection definition, especially if you're working with tables.
6060

@@ -67,13 +67,13 @@ To define a table projection, use the `tables` array in the projections property
6767
| Property | Description |
6868
|----------|-------------|
6969
| tableName | Determines the name of a new table created in Azure Table Storage. |
70-
| generatedKeyName | Column name for the key that uniquely identifies each row. The value is system-generated. If you omit this property, a column will be created automatically that uses the table name and "key" as the naming convention. |
70+
| generatedKeyName | Column name for the key that uniquely identifies each row. The value is system-generated. If you omit this property, a column is created automatically that uses the table name and "key" as the naming convention. |
7171
| source | A path to a node in an enrichment tree. The node should be a reference to a complex shape that determines which columns are created in the table.|
7272

7373
In table projections, "source" is usually the output of a [Shaper skill](cognitive-search-skill-shaper.md) that defines the shape of the table. Tables have rows and columns, and shaping is the mechanism by which rows and columns are specified. You can use a [Shaper skill or inline shapes](knowledge-store-projection-shape.md). The Shaper skill produces valid JSON, but the source could be the output from any skill, if valid JSON.
7474

7575
> [!NOTE]
76-
> Table projections are subject to the [storage limits](/rest/api/storageservices/understanding-the-table-service-data-model) imposed by Azure Storage. The entity size cannot exceed 1 MB and a single property can be no bigger than 64 KB. These constraints make tables a good solution for storing a large number of small entities.
76+
> Table projections are subject to the [storage limits](/rest/api/storageservices/understanding-the-table-service-data-model) imposed by Azure Storage. The entity size can't exceed 1 MB and a single property can be no bigger than 64 KB. These constraints make tables a good solution for storing a large number of small entities.
7777
7878
### Single table example
7979

@@ -128,14 +128,14 @@ Columns are derived from the "source". The following data shape containing Hotel
128128

129129
A common pattern for table projections is to have multiple related tables, where system-generated partitionKey and rowKey columns are created to support cross-table relationships for all tables under the same projection group.
130130

131-
Creating multiple tables can be useful if you want control over how related data is aggregated. If enriched content has unrelated or independent components, for example the keywords extracted from a document might be unrelated from the entities recognized in the same document, you can split those fields out into adjacent tables.
131+
Creating multiple tables can be useful if you want control over how related data is aggregated. If enriched content has unrelated or independent components, for example the keywords extracted from a document might be unrelated from the entities recognized in the same document, you can split out those fields into adjacent tables.
132132

133133
When you're projecting to multiple tables, the complete shape is projected into each table, unless a child node is the source of another table within the same group. Adding a projection with a source path that is a child of an existing projection results in the child node being sliced out of the parent node and projected into the new yet related table. This technique allows you to define a single node in a Shaper skill that can be the source for all of your projections.
134134

135135
The pattern for multiple tables consists of:
136136

137137
+ One table as the parent or main table
138-
+ Additional tables to contain slices of the enriched content
138+
+ Other tables to contain slices of the enriched content
139139

140140
For example, assume a Shaper skill outputs an "EnrichedShape" that contains hotel information, plus enriched content like key phrases, locations, and organizations. The main table would include fields that describe the hotel (ID, name, description, address, category). Key phrases would get the key phrase column. Entities would get the entity columns.
141141

@@ -166,7 +166,7 @@ To define an object projection, use the `objects` array in the projections prope
166166
| Property | Description |
167167
|----------|-------------|
168168
| storageContainer | Determines the name of a new container created in Azure Storage. |
169-
| generatedKeyName | Column name for the key that uniquely identifies each row. The value is system-generated. If you omit this property, a column will be created automatically that uses the table name and "key" as the naming convention. |
169+
| generatedKeyName | Column name for the key that uniquely identifies each row. The value is system-generated. If you omit this property, a column is created automatically that uses the table name and "key" as the naming convention. |
170170
| source | A path to a node in an enrichment tree that is the root of the projection. The node is usually a reference to a complex data shape that determines blob structure.|
171171

172172
The following example projects individual hotel documents, one hotel document per blob, into a container called `hotels`.
@@ -193,7 +193,7 @@ The following example projects individual hotel documents, one hotel document pe
193193
}
194194
```
195195

196-
The source is the output of a Shaper skill, named `"objectprojection"`. Each blob will have a JSON representation of each field input.
196+
The source is the output of a Shaper skill, named `"objectprojection"`. Each blob has a JSON representation of each field input.
197197

198198
```json
199199
{
@@ -237,10 +237,10 @@ To define a file projection, use the `files` array in the projections property.
237237
| Property | Description |
238238
|----------|-------------|
239239
| storageContainer | Determines the name of a new container created in Azure Storage. |
240-
| generatedKeyName | Column name for the key that uniquely identifies each row. The value is system-generated. If you omit this property, a column will be created automatically that uses the table name and "key" as the naming convention. |
240+
| generatedKeyName | Column name for the key that uniquely identifies each row. The value is system-generated. If you omit this property, a column is created automatically that uses the table name and "key" as the naming convention. |
241241
| source | A path to a node in an enrichment tree that is the root of the projection. For images files, the source is always `/document/normalized_images/*`. File projections only act on the `normalized_images` collection. Neither indexers nor a skillset will pass through the original non-normalized image.|
242242

243-
The destination is always a blob container, with a folder prefix of the base64 encoded value of the document ID. If there are multiple images, they'll be placed together in the same folder. File projections can't share the same container as object projections and need to be projected into a different container.
243+
The destination is always a blob container, with a folder prefix of the base64 encoded value of the document ID. If there are multiple images, they're placed together in the same folder. File projections can't share the same container as object projections and need to be projected into a different container.
244244

245245
The following example projects all normalized images extracted from the document node of an enriched document, into a container called `myImages`.
246246

@@ -273,13 +273,13 @@ You can process projections by following these steps:
273273

274274
1. Use Azure portal to verify object creation in Azure Storage.
275275

276-
1. If you're projecting tables, [import them into Power BI](knowledge-store-connect-power-bi.md) for table manipulation and visualization. In most cases, Power BI will auto-discover the relationships among tables.
276+
1. If you're projecting tables, [import them into Power BI](knowledge-store-connect-power-bi.md) for table manipulation and visualization. In most cases, Power BI autodiscovers the relationships among tables.
277277

278278
## Common issues
279279

280280
Omitting any of the following steps can result in unexpected outcomes. Check for the following conditions if your output doesn't look right.
281281

282-
+ String enrichments aren't shaped into valid JSON. When strings are enriched, for example `merged_content` enriched with key phrases, the enriched property is represented as a child of `merged_content` within the enrichment tree. The default representation isn't well-formed JSON. At projection time, make sure to transform the enrichment into a valid JSON object with a name and a value. Using a Shaper skill or defining inline shapes will help resolve this issue.
282+
+ String enrichments aren't shaped into valid JSON. When strings are enriched, for example `merged_content` enriched with key phrases, the enriched property is represented as a child of `merged_content` within the enrichment tree. The default representation isn't well-formed JSON. At projection time, make sure to transform the enrichment into a valid JSON object with a name and a value. Using a Shaper skill or defining inline shapes help resolve this issue.
283283

284284
+ Omission of `/*` at the end of a source path. If the source of a projection is `/document/projectionShape/keyPhrases`, the key phrases array is projected as a single object/row. Instead, set the source path to `/document/projectionShape/keyPhrases/*` to yield a single row or object for each of the key phrases.
285285

0 commit comments

Comments
 (0)