View Diff on GitHub
# Highlights
今回のコード変更には、新たなリダイレクトの追加、クイックスタートリンクの文言修正、ドキュメントレイアウトスキルの内容更新、Azure Visionマルチモーダル埋め込みスキルの改善などの諸変更が含まれています。多くのファイルに対してマイナーな更新が行われており、特に検索機能やアクセス制御においてユーザー体験の向上を目指しています。
New features
- 赤外線接続の新しいリダイレクトが追加され、ユーザーが関連ドキュメントに簡単にアクセスできるようになりました。
Breaking changes
- 特別なブレーキング・チェンジは見当たりませんが、リンクやタイトルの修正により、ユーザーが従来のナビゲーションに慣れている場合、若干の混乱を招く可能性があります。
Other updates
- クイックスタートリンクやドキュメントの説明文の簡素化と明瞭化。
- APIキーやロールベースアクセス制御の改善により、セキュリティとアクセスの管理がより直感的になりました。
- 特定のファイルにおいて、メタデータの更新や新しいセクションの追加で内容の一貫性を強化しました。
Insights
今回の変更は、特にAzure AI Searchに関するドキュメントの整備とユーザビリティの向上に焦点を当てています。これにより、ドキュメントを参照する利用者がより容易に必要な情報を得られるようにするだけでなく、新たなリソースや機能についての理解も深めています。
多くのファイルでリンクの修正や文言の調整が行われ、ユーザーに対する情報提供がより正確で関連性の高いものとなりました。たとえば、Searchの機能についてのクイックスタートリンクが明確に整理され、ユーザーがプロジェクトを開始する手助けとなっています。また、ロールベースのアクセス制御の更新により、セキュリティ権限の管理が一層緻密になりました。
Azure Visionやエージェントリトリーバルなどの技術情報もアップデートされ、最新の実践に基づいた情報が提供されることで、エンジニアリングチームがより効率的に開発を進められるよう支援します。特に、言語別のコードスニペットが追加され、実装に必要な具体的な情報が手に入りやすくなっています。
これらの変更は、エンドユーザーの体験を向上させるだけでなく、運用やセキュリティの観点からもプロジェクトがスムーズに進行する基盤を整えることを目的としています。今後もこうした継続的なドキュメントの改善が期待されます。
Summary Table
Modified Contents
articles/search/.openpublishing.redirection.search.json
Diff
@@ -645,6 +645,11 @@
"source_path_from_root": "/articles/search/search-get-started-rag.md",
"redirect_url": "https://github.com/Azure-Samples/azure-search-classic-rag/tree/main/quickstarts",
"redirect_document_id": false
+ },
+ {
+ "source_path_from_root": "/articles/search/keyless-connections.md",
+ "redirect_url": "/azure/search/search-security-rbac-client-code",
+ "redirect_document_id": true
}
]
}
\ No newline at end of file
Summary
{
"modification_type": "minor update",
"modification_title": "赤外線接続の新しいリダイレクトを追加"
}
Explanation
この変更は、articles/search/.openpublishing.redirection.search.jsonファイルに対するマイナーな更新で、リダイレクトに関する新しいエントリが追加されました。具体的には、source_path_from_rootが/articles/search/keyless-connections.mdである新しいリダイレクトが追加され、そのリダイレクト先として/azure/search/search-security-rbac-client-codeが指定されています。このリダイレクトは、ドキュメントIDを持つ設定になっています。合計で5行の変更があり、内容の更新が行われたことで、検索機能に関連するリダイレクトが改善されました。変更後のファイルは、より多くのドキュメントへのナビゲーションを容易にするためのものです。
articles/search/agentic-retrieval-overview.md
Diff
@@ -106,8 +106,8 @@ Currently, the portal only supports creating search index and blob knowledge sou
### [**Quickstarts**](#tab/quickstarts)
-+ [Quickstart: Use agentic retrieval in the Azure portal](get-started-portal-agentic-retrieval.md)
-+ [Quickstart: Use agentic retrieval in Azure AI Search](search-get-started-agentic-retrieval.md) (C#, Java, JavaScript, Python, TypeScript, REST)
++ [Quickstart: Agentic retrieval in the Azure portal](get-started-portal-agentic-retrieval.md)
++ [Quickstart: Agentic retrieval](search-get-started-agentic-retrieval.md) (C#, Java, JavaScript, Python, TypeScript, REST)
### [**How-to guides**](#tab/how-to-guides)
Summary
{
"modification_type": "minor update",
"modification_title": "クイックスタートリンクの文言修正"
}
Explanation
この変更は、articles/search/agentic-retrieval-overview.mdファイルに対するマイナーな更新で、クイックスタートリンクの文言が修正されました。具体的には、リンクの表現がやや簡素化され、「Use agentic retrieval in the Azure portal」から「Agentic retrieval in the Azure portal」へと変更されました。また、もう一つのリンクも同様に、表現が簡略化されています。この変更により、リンクがより分かりやすくなり、読みやすさが向上しました。合計で4行の変更があり、その内容の改善によって、ユーザーにとっての利便性が高まることが期待されます。
articles/search/cognitive-search-skill-document-intelligence-layout.md
Diff
@@ -1,5 +1,5 @@
---
-title: Document Layout skill
+title: Document Layout Skill
titleSuffix: Azure AI Search
description: Analyze a document to extract regions of interest and their inter-relationships to produce a syntactical representation (markdown format) in an enrichment pipeline in Azure AI Search.
author: rawan
@@ -9,52 +9,47 @@ ms.custom:
- references_regions
- ignite-2024
ms.topic: article
-ms.date: 11/19/2025
+ms.date: 01/16/2026
ms.update-cycle: 365-days
---
# Document Layout skill
-The **Document Layout** skill analyzes a document to detect structure and characteristics, and produces a syntactical representation of the document in Markdown or Text format. You can use it to extract text and images, where image extraction includes location metadata that preserves image position within the document. Image proximity to related content is beneficial in Retrieval Augmented Generation (RAG) workloads and [multimodal search](multimodal-search-overview.md) scenarios.
+The **Document Layout** skill uses the [layout model](/azure/ai-services/document-intelligence/concept-layout) from Azure Document Intelligence in Foundry Tools to analyze a document, detect its structure and characteristics, and produce a syntactical representation in Markdown or text format. This skill supports text and image extraction, the latter of which includes location metadata that preserves image position within a document. Image proximity to related content is beneficial in retrieval-augmented generation (RAG) and [multimodal search](multimodal-search-overview.md) scenarios.
-This article is the reference documentation for the Document Layout skill. For usage information, see [How to chunk and vectorize by document layout](search-how-to-semantic-chunking.md).
-
-This skill uses the [layout model](/azure/ai-services/document-intelligence/concept-layout) from [Azure Document Intelligence in Foundry Tools](/azure/ai-services/document-intelligence/overview).
+For transactions that exceed 20 documents per indexer per day, this skill requires you to [attach a billable Microsoft Foundry resource](cognitive-search-attach-cognitive-services.md) to your skillset. Execution of built-in skills is charged at the existing [Foundry Tools Standard price](https://azure.microsoft.com/pricing/details/cognitive-services/).
-This skill is bound to a [billable Microsoft Foundry resource](cognitive-search-attach-cognitive-services.md) for transactions that exceed 20 documents per indexer per day. Execution of built-in skills is charged at the existing [Foundry Tools Standard price](https://azure.microsoft.com/pricing/details/cognitive-services/).
+This article is the reference documentation for the Document Layout skill. For usage information, see [How to chunk and vectorize by document layout](search-how-to-semantic-chunking.md).
> [!TIP]
-> It's common to use this skill on content such as PDFs that have structure and images. The following tutorials demonstrate image verbalization with two different data chunking techniques:
+> It's common to use this skill on content that has structure and images, such as PDFs. The following tutorials demonstrate image verbalization with two different data chunking techniques:
>
> - [Tutorial: Verbalize images from a structured document layout](tutorial-document-layout-image-verbalization.md)
> - [Tutorial: Vectorize from a structured document layout](tutorial-document-layout-multimodal-embeddings.md)
->
## Limitations
This skill has the following limitations:
-+ The skill isn't suitable for large documents requiring more than 5 minutes of processing in the Azure Document Intelligence layout model. The skill times out, but charges still apply to the Foundry resource if it's attached to the skillset for billing purposes. Ensure documents are optimized to stay within processing limits to avoid unnecessary costs.
++ The skill isn't suitable for large documents requiring more than five minutes of processing in the Azure Document Intelligence layout model. The skill times out, but charges still apply to the Foundry resource if it's attached to the skillset for billing purposes. Ensure documents are optimized to stay within processing limits to avoid unnecessary costs.
-+ Since this skill calls the Azure Document Intelligence layout model, all documented [service behaviors for different document types](/azure/ai-services/document-intelligence/prebuilt/layout#pages) for different file types apply to its output. For example, Word (DOCX) and PDF files may produce different results due to differences in how images are handled. If consistent image behavior across DOCX and PDF is required, consider converting documents to PDF or reviewing the [multimodal search documentation](multimodal-search-overview.md) for alternative approaches.
++ Because this skill calls the Azure Document Intelligence layout model, all documented [service behaviors for different document types](/azure/ai-services/document-intelligence/prebuilt/layout#pages) for different file types apply to its output. For example, Word (DOCX) and PDF files may produce different results due to differences in how images are handled. If consistent image behavior across DOCX and PDF is required, consider converting documents to PDF or reviewing the [multimodal search documentation](multimodal-search-overview.md) for alternative approaches.
## Supported regions
-The Document Layout skill calls the [Azure Document Intelligence 2024-11-30 API version V4.0](/rest/api/aiservices/operation-groups).
+The Document Layout skill calls v4.0 (2024-11-30) of the [Azure Document Intelligence REST API](/rest/api/aiservices/operation-groups).
-Supported regions vary by modality and how the skill connects to the Azure Document Intelligence layout model.
+Supported regions vary by modality and how the skill connects to the Azure Document Intelligence layout model. Currently, the implemented version of the layout model doesn't support [21Vianet](/azure/china/overview-operations) regions.
| Approach | Requirement |
|----------|-------------|
-| [**Import data (new)** wizard](search-import-data-portal.md) | Create a Foundry resource in one of these regions to get the portal experience: **East US**, **West Europe**, **North Central US**. |
-| Programmatic, using [Microsoft Entra ID authentication (preview)](cognitive-search-attach-cognitive-services.md#bill-through-a-keyless-connection) for billing | Create Azure AI Search in one of the regions where the service is supported, according to [Product availability by region](https://azure.microsoft.com/explore/global-infrastructure/products-by-region/table). <br>Create the Foundry resource in any region listed in the [Product availability by region](https://azure.microsoft.com/explore/global-infrastructure/products-by-region/table) table.|
-| Programmatic, using a [Foundry resource key](cognitive-search-attach-cognitive-services.md#bill-through-a-keyless-connection) for billing | Create your Azure AI Search service and Foundry resource in the same region. This means that the region chosen must have support for both [Azure AI Search and Azure Document Intelligence services](https://azure.microsoft.com/explore/global-infrastructure/products-by-region/table). |
-
-The implemented version of Document Layout model doesn't have support for [21Vianet](/azure/china/overview-operations) regions at this time.
+| [**Import data (new)** wizard](search-import-data-portal.md) | Create an Azure AI Search service and [Azure AI multi-service account](https://portal.azure.com/#create/Microsoft.CognitiveServicesAllInOne) in one of the following regions: East US, West Europe, or North Central US. |
+| Programmatic, using a [Microsoft Foundry resource key](cognitive-search-attach-cognitive-services.md#bill-through-a-keyless-connection) for billing | Create an Azure AI Search service and Microsoft Foundry resource in the same region. The region must support both [Azure AI Search and Azure Document Intelligence](https://azure.microsoft.com/explore/global-infrastructure/products-by-region/table). |
+| Programmatic, using [Microsoft Entra ID authentication (preview)](cognitive-search-attach-cognitive-services.md#bill-through-a-keyless-connection) for billing | No same-region requirement. Create an Azure AI Search service and Microsoft Foundry resource in any region where [each service is available](https://azure.microsoft.com/explore/global-infrastructure/products-by-region/table). |
## Supported file formats
-This skill recognizes the following file formats.
+This skill recognizes the following file formats:
+ .PDF
+ .JPEG
@@ -69,7 +64,7 @@ This skill recognizes the following file formats.
## Supported languages
-Refer to [Azure Document Intelligence layout model supported languages](/azure/ai-services/document-intelligence/language-support/ocr?view=doc-intel-3.1.0&tabs=read-print%2Clayout-print%2Cgeneral#layout&preserve-view=true) for printed text.
+For printed text, see [Azure Document Intelligence layout model supported languages](/azure/ai-services/document-intelligence/language-support/ocr?view=doc-intel-3.1.0&tabs=read-print%2Clayout-print%2Cgeneral#layout&preserve-view=true).
## @odata.type
Summary
{
"modification_type": "minor update",
"modification_title": "ドキュメントレイアウトスキルの内容更新"
}
Explanation
この変更は、articles/search/cognitive-search-skill-document-intelligence-layout.mdファイルに対するマイナーな更新で、主にドキュメントレイアウトスキルに関する内容が修正されています。具体的には、スキルのタイトルや説明が改善され、文言が調整されました。例えば、「Document Layout skill」から「Document Layout Skill」と大文字化され、より明確な表現となっています。
また、スキルの使い方に関する情報や制限事項の説明も強化され、ユーザーがこのスキルを利用する上での理解を深めるための情報が追加されています。さらに、ファイル形式やサポートされる言語に関する情報も更新され、ドキュメント全体の一貫性と可読性が向上しています。
合計で35行の変更があり、主にテキストの追加および削除により内容のクオリティが向上しました。この更新は、ドキュメントレイアウトスキルの利用者にとって重要な情報源となることでしょう。
articles/search/cognitive-search-skill-vision-vectorize.md
Diff
@@ -1,5 +1,5 @@
---
-title: Azure Vision multimodal embeddings skill
+title: Azure Vision Multimodal Embeddings Skill
titleSuffix: Azure AI Search
description: Vectorize images or text using the Azure Vision multimodal embeddings API.
author: gmndrg
@@ -9,7 +9,7 @@ ms.custom:
- build-2024
- references_regions
ms.topic: article
-ms.date: 10/23/2025
+ms.date: 01/16/2026
---
# Azure Vision multimodal embeddings skill
@@ -19,14 +19,19 @@ ms.date: 10/23/2025
The **Azure Vision multimodal embeddings** skill uses the [multimodal embeddings API](/azure/ai-services/computer-vision/concept-image-retrieval) from Azure Vision in Foundry Tools to generate embeddings for text or image input.
-For transactions that exceed 20 documents per indexer per day, this skill requires that you [attach a billable Microsoft Foundry resource to your skillset](cognitive-search-attach-cognitive-services.md). Execution of built-in skills is charged at the existing [Foundry Tools Standard price](https://azure.microsoft.com/pricing/details/cognitive-services/). Image extraction is also [billable by Azure AI Search](https://azure.microsoft.com/pricing/details/search/).
+For transactions that exceed 20 documents per indexer per day, this skill requires you to [attach a billable Microsoft Foundry resource](cognitive-search-attach-cognitive-services.md) to your skillset. Execution of built-in skills is charged at the existing [Foundry Tools Standard price](https://azure.microsoft.com/pricing/details/cognitive-services/). Image extraction is also [billable by Azure AI Search](https://azure.microsoft.com/pricing/details/search/).
-Location of resources is a consideration for billing. Because you're using a preview REST API version to create a skillset that contains preview skills, you can use a [keyless connection](cognitive-search-attach-cognitive-services.md#bill-through-a-keyless-connection) to bypass the same-region requirement. However, for key-based connections, Azure AI Search and Foundry must be in the same region. To ensure region compatibility:
+The Microsoft Foundry resource is used for billing purposes only. Content processing occurs on separate resources managed and maintained by Azure AI Search. Your data is processed in the [Geo](https://azure.microsoft.com/explore/global-infrastructure/data-residency/) where your resource is deployed.
-1. Find a [supported region for multimodal embeddings](/azure/ai-services/computer-vision/overview-image-analysis?tabs=4-0#region-availability).
-1. Verify the [region provides AI enrichment](search-region-support.md).
+## Supported regions
-The Foundry resource is used for billing purposes only. Content processing occurs on separate resources managed and maintained by Azure AI Search within the same geo. Your data is processed in the [Geo](https://azure.microsoft.com/explore/global-infrastructure/data-residency/) where your resource is deployed.
+Supported regions vary by modality and how the skill connects to the Azure Vision multimodal embeddings API.
+
+| Approach | Requirement |
+|----------|-------------|
+| [**Import data (new)** wizard](search-import-data-portal.md) | <ol><li>Find a [region that supports multimodal embeddings](/azure/ai-services/computer-vision/overview-image-analysis?tabs=4-0#region-availability) in Azure Vision.</li><li>Verify the [region supports AI enrichment](search-region-support.md) in Azure AI Search.</li><li>Create an Azure AI Search service and [Azure AI multi-service account](https://portal.azure.com/#create/Microsoft.CognitiveServicesAllInOne) in the same region. </li></ol> |
+| Programmatic, using a [key-based connection](cognitive-search-attach-cognitive-services.md#bill-through-a-keyless-connection) for billing | <ol><li>Find a [region that supports multimodal embeddings](/azure/ai-services/computer-vision/overview-image-analysis?tabs=4-0#region-availability) in Azure Vision.</li><li>Verify the [region supports AI enrichment](search-region-support.md) in Azure AI Search.</li><li>Create an Azure AI Search service and Microsoft Foundry resource in the same region. </li></ol> |
+| Programmatic, using a [keyless connection](cognitive-search-attach-cognitive-services.md#bill-through-a-keyless-connection) for billing | No same-region requirement. Create an Azure AI Search service and Microsoft Foundry resource in any region where [each service is available](https://azure.microsoft.com/explore/global-infrastructure/products-by-region/table). |
## @odata.type
Summary
{
"modification_type": "minor update",
"modification_title": "Azure Visionマルチモーダル埋め込みスキルの更新"
}
Explanation
この変更は、articles/search/cognitive-search-skill-vision-vectorize.mdファイルに対するマイナーな更新で、Azure Visionマルチモーダル埋め込みスキルに関する情報が改善されています。主な変更点は、タイトルの大文字化、日付の更新、説明文の修正、およびリソース関連の詳細情報の追加です。
特に、「Azure Vision multimodal embeddings skill」というタイトルが「Azure Vision Multimodal Embeddings Skill」に修正され、より正式な表現となっています。また、ファイル内の文章がいくつか改善され、情報がより明確になっています。たとえば、リソースの位置についての説明が強調され、処理される内容と請求に関連する情報が明確に分けられています。
さらに、サポートされる地域や接続方法に関するセクションが新たに追加され、ユーザーがスキルを利用する際の地域の要件や、キーを用いた接続とキーなし接続の違いについて詳しく説明しています。
合計で19行の変更が行われており、これにより文書全体の明瞭さと使いやすさが向上しています。今回の更新は、Azure Visionマルチモーダル埋め込みスキルを利用するユーザーにとって価値のある改善です。
articles/search/get-started-portal-agentic-retrieval.md
Diff
@@ -1,5 +1,5 @@
---
-title: "Quickstart: Use Agentic Retrieval in the Azure portal"
+title: "Quickstart: Agentic Retrieval in the Azure portal"
titleSuffix: Azure AI Search
description: Learn how to use agentic retrieval in the Azure portal for a conversational search experience powered by Azure AI Search and Azure OpenAI models.
manager: nitinme
@@ -12,7 +12,7 @@ ms.topic: quickstart
ms.date: 12/18/2025
---
-# Quickstart: Use agentic retrieval in the Azure portal
+# Quickstart: Agentic retrieval in the Azure portal
[!INCLUDE [Feature preview](./includes/previews/preview-generic.md)]
Summary
{
"modification_type": "minor update",
"modification_title": "エージェントリトリーバルのクイックスタートタイトル変更"
}
Explanation
この変更は、articles/search/get-started-portal-agentic-retrieval.mdファイルに対するマイナーな更新で、エージェントリトリーバルに関連するクイックスタートガイドのタイトルが修正されています。具体的には、タイトルが「Quickstart: Use Agentic Retrieval in the Azure portal」から「Quickstart: Agentic Retrieval in the Azure portal」に変更されました。この修正により、タイトルがより簡潔で、主題への焦点が合わせられています。
さらに、この変更は文書全体の整合性を向上させるもので、ユーザーがコンテンツへアクセスしやすくなることが期待されます。合計で4行の変更があり、2行が追加され、2行が削除されています。これにより、エージェントリトリーバルに関する具体的な情報への理解が進むことでしょう。
articles/search/hybrid-search-how-to-query.md
Diff
@@ -1,14 +1,16 @@
---
-title: Hybrid query
+title: Create a hybrid query
titleSuffix: Azure AI Search
description: Learn how to build queries for hybrid search.
author: HeidiSteen
ms.author: heidist
ms.service: azure-ai-search
ms.custom:
- ignite-2023
+ - dev-focus
+ai-usage: ai-assisted
ms.topic: how-to
-ms.date: 08/28/2025
+ms.date: 01/20/2026
---
# Create a hybrid query in Azure AI Search
@@ -22,10 +24,26 @@ In this article, learn how to:
+ Improve relevance using semantic ranking or vector weights
+ Optimize query behaviors by controlling inputs (`maxTextRecallSize`)
+By the end of this article, you can execute hybrid queries that combine keyword and vector search with optional semantic ranking.
+
+> [!TIP]
+> For immediate code examples, skip to [Set up a hybrid query](#set-up-a-hybrid-query).
+
## Prerequisites
++ An Azure subscription. [Create one for free](https://azure.microsoft.com/free/).
+
++ An Azure AI Search service. [Create a service](search-create-service-portal.md) or [find an existing service](https://portal.azure.com/#blade/HubsExtension/BrowseResourceBlade/resourceType/Microsoft.Search%2FsearchServices).
+
+ A search index containing `searchable` vector and nonvector fields. We recommend the [**Import data (new)** wizard](search-import-data-portal.md) to create an index quickly. Otherwise, see [Create an index](search-how-to-create-search-index.md) and [Add vector fields to a search index](vector-search-how-to-create-index.md).
++ **Permissions**: You need **Search Index Data Reader** to query an index. To create or update an index, you need **Search Index Data Contributor**. For more information, see [Connect using roles](search-security-rbac.md).
+
++ **SDK installation (optional)**:
+
+ + Python: `pip install azure-search-documents`
+ + C#: `dotnet add package Azure.Search.Documents`
+
+ (Optional) If you want the [semantic ranker](semantic-search-overview.md), your search service must have the [semantic ranker enabled](semantic-how-to-enable-disable.md).
+ (Optional) If you want built-in text-to-vector conversion of a query string, [create and assign a vectorizer](vector-search-how-to-configure-vectorizer.md) to vector fields in the search index.
@@ -149,10 +167,104 @@ api-key: {{admin-api-key}}
+ Keyword search is specified through `search` property. It executes in parallel with the vector query.
+**Reference**: [Search Documents (REST)](/rest/api/searchservice/documents/search-post) | [vectorQueries](/rest/api/searchservice/documents/search-post#vectorquery)
+
+ `k` determines how many nearest neighbor matches are returned from the vector query and provided to the RRF ranker.
+ `top` determines how many matches are returned in the response all-up. In this example, the response includes 10 results, assuming there are at least 10 matches in the merged results.
+### [**Python**](#tab/python)
+
+The following example shows a hybrid query using the Azure SDK for Python.
+
+```python
+import os
+from azure.identity import DefaultAzureCredential
+from azure.search.documents import SearchClient
+from azure.search.documents.models import VectorizedQuery
+
+# Set up the client
+endpoint = os.environ["AZURE_SEARCH_ENDPOINT"]
+index_name = "hotels-sample-index"
+credential = DefaultAzureCredential()
+
+client = SearchClient(endpoint=endpoint, index_name=index_name, credential=credential)
+
+# Define your vector (typically from an embedding model)
+query_vector = [-0.009154141, 0.018708462, ...] # Your embedding values
+
+# Create the vector query
+vector_query = VectorizedQuery(
+ vector=query_vector,
+ k_nearest_neighbors=10,
+ fields="DescriptionVector",
+ exhaustive=True
+)
+
+# Execute hybrid search
+results = client.search(
+ search_text="historic hotel walk to restaurants and shopping",
+ vector_queries=[vector_query],
+ select=["HotelName", "Description", "Address/City"],
+ top=10
+)
+
+for result in results:
+ print(f"{result['HotelName']}: {result['Description']}")
+```
+
+**Reference**: [SearchClient](/python/api/azure-search-documents/azure.search.documents.searchclient) | [VectorizedQuery](/python/api/azure-search-documents/azure.search.documents.models.vectorizedquery)
+
+### [**C#**](#tab/csharp)
+
+The following example shows a hybrid query using the Azure SDK for .NET.
+
+```csharp
+using Azure;
+using Azure.Identity;
+using Azure.Search.Documents;
+using Azure.Search.Documents.Models;
+
+// Set up the client
+string endpoint = Environment.GetEnvironmentVariable("AZURE_SEARCH_ENDPOINT");
+string indexName = "hotels-sample-index";
+
+SearchClient client = new SearchClient(
+ new Uri(endpoint),
+ indexName,
+ new DefaultAzureCredential());
+
+// Define your vector (typically from an embedding model)
+float[] queryVector = new float[] { -0.009154141f, 0.018708462f, /* ... */ };
+
+// Execute hybrid search
+SearchResults<SearchDocument> results = client.Search<SearchDocument>(
+ "historic hotel walk to restaurants and shopping",
+ new SearchOptions
+ {
+ VectorSearch = new()
+ {
+ Queries = {
+ new VectorizedQuery(queryVector)
+ {
+ KNearestNeighborsCount = 10,
+ Fields = { "DescriptionVector" },
+ Exhaustive = true
+ }
+ }
+ },
+ Select = { "HotelName", "Description", "Address/City" },
+ Size = 10
+ });
+
+await foreach (SearchResult<SearchDocument> result in results.GetResultsAsync())
+{
+ Console.WriteLine($"{result.Document["HotelName"]}: {result.Document["Description"]}");
+}
+```
+
+**Reference**: [SearchClient](/dotnet/api/azure.search.documents.searchclient) | [VectorizedQuery](/dotnet/api/azure.search.documents.models.vectorizedquery)
+
---
## Set maxTextRecallSize and countAndFacetMode
@@ -187,7 +299,7 @@ The following REST examples show two use-cases for setting `maxTextRecallSize`.
The first example reduces `maxTextRecallSize` to 100, limiting the text side of the hybrid query to just 100 document. It also sets `countAndFacetMode` to include only those results from `maxTextRecallSize`.
```http
-POST https://[service-name].search.windows.net/indexes/[index-name]/docs/search?api-version=2024-05-01-Preview
+POST https://[service-name].search.windows.net/indexes/[index-name]/docs/search?api-version=2025-11-01-preview
{
"vectorQueries": [
@@ -209,7 +321,7 @@ POST https://[service-name].search.windows.net/indexes/[index-name]/docs/search?
The second example raises `maxTextRecallSize` to 5,000. It also uses top, skip, and next to pull results from large result sets. In this case, the request pulls in BM25-ranked results starting at position 1,500 through 2,000 as the text query contribution to the RRF composite result set.
```http
-POST https://[service-name].search.windows.net/indexes/[index-name]/docs/search?api-version=2024-05-01-Preview
+POST https://[service-name].search.windows.net/indexes/[index-name]/docs/search?api-version=2025-11-01-preview
{
"vectorQueries": [
@@ -231,6 +343,8 @@ POST https://[service-name].search.windows.net/indexes/[index-name]/docs/search?
}
```
+**Reference**: [hybridSearch](/rest/api/searchservice/documents/search-post#hybridsearch) | [maxTextRecallSize](/rest/api/searchservice/documents/search-post#hybridsearch) | [countAndFacetMode](/rest/api/searchservice/documents/search-post#hybridsearch)
+
## Examples of hybrid queries
This section has multiple query examples that illustrate hybrid query patterns.
@@ -273,6 +387,8 @@ api-key: {{admin-api-key}}
+ When you postfilter query results, the number of results might be less than top-n.
+**Reference**: [filter](/rest/api/searchservice/documents/search-post#searchrequest) | [vectorFilterMode](/rest/api/searchservice/documents/search-post#vectorfiltermode)
+
### Example: Hybrid search with filters targeting vector subqueries (preview)
Using the [latest preview REST API](/rest/api/searchservice/documents/search-post?view=rest-searchservice-2025-11-01-preview&preserve-view=true), you can override a global filter on the search request by applying a secondary filter that targets just the vector subqueries in a hybrid request.
@@ -311,7 +427,7 @@ POST https://{{search-service-name}}.search.windows.net/indexes/{{index-name}}/d
],
"search": "historic hotel walk to restaurants and shopping",
"select": "HotelName, Description, Address/City, Rating",
- "filter": "Rating gt 3"
+ "filter": "Rating gt 3",
"debug": "vector",
"top": 10
}
@@ -360,6 +476,8 @@ api-key: {{admin-api-key}}
+ "captions" and "answers" are optional. Values are extracted from verbatim text in the results. An answer is only returned if the results include content having the characteristics of an answer to the query.
+**Reference**: [queryType](/rest/api/searchservice/documents/search-post#querytype) | [semanticConfiguration](/rest/api/searchservice/documents/search-post#searchrequest) | [captions](/rest/api/searchservice/documents/search-post#querycaption) | [answers](/rest/api/searchservice/documents/search-post#queryanswer)
+
### Example: Semantic hybrid search with filter
Here's the last query in the collection. It's the same semantic hybrid query as the previous example, but with a filter.
@@ -389,7 +507,7 @@ api-key: {{admin-api-key}}
"semanticConfiguration": "my-semantic-config",
"captions": "extractive",
"answers": "extractive",
- "filter": "ParkingIsIncluded'",
+ "filter": "ParkingIncluded",
"vectorFilterMode": "preFilter",
"top": "50"
}
@@ -482,6 +600,25 @@ In this section, compare the responses between single vector search and simple h
}
```
-## Next step
+## Troubleshoot hybrid queries
+
+Use the following table to diagnose common issues with hybrid queries.
+
+| Issue | Possible cause | Resolution |
+|-------|---------------|------------|
+| Empty results | Vector field name mismatch or missing index data | Verify `fields` in `vectorQueries` matches a vector field in your index schema. Check that documents contain vector data. |
+| Low RRF scores | Normal RRF behavior | RRF scores are inherently lower than similarity scores. A score of 0.03 can still indicate a strong match. |
+| Vector results dominate | Text query underperforming | Increase `maxTextRecallSize` to include more BM25 results, or adjust vector weighting. |
+| Text results dominate | Vector similarity too low | Check embedding quality. Ensure query vector uses the same model as document vectors. |
+| Semantic ranker returns fewer results | Insufficient input documents | Set `k` to at least 50 when using semantic ranking. Check that filters aren't too restrictive. |
+| Filter not applied to vectors | Using global filter only | For vector-specific filtering, use `filterOverride` in the vector query (preview). |
+| Unexpected field in results | `select` parameter missing | Add `select` to specify which fields to return. Exclude vector fields for readability. |
+
+## Related content
-We recommend reviewing vector demo code for [Python](https://github.com/Azure/azure-search-vector-samples/tree/main/demo-python), [C#](https://github.com/Azure/azure-search-vector-samples/tree/main/demo-dotnet) or [JavaScript](https://github.com/Azure/azure-search-vector-samples/tree/main/demo-javascript).
++ [Hybrid search overview](hybrid-search-overview.md)
++ [Hybrid search ranking with RRF](hybrid-search-ranking.md)
++ [Vector search how-to](vector-search-how-to-query.md)
++ [Semantic ranking](semantic-how-to-query-request.md)
++ [Vector search filters](vector-search-filters.md)
++ Review vector demo code for [Python](https://github.com/Azure/azure-search-vector-samples/tree/main/demo-python), [C#](https://github.com/Azure/azure-search-vector-samples/tree/main/demo-dotnet), or [JavaScript](https://github.com/Azure/azure-search-vector-samples/tree/main/demo-javascript)
Summary
{
"modification_type": "minor update",
"modification_title": "ハイブリッドクエリの作成方法に関する情報の更新"
}
Explanation
この変更は、articles/search/hybrid-search-how-to-query.mdファイルに対するマイナーな更新で、ハイブリッドクエリの作成に関する情報が大幅に改善されています。主な変更点として、タイトルが「Hybrid query」から「Create a hybrid query」に変更され、より具体的な内容が示されています。
145行が追加され、8行が削除されており、合計で153行の変更が行われています。新しく追加された内容には、記事の冒頭にハイブリッドクエリの実行方法やコード例を示すセクションが含まれており、PythonやC#を使用したハイブリッドクエリの具体的な実装例が提供されています。
また、必要な前提条件を明確に示すセクションが追加され、AzureサブスクリプションやAzure AI Searchサービスのセットアップ手順が明記されています。加えて、エラーメッセージのトラブルシューティングに関する情報も含まれ、一般的な問題とその解決策を表形式で示しています。
最終的に、関連コンテンツのリンクが追加され、ハイブリッド検索の詳細やベクトル検索に関するより多くの情報にアクセスできるようになっています。この更新により、ユーザーがハイブリッドクエリを効果的に利用するためのリソースが一層充実しています。
articles/search/includes/how-tos/agentic-retrieval-how-to-create-knowledge-base-csharp.md
Diff
@@ -39,7 +39,7 @@ After you create a knowledge base, you can update its properties at any time. If
### Supported models
-Use one of the following LLMs from Azure OpenAI or an equivalent open-source model. For deployment instructions, see [Deploy Azure OpenAI models with Microsoft Foundry](/azure/ai-foundry/how-to/deploy-models-openai).
+Use one of the following LLMs from Azure OpenAI in Foundry Models or an equivalent open-source model. For deployment instructions, see [Deploy Microsoft Foundry Models in the Foundry portal](/azure/ai-foundry/how-to/deploy-models-openai).
+ `gpt-4o`
+ `gpt-4o-mini`
Summary
{
"modification_type": "minor update",
"modification_title": "エージェントリトリーバルの知識ベース作成に関する文言の更新"
}
Explanation
この変更は、articles/search/includes/how-tos/agentic-retrieval-how-to-create-knowledge-base-csharp.mdファイルに対するマイナーな更新で、エージェントリトリーバルに関する知識ベースの作成に関連する文言が修正されています。具体的には、Azure OpenAIのモデルを使用する際の表現が次のように変更されました。
旧文では「Use one of the following LLMs from Azure OpenAI or an equivalent open-source model」と記載されていた部分が、新しい文では「Use one of the following LLMs from Azure OpenAI in Foundry Models or an equivalent open-source model」となっています。これにより、Azure OpenAIモデルがFoundry Modelsに関連付けられ、より具体的な情報が提供されています。
この変更に伴い、デプロイ手順についてのリンクも更新され、「[Deploy Azure OpenAI models with Microsoft Foundry]」から「[Deploy Microsoft Foundry Models in the Foundry portal]」に修正されています。合計で1行が追加され、1行が削除され、2行の変更が行われています。このマイナーアップデートにより、読者が情報をより正確に理解できるようになっています。
articles/search/includes/how-tos/agentic-retrieval-how-to-create-knowledge-base-python.md
Diff
@@ -39,7 +39,7 @@ After you create a knowledge base, you can update its properties at any time. If
### Supported models
-Use one of the following LLMs from Azure OpenAI or an equivalent open-source model. For deployment instructions, see [Deploy Azure OpenAI models with Microsoft Foundry](/azure/ai-foundry/how-to/deploy-models-openai).
+Use one of the following LLMs from Azure OpenAI in Foundry Models or an equivalent open-source model. For deployment instructions, see [Deploy Microsoft Foundry Models in the Foundry portal](/azure/ai-foundry/how-to/deploy-models-openai).
+ `gpt-4o`
+ `gpt-4o-mini`
Summary
{
"modification_type": "minor update",
"modification_title": "エージェントリトリーバルのPython用知識ベース作成に関する文言の更新"
}
Explanation
この変更は、articles/search/includes/how-tos/agentic-retrieval-how-to-create-knowledge-base-python.mdファイルに対するマイナーな更新で、Pythonを使用したエージェントリトリーバルの知識ベース作成に関する表現が修正されています。具体的な変更点として、Azure OpenAIモデルに関する表現が更新されました。
旧文では「Use one of the following LLMs from Azure OpenAI or an equivalent open-source model」と記載されていましたが、新しい文では「Use one of the following LLMs from Azure OpenAI in Foundry Models or an equivalent open-source model」となっています。この修正により、Azure OpenAIモデルがFoundry Modelsに関連付けられ、より分かりやすく具体的な情報が提供されています。
また、デプロイ手順のリンクも変更され、「[Deploy Azure OpenAI models with Microsoft Foundry]」から「[Deploy Microsoft Foundry Models in the Foundry portal]」に修正されました。合計で1行が追加され、1行が削除され、2行の変更が行われており、読者が正確な情報に基づいて活動できるように改善されています。
articles/search/includes/how-tos/agentic-retrieval-how-to-create-knowledge-base-rest.md
Diff
@@ -39,7 +39,7 @@ After you create a knowledge base, you can update its properties at any time. If
### Supported models
-Use one of the following LLMs from Azure OpenAI or an equivalent open-source model. For deployment instructions, see [Deploy Azure OpenAI models with Microsoft Foundry](/azure/ai-foundry/how-to/deploy-models-openai).
+Use one of the following LLMs from Azure OpenAI in Foundry Models or an equivalent open-source model. For deployment instructions, see [Deploy Microsoft Foundry Models in the Foundry portal](/azure/ai-foundry/how-to/deploy-models-openai).
+ `gpt-4o`
+ `gpt-4o-mini`
Summary
{
"modification_type": "minor update",
"modification_title": "エージェントリトリーバルのREST用知識ベース作成に関する文言の更新"
}
Explanation
この変更は、articles/search/includes/how-tos/agentic-retrieval-how-to-create-knowledge-base-rest.mdファイルに対するマイナーな更新です。具体的には、RESTを使用してエージェントリトリーバルの知識ベースを作成する際の文言が修正されています。
変更ポイントは、Azure OpenAIのモデルに関する表現です。旧文では「Use one of the following LLMs from Azure OpenAI or an equivalent open-source model」と記載されていましたが、新しい文では「Use one of the following LLMs from Azure OpenAI in Foundry Models or an equivalent open-source model」と変更されています。この修正により、Azure OpenAIモデルがFoundry Modelsに関連付けられ、より具体的な情報が提供されています。
加えて、デプロイ手順に関するリンクも更新され、「[Deploy Azure OpenAI models with Microsoft Foundry]」から「[Deploy Microsoft Foundry Models in the Foundry portal]」に変更されました。この変更により、合計で1行が追加され、1行が削除され、2行の変更が行われており、資料の正確性が向上しています。読者が最新の情報に基づいて操作を行えるように改善されています。
articles/search/includes/quickstarts/agentic-retrieval-setup.md
Diff
@@ -23,7 +23,7 @@ On your Azure AI Search service:
1. [Create a system-assigned managed identity](../../search-how-to-managed-identities.md#create-a-system-managed-identity).
-1. [Assign the following roles](../../search-security-rbac.md#how-to-assign-roles-in-the-azure-portal) to yourself.
+1. [Assign the following roles](../../search-security-rbac.md) to yourself.
+ **Search Service Contributor**
@@ -83,4 +83,4 @@ For this quickstart, you must deploy two Azure OpenAI models to your Microsoft F
+ An LLM for query planning and answer generation. This quickstart uses `gpt-5-mini`, but you can use any [supported LLM for agentic retrieval](../../agentic-retrieval-how-to-create-knowledge-base.md#supported-models).
-For deployment instructions, see [Deploy Azure OpenAI models with Microsoft Foundry](/azure/ai-foundry/how-to/deploy-models-openai).
+For deployment instructions, see [Deploy Microsoft Foundry Models in the Foundry portal](/azure/ai-foundry/how-to/deploy-models-openai).
Summary
{
"modification_type": "minor update",
"modification_title": "エージェントリトリーバルのセットアップに関する文言の更新"
}
Explanation
この変更は、articles/search/includes/quickstarts/agentic-retrieval-setup.mdファイルに対するマイナーな更新です。エージェントリトリーバルのセットアップに関連する手順が修正されています。
具体的には、Azure AI Searchサービスの手順において、ロールの割り当てに関するリンクが変更されました。旧文では「Assign the following roles to yourself」とありましたが、新しい文では「Assign the following roles to yourself」と修正されています。この変更により、より簡潔なリンクが提供されており、情報のアクセスがしやすくなっています。
また、クイックスタートに関する説明の最後に、「An LLM for query planning and answer generation」の項目が追加され、使用するモデルとしてgpt-5-miniが明記されています。この修正により、利用可能なモデルについての明確な情報が提供されており、読者が適切な選択をする手助けとなります。
最後に、デプロイに関するリンクも更新され、旧文の「[Deploy Azure OpenAI models with Microsoft Foundry]」から新文の「[Deploy Microsoft Foundry Models in the Foundry portal]」に変更されています。このようにして、合計で2行が追加され、2行が削除され、4行の変更が行われており、情報の正確性と利用者の利便性が向上しています。
articles/search/includes/quickstarts/search-get-started-portal-new-wizard.md
Diff
@@ -4,24 +4,26 @@ author: haileytap
ms.author: haileytapia
ms.service: azure-ai-search
ms.topic: include
-ms.date: 09/16/2025
+ms.date: 01/15/2026
---
> [!IMPORTANT]
> The **Import data (new)** wizard now supports keyword search, which was previously only available in the **Import data** wizard. We recommend the new wizard for an improved search experience. For more information about how we're consolidating the wizards, see [Import data wizards in the Azure portal](../../search-import-data-portal.md).
-In this quickstart, you use the **Import data (new)** wizard and sample data about fictitious hotels to create your first search index. The wizard requires no code to create an index, helping you write interesting queries within minutes.
+In this quickstart, you use the **Import data (new)** wizard and sample data about fictitious hotels to get started with [full-text search](../../search-lucene-query-architecture.md), also known as keyword search. The wizard requires no code to create an index, helping you write interesting queries within minutes.
-The wizard creates multiple objects on your search service, including a searchable [index](../../search-what-is-an-index.md), an [indexer](../../search-indexer-overview.md), and a data source connection for automated data retrieval. At the end of this quickstart, you review each object.
+The wizard creates multiple objects on your search service, including a searchable index, an indexer, and a data source connection for automated data retrieval. At the end of this quickstart, you review each object.
## Prerequisites
+ An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/pricing/purchase-options/azure-account?cid=msft_learn).
-+ An Azure AI Search service. [Create a service](../../search-create-service-portal.md) or [find an existing service](https://portal.azure.com/#blade/HubsExtension/BrowseResourceBlade/resourceType/Microsoft.Search%2FsearchServices) in your current subscription. You can use a free service for this quickstart.
++ An [Azure AI Search service](../../search-create-service-portal.md). You can use the Free tier for this quickstart.
+ An [Azure Storage account](/azure/storage/common/storage-account-create). Use Azure Blob Storage or Azure Data Lake Storage Gen2 (storage account with a hierarchical namespace) on a standard performance (general-purpose v2) account. To avoid bandwidth charges, use the same region as Azure AI Search.
++ Familiarity with the wizard. See [Import data wizards in the Azure portal](../../search-import-data-portal.md).
+
### Check for network access
For this quickstart, all of the preceding resources must have public access enabled so that the Azure portal nodes can access them. Otherwise, the wizard fails. After the wizard runs, you can enable firewalls and private endpoints on the integration components for security. For more information, see [Secure connections in the import wizards](../../search-import-data-portal.md#secure-connections).
@@ -50,7 +52,11 @@ To prepare the sample data for this quickstart:
1. Upload the `HotelsData_toAzureBlobs.json` file to the container.
-## Start the wizard
+## Run the wizard
+
+The wizard walks you through several configuration steps. This section covers each step in sequence.
+
+### Start the wizard
To start the wizard for this quickstart:
@@ -68,10 +74,6 @@ To start the wizard for this quickstart:
:::image type="content" source="../../media/search-get-started-portal/keyword-search-tile.png" alt-text="Screenshot of the keyword search tile in the Azure portal." border="true" lightbox="../../media/search-get-started-portal/keyword-search-tile.png":::
-## Create and load a search index
-
-In this section, you create and load an index in five steps.
-
### Connect to a data source
Azure AI Search requires a connection to a data source for content ingestion and indexing. In this case, the data source is your Azure Storage account.
@@ -88,7 +90,7 @@ To connect to the sample data:
1. Select **Next**.
-### Skip configuration for skills
+### Skip AI enrichment
The wizard supports skillset creation and [AI enrichment](../../cognitive-search-concept-intro.md) during indexing, which are beyond the scope of this quickstart. Skip this step by selecting **Next**.
@@ -140,11 +142,11 @@ If you want autocomplete or suggested queries, specify **Suggesters**.
The wizard offers advanced settings for semantic ranking and index scheduling, which are beyond the scope of this quickstart. Skip this step by selecting **Next**.
-### Review and create the objects
+### Finish the wizard
The last step is to review your configuration and create the index, indexer, and data source on your search service. The indexer automates the process of extracting content from your data source and loading it into the index, enabling keyword search.
-To review and create the objects:
+To finish the wizard:
1. Change the object name prefix to **hotels-sample**.
Summary
{
"modification_type": "minor update",
"modification_title": "クイックスタートウィザードの更新"
}
Explanation
この変更は、articles/search/includes/quickstarts/search-get-started-portal-new-wizard.mdファイルに対するマイナーな更新です。クイックスタートウィザードに関する説明が改善され、ユーザーにとっての使い勝手が向上しています。
更新された内容の一部として、新しいウィザードがキーワード検索をサポートすると明記され、以前の「Import data」ウィザードに比べて向上した検索体験がおすすめとして紹介されています。また、導入されるサンプルデータに関する説明も明確化され、「full-text search」や「keyword search」という用語が追加されています。
さらに、前提条件に関するセクションに新たに「Azureストレージアカウント」と「ウィザードへの慣れ」が加わりました。新しい情報により、読者が必要なリソースを理解しやすくなっています。
ウィザードの開始手順や実行手順に関するセクションも改善され、特に手順の明確さが向上しています。例えば、「Create and load a search index」という章が削除され、新しい「Run the wizard」によって段階的に操作を説明しています。このようにして改訂されたコンテンツには、合計で14行の追加と12行の削除があり、全体で26行の変更が加えられています。全体として、ユーザーがウィザードを利用しやすいように情報が整理され、改善されました。
articles/search/includes/quickstarts/search-get-started-rbac-python.md
Diff
@@ -50,7 +50,7 @@ To sign in:
## Connect to Azure AI Search
> [!NOTE]
-> This section illustrates the basic Python pattern for keyless connections. For comprehensive guidance, see a specific quickstart or tutorial, such as [Quickstart: Use agentic retrieval in Azure AI Search](../../search-get-started-agentic-retrieval.md).
+> This section illustrates the basic Python pattern for keyless connections. For comprehensive guidance, see a specific quickstart or tutorial, such as [Quickstart: Agentic retrieval](../../search-get-started-agentic-retrieval.md).
You can use Python notebooks in Visual Studio Code to send requests to your Azure AI Search service. For request authentication, use the `DefaultAzureCredential` class from the Azure Identity library.
Summary
{
"modification_type": "minor update",
"modification_title": "エージェントリトリーバルに関するクイックスタートのリンク修正"
}
Explanation
この変更は、articles/search/includes/quickstarts/search-get-started-rbac-python.mdファイルに対するマイナーな更新です。主にリンクに関する修正が行われており、情報の一貫性が向上しています。
具体的には、Pythonを使用してキーなし接続を行う基本的なパターンを説明しているセクションのノートが修正されました。元の文では「[Quickstart: Use agentic retrieval in Azure AI Search]」というリンクがありましたが、新しい文ではこのリンクが「[Quickstart: Agentic retrieval]」に変更されています。この変更により、リンク名が簡潔になり、エージェントリトリーバルに関連するリソースへのアクセスがより分かりやすくなっています。
全体として、1行の追加と1行の削除があり、合計で2行の変更が加えられており、情報の明瞭さと正確性が向上しています。
articles/search/includes/quickstarts/search-get-started-rbac-rest.md
Diff
@@ -64,7 +64,7 @@ To get your token:
## Connect to Azure AI Search
> [!NOTE]
-> This section illustrates the basic REST pattern for keyless connections. For comprehensive guidance, see a specific quickstart or tutorial, such as [Quickstart: Use agentic retrieval in Azure AI Search](../../search-get-started-agentic-retrieval.md).
+> This section illustrates the basic REST pattern for keyless connections. For comprehensive guidance, see a specific quickstart or tutorial, such as [Quickstart: Agentic retrieval](../../search-get-started-agentic-retrieval.md).
You can use the REST Client extension in Visual Studio Code to send requests to your Azure AI Search service. For request authentication, include an `Authorization` header with the Microsoft Entra ID token you previously generated.
Summary
{
"modification_type": "minor update",
"modification_title": "エージェントリトリーバルに関するクイックスタートのリンク修正"
}
Explanation
この変更は、articles/search/includes/quickstarts/search-get-started-rbac-rest.mdファイルに対するマイナーな更新です。主にリンクの修正が行われており、情報の明確さが向上しています。
具体的には、RESTを使用したキーなし接続の基本的なパターンについて説明しているノート文が修正されました。元の文では「[Quickstart: Use agentic retrieval in Azure AI Search]」というリンクが記載されていましたが、新しい文では「[Quickstart: Agentic retrieval]」に変更されています。この修正により、リソースへのリンクが簡潔であり、ユーザーにとってより使いやすくなっています。
全体として、1行の追加と1行の削除があり、合計で2行の変更が加えられています。この変更は、情報の正確性と一貫性を高めるものとなっています。
articles/search/index-add-scoring-profiles.md
Diff
@@ -3,13 +3,15 @@ title: Add scoring profiles
titleSuffix: Azure AI Search
description: Boost search relevance scores for Azure AI Search results by adding scoring profiles to a search index.
manager: nitinme
-author: shmed
-ms.author: ramero
+author: HeidiSteen
+ms.author: heidist
ms.service: azure-ai-search
ms.custom:
- ignite-2023
+ - dev-focus
+ai-usage: ai-assisted
ms.topic: how-to
-ms.date: 11/23/2025
+ms.date: 01/20/2026
ms.update-cycle: 365-days
---
@@ -27,10 +29,26 @@ Scoring profiles are used to boost or suppress the ranking of matching documents
You can add a scoring profile to an index by editing its JSON definition in the Azure portal or programmatically through APIs like [Create or Update Index REST](/rest/api/searchservice/indexes/create-or-update) or equivalent index update APIs in any Azure SDK. There's no index rebuild requirements so you can add, modify, or delete a scoring profile with no effect on indexed documents.
+By the end of this article, you can create and apply scoring profiles to boost search relevance based on field weights, freshness, distance, or custom criteria.
+
## Prerequisites
++ An Azure subscription. [Create one for free](https://azure.microsoft.com/free/).
+
++ An Azure AI Search service. [Create a service](search-create-service-portal.md) or [find an existing service](https://portal.azure.com/#blade/HubsExtension/BrowseResourceBlade/resourceType/Microsoft.Search%2FsearchServices).
+
+ A search index with text or numeric (nonvector) fields.
++ **Permissions**: You need **Search Index Data Contributor** to create or update an index with scoring profiles. To query using a scoring profile, you need **Search Index Data Reader**. For more information, see [Connect using roles](search-security-rbac.md).
+
++ **SDK installation (optional)**:
+
+ + Python: `pip install azure-search-documents`
+ + C#: `dotnet add package Azure.Search.Documents`
+
+> [!TIP]
+> For immediate code examples, skip to [Scoring profile definition](#scoring-profile-definition).
+
## Rules for scoring profiles
You can use scoring profiles in [keyword search](search-lucene-query-architecture.md), [vector search](vector-search-overview.md), [hybrid search](hybrid-search-overview.md), and with [semantic reranking)](semantic-search-overview.md). However, scoring profiles only apply to nonvector fields, so make sure your index has text or numeric fields that can be boosted or weighted.
@@ -76,6 +94,8 @@ The following definition shows a simple profile named "geo". This example boosts
]
```
+**Reference**: [scoringProfiles](/rest/api/searchservice/indexes/create#scoringprofile) | [scoringFunction](/rest/api/searchservice/indexes/create#scoringfunction) | [distance function](/rest/api/searchservice/indexes/create#distancescoringfunction)
+
To use this scoring profile, your query is formulated to specify `scoringProfile` parameter in the request. If you're using the REST API, queries are specified through GET and POST requests. In the following example, "currentLocation" has a delimiter of a single dash (`-`). It's followed by longitude and latitude coordinates, where longitude is a negative value.
```http
@@ -87,10 +107,79 @@ POST /indexes/hotels/docs&api-version=2025-09-01
}
```
+**Reference**: [Search Documents (REST)](/rest/api/searchservice/documents/search-post) | [scoringProfile parameter](/rest/api/searchservice/documents/search-post#searchrequest) | [scoringParameters](/rest/api/searchservice/documents/search-post#searchrequest)
+
Query parameters, including `scoringParameters`, are described in [Search Documents (REST API)](/rest/api/searchservice/documents/search-post).
For more scenarios, see the examples for [freshness and distance](#example-boosting-by-freshness-or-distance) and [weighted text and functions](#example-boosting-by-weighted-text-and-functions) in this article.
+### Query with a scoring profile using the SDKs
+
+#### [Python](#tab/python)
+
+```python
+import os
+from azure.identity import DefaultAzureCredential
+from azure.search.documents import SearchClient
+
+# Set up the client
+endpoint = os.environ["AZURE_SEARCH_ENDPOINT"]
+index_name = "hotels"
+credential = DefaultAzureCredential()
+
+client = SearchClient(endpoint=endpoint, index_name=index_name, credential=credential)
+
+# Execute search with scoring profile
+results = client.search(
+ search_text="inn",
+ scoring_profile="geo",
+ scoring_parameters=["currentLocation--122.123,44.77233"],
+ select=["HotelName", "Description", "Rating"]
+)
+
+for result in results:
+ print(f"{result['HotelName']} (Score: {result['@search.score']})")
+```
+
+**Reference**: [SearchClient.search](/python/api/azure-search-documents/azure.search.documents.searchclient#azure-search-documents-searchclient-search) | [scoring_profile parameter](/python/api/azure-search-documents/azure.search.documents.searchclient)
+
+#### [C#](#tab/csharp)
+
+```csharp
+using Azure;
+using Azure.Identity;
+using Azure.Search.Documents;
+using Azure.Search.Documents.Models;
+
+// Set up the client
+string endpoint = Environment.GetEnvironmentVariable("AZURE_SEARCH_ENDPOINT");
+string indexName = "hotels";
+
+SearchClient client = new SearchClient(
+ new Uri(endpoint),
+ indexName,
+ new DefaultAzureCredential());
+
+// Execute search with scoring profile
+SearchResults<SearchDocument> results = client.Search<SearchDocument>(
+ "inn",
+ new SearchOptions
+ {
+ ScoringProfile = "geo",
+ ScoringParameters = { "currentLocation--122.123,44.77233" },
+ Select = { "HotelName", "Description", "Rating" }
+ });
+
+await foreach (SearchResult<SearchDocument> result in results.GetResultsAsync())
+{
+ Console.WriteLine($"{result.Document["HotelName"]} (Score: {result.Score})");
+}
+```
+
+**Reference**: [SearchClient.Search](/dotnet/api/azure.search.documents.searchclient.search) | [SearchOptions.ScoringProfile](/dotnet/api/azure.search.documents.searchoptions.scoringprofile)
+
+---
+
## Add a scoring profile to a search index
1. Start with an [index definition](/rest/api/searchservice/indexes/create). You can add and update scoring profiles on an existing index without having to rebuild it. Use [Get Index](/rest/api/searchservice/indexes/get) to pull down an existing index, and use [Create or Update Index](/rest/api/searchservice/indexes/create-or-update) request to post a revision.
@@ -294,6 +383,8 @@ In the next example, a linear interpolation provides a steady preference for mos
}
```
+**Reference**: [freshness function](/rest/api/searchservice/indexes/create#freshnessscoringfunction) | [boostingDuration](/rest/api/searchservice/indexes/create#freshnessscoringparameters)
+
## Example: boosting by weighted text and functions
> [!TIP]
@@ -590,4 +681,27 @@ The top response for this query is "Gastronomic Landscape Hotel" with a search s
+ linear when you want a steady gradient.
+ logarithmic when you want a gentle preference.
-+ Aggregation: If combining multiple functions, sum is easiest; switch to max when you want a single signal to dominate
\ No newline at end of file
++ Aggregation: If combining multiple functions, sum is easiest; switch to max when you want a single signal to dominate
+
+## Troubleshoot scoring profiles
+
+Use the following table to diagnose common issues with scoring profiles.
+
+| Issue | Possible cause | Resolution |
+| ------- | --------------- | ------------ |
+| Scoring profile not applied | Profile name not specified in query | Add `scoringProfile` parameter to your search request with the exact profile name. |
+| No boost effect observed | Field isn't marked as `filterable` | Functions can only be applied to fields attributed as `filterable`. Update your index schema. |
+| Unexpected ranking results | Boost value too low or high | Start with boost values in the 1.25–2.0 range and adjust based on testing. |
+| Freshness not boosting recent docs | `boostingDuration` too short or wrong format | Verify the duration format (e.g., "P30D" for 30 days) and extend the window if needed. |
+| Distance function not working | Field isn't `Edm.GeographyPoint` | The distance function only works with `Edm.GeographyPoint` fields. |
+| Tag function returns no boost | Tags don't match query values | Verify the `tagsParameter` matches values in the search request's `scoringParameters`. |
+| Profile exists but query fails | Invalid field name in profile | Ensure all field names in the scoring profile exist in the index schema. |
+
+## Related content
+
++ [Relevance and scoring in Azure AI Search](index-similarity-and-scoring.md)
++ [Scoring profile REST API reference](/rest/api/searchservice/indexes/create#scoringprofile)
++ [Search Documents REST API](/rest/api/searchservice/documents/search-post)
++ [Semantic ranking](semantic-how-to-query-request.md)
++ [ScoringProfile class (.NET)](/dotnet/api/azure.search.documents.indexes.models.scoringprofile)
++ [ScoringProfile class (Python)](/python/api/azure-search-documents/azure.search.documents.indexes.models.scoringprofile)
\ No newline at end of file
Summary
{
"modification_type": "minor update",
"modification_title": "スコアリングプロファイルに関するドキュメントの更新"
}
Explanation
この変更は、articles/search/index-add-scoring-profiles.mdファイルに対する更新で、主にスコアリングプロファイルに関する情報が追加され、詳細が強化されています。118行の追加と4行の削除が行われ、合計で122行の変更がありました。
具体的には、スコアリングプロファイルを利用して検索結果の関連性を向上させる方法についての具体的な手順や例が新たに記載されています。特に、スコアリングプロファイルの作成と適用に関する情報が増え、キーフィールドの重み付けや新鮮さ、距離などのカスタム基準に基づいて検索の関連性を向上させる方法が紹介されています。
また、必要な前提条件や権限についてのセクションも追加され、AzureサブスクリプションやAzure AI Searchサービスの作成、スコアリングプロファイルを使用するためのアクセス権についての情報が明確に示されています。さらに、具体的なSDKを使用した検索のコード例も追加され、実際の使用に向けた具体的なガイダンスが提供されています。
最後に、スコアリングプロファイルのトラブルシューティングや関連コンテンツへのリンクが追加され、ユーザーが直面する可能性のある問題への解決策も組み込まれています。全体として、この更新によりスコアリングプロファイルに関するドキュメントの有用性が大幅に向上しています。
articles/search/search-api-preview.md
Diff
@@ -25,7 +25,7 @@ Preview features are removed from this list if they're retired or transition to
| Feature | Description | Availability |
|--|--|--|
-| [**Agentic retrieval**](agentic-retrieval-overview.md) | Create a conversational search experience powered by large language models (LLMs). Agentic retrieval breaks down complex user queries into subqueries, runs the subqueries simultaneously, reranks the results for relevance, and either extracts grounding data or synthesizes answers into natural language.<p>The pipeline involves one or more [knowledge sources](agentic-knowledge-source-overview.md#supported-knowledge-sources) within a [knowledge base](agentic-retrieval-how-to-create-knowledge-base.md), whose [response payload](agentic-retrieval-how-to-retrieve.md) provides full transparency into the query plan and reference data.<p>To get started, see [Quickstart: Use agentic retrieval in Azure AI Search](search-get-started-agentic-retrieval.md) (programmatic) or [Quickstart: Use agentic retrieval in the Azure portal](get-started-portal-agentic-retrieval.md). | [Knowledge Sources (preview)](/rest/api/searchservice/knowledge-sources?view=rest-searchservice-2025-11-01-preview&preserve-view=true), [Knowledge bases (preview)](/rest/api/searchservice/knowledge-bases?view=rest-searchservice-2025-11-01-preview&preserve-view=true), [Knowledge Retrieval (preview)](/rest/api/searchservice/knowledge-retrieval?view=rest-searchservice-2025-11-01-preview&preserve-view=true), and the Azure portal |
+| [**Agentic retrieval**](agentic-retrieval-overview.md) | Create a conversational search experience powered by large language models (LLMs). Agentic retrieval breaks down complex user queries into subqueries, runs the subqueries simultaneously, reranks the results for relevance, and either extracts grounding data or synthesizes answers into natural language.<p>The pipeline involves one or more [knowledge sources](agentic-knowledge-source-overview.md#supported-knowledge-sources) within a [knowledge base](agentic-retrieval-how-to-create-knowledge-base.md), whose [response payload](agentic-retrieval-how-to-retrieve.md) provides full transparency into the query plan and reference data.<p>To get started, see [Quickstart: Agentic retrieval](search-get-started-agentic-retrieval.md) (programmatic) or [Quickstart: Agentic retrieval in the Azure portal](get-started-portal-agentic-retrieval.md). | [Knowledge Sources (preview)](/rest/api/searchservice/knowledge-sources?view=rest-searchservice-2025-11-01-preview&preserve-view=true), [Knowledge bases (preview)](/rest/api/searchservice/knowledge-bases?view=rest-searchservice-2025-11-01-preview&preserve-view=true), [Knowledge Retrieval (preview)](/rest/api/searchservice/knowledge-retrieval?view=rest-searchservice-2025-11-01-preview&preserve-view=true), and the Azure portal |
| [**Purview index configuration**](search-indexer-sensitivity-labels.md) | Apply Microsoft Purview classifications and sensitivity labels to indexed content based on source metadata for enhanced data governance. | [Create or Update Index (preview)](/rest/api/searchservice/indexes/create-or-update?view=rest-searchservice-2025-11-01-preview&preserve-view=true) |
| [**Scoring function aggregation**](index-add-scoring-profiles.md#example-function-aggregation) | Combine and aggregate multiple scoring functions, enabling more sophisticated relevance customization and weighted signal combination. | [Create or Update Index (preview)](/rest/api/searchservice/indexes/create-or-update?view=rest-searchservice-2025-11-01-preview&preserve-view=true) |
| [**Facet aggregations**](search-faceted-navigation-examples.md#facet-aggregation-example) | Use sum, count, minimum, maximum, and other aggregate functions to provide enhanced analytics in faceted search experiences. | [Search Documents (preview)](/rest/api/searchservice/documents/search-post?view=rest-searchservice-2025-11-01-preview&preserve-view=true) |
Summary
{
"modification_type": "minor update",
"modification_title": "エージェントリトリーバルのクイックスタートリンク修正"
}
Explanation
この変更は、articles/search/search-api-preview.mdファイルに対するマイナーな更新であり、特にエージェントリトリーバルに関するクイックスタートのリンクが修正されました。具体的には、エージェントリトリーバルに関するセクションの中で、プログラムによる開始に関するリンクが「[Quickstart: Use agentic retrieval in Azure AI Search]」から「[Quickstart: Agentic retrieval]」に変更され、Azureポータルでのリンクも「[Quickstart: Use agentic retrieval in the Azure portal]」から「[Quickstart: Agentic retrieval in the Azure portal]」に修正されました。
この変更により、リンクがより明確になり、情報がわかりやすくなっています。全体として、追加と削除はそれぞれ1行ずつの変更であり、合計で2行の変更が行われています。この修正は、ユーザーがエージェントリトリーバルの機能を簡単にアクセスできるようにするためのものです。
articles/search/search-get-started-agentic-retrieval.md
Diff
@@ -13,7 +13,7 @@ zone_pivot_groups: search-get-started-agentic-retrieval
# Customer intent: I want to learn how to use agentic retrieval to create a knowledge base that processes multi-turn conversations. The knowledge base should retrieve relevant information from a knowledge source that points to an Azure AI Search index and use an Azure OpenAI LLM to synthesize answers.
---
-# Quickstart: Use agentic retrieval in Azure AI Search
+# Quickstart: Agentic retrieval
::: zone pivot="programming-language-csharp"
[!INCLUDE [C# quickstart](includes/quickstarts/agentic-retrieval-csharp.md)]
Summary
{
"modification_type": "minor update",
"modification_title": "エージェントリトリーバルのクイックスタートタイトル修正"
}
Explanation
この変更は、articles/search/search-get-started-agentic-retrieval.mdファイルに対する小規模な修正であり、エージェントリトリーバルに関連するクイックスタートのタイトルが変更されました。具体的には、タイトルが「Quickstart: Use agentic retrieval in Azure AI Search」から「Quickstart: Agentic retrieval」に簡略化されました。
この修正により、タイトルがより直接的で理解しやすくなっており、クイックスタートの内容をより明確に示しています。変更は1行の追加と1行の削除から成り立っており、合計2行の変更が行われています。全体として、この更新は、ユーザーがエージェントリトリーバルに関連する資料にアクセスしやすくするためのものです。
articles/search/search-get-started-arm.md
Diff
@@ -66,6 +66,6 @@ Other Azure AI Search quickstarts and tutorials build upon this quickstart. If y
In this quickstart, you created an Azure AI Search service using an ARM template and then validated the deployment. To learn more about Azure AI Search and Azure Resource Manager, see the following articles:
- [What is Azure AI Search?](search-what-is-azure-search.md)
-- [Quickstart: Create a search index in the Azure portal](search-get-started-portal.md)
+- [Quickstart: Full-text search in the Azure portal](search-get-started-portal.md)
- [Quickstart: Create a demo search app in the Azure portal](search-create-app-portal.md)
- [Quickstart: Create a skillset in the Azure portal](search-get-started-skillset.md)
Summary
{
"modification_type": "minor update",
"modification_title": "Azureポータルにおけるクイックスタートリンクの修正"
}
Explanation
この変更は、articles/search/search-get-started-arm.mdファイルに対するマイナーな更新であり、Azureポータル内のクイックスタートのリンクが修正されました。具体的には、リンクのタイトルが「Quickstart: Create a search index in the Azure portal」から「Quickstart: Full-text search in the Azure portal」に変更されました。
この変更により、リンクがより正確な内容を反映し、ユーザーに対してより明確な情報提供を行うことが可能になります。変更は1行の追加と1行の削除から成り立っており、合計2行の変更が行われています。この修正は、Azure AI Searchに関連するクイックスタートのナビゲーションを向上させるためのものです。
articles/search/search-get-started-bicep.md
Diff
@@ -107,6 +107,6 @@ Remove-AzResourceGroup -Name exampleRG
In this quickstart, you created an Azure AI Search service using a Bicep file and then validated the deployment. To learn more about Azure AI Search and Azure Resource Manager, see the following articles:
- [What is Azure AI Search?](search-what-is-azure-search.md)
-- [Quickstart: Create a search index in the Azure portal](search-get-started-portal.md)
+- [Quickstart: Full-text search in the Azure portal](search-get-started-portal.md)
- [Quickstart: Create a demo search app in the Azure portal](search-create-app-portal.md)
- [Quickstart: Create a skillset in the Azure portal](search-get-started-skillset.md)
Summary
{
"modification_type": "minor update",
"modification_title": "BicepファイルにおけるAzureポータルのクイックスタートリンク修正"
}
Explanation
この変更は、articles/search/search-get-started-bicep.mdファイルに対するマイナーな更新であり、Azureポータル内のクイックスタートのリンクが修正されました。具体的には、リンクのタイトルが「Quickstart: Create a search index in the Azure portal」から「Quickstart: Full-text search in the Azure portal」に変更されています。
この修正によってリンクがより正確な情報を提供し、クイックスタートの内容が明確になることを目的としています。変更は1行の追加と1行の削除から成り立っており、合計2行の変更が行われています。この更新は、Azure AI Searchに関するリソースへのアクセスを改善し、ユーザーが必要な情報を見つけやすくするために重要です。
articles/search/search-get-started-portal-image-search.md
Diff
@@ -6,19 +6,20 @@ author: haileytap
ms.author: haileytapia
ms.service: azure-ai-search
ms.topic: quickstart
-ms.date: 12/16/2025
+ms.date: 01/16/2026
ms.custom:
- references_regions
---
-# Quickstart: Search for multimodal content in the Azure portal
+# Quickstart: Multimodal search in the Azure portal
In this quickstart, you use the **Import data (new)** wizard in the Azure portal to get started with [multimodal search](multimodal-search-overview.md). The wizard simplifies the process of extracting, chunking, vectorizing, and loading both text and images into a searchable index.
-Unlike [Quickstart: Vector search in the Azure portal](search-get-started-portal-import-vectors.md), which processes simple text-containing images, this quickstart supports advanced image processing for multimodal RAG scenarios.
-
This quickstart uses a multimodal PDF from the [azure-search-sample-data](https://github.com/Azure-Samples/azure-search-sample-data/tree/main/sustainable-ai-pdf) repo. However, you can use different files and still complete this quickstart.
+> [!TIP]
+> Have text-heavy documents? See [Quickstart: Vector search in the Azure portal](search-get-started-portal-import-vectors.md) to chunk and vectorize content with optional image support.
+
## Prerequisites
+ An Azure account with an active subscription. [Create an account for free](https://azure.microsoft.com/pricing/purchase-options/azure-account?cid=msft_learn).
@@ -35,14 +36,14 @@ This quickstart uses a multimodal PDF from the [azure-search-sample-data](https:
### Supported extraction methods
-For content extraction, you can choose either default extraction via Azure AI Search or enhanced extraction via [Azure Document Intelligence in Foundry Tools](/azure/ai-services/document-intelligence/overview). The following table describes both extraction methods.
+For content extraction, choose either default extraction via Azure AI Search or enhanced extraction via [Azure Document Intelligence in Foundry Tools](/azure/ai-services/document-intelligence/overview).
| Method | Description |
|--|--|
-| Default extraction | Extracts location metadata from PDF images only. Doesn't require another Azure AI resource. |
-| Enhanced extraction | Extracts location metadata from text and images for multiple document types. Requires a [Microsoft Foundry resource](/azure/ai-services/multi-service-resource) <sup>1</sup> in a [supported region](cognitive-search-skill-document-intelligence-layout.md#supported-regions). |
+| Default extraction | Extracts location metadata from PDF images only. Doesn't require another Azure resource. |
+| Enhanced extraction | Extracts location metadata from text and images for multiple document types. Requires an [Azure AI multi-service account](https://portal.azure.com/#create/Microsoft.CognitiveServicesAllInOne) <sup>1</sup> for integration. |
-<sup>1</sup> For billing purposes, you must [attach your Foundry resource](cognitive-search-attach-cognitive-services.md) to the skillset in your Azure AI Search service. Unless you use a [keyless connection](cognitive-search-attach-cognitive-services.md#bill-through-a-keyless-connection) (preview) to create the skillset, both resources must be in the same region.
+<sup>1</sup> For billing purposes, you must [attach your multi-service account](cognitive-search-attach-cognitive-services.md) to your Azure AI Search skillset. Currently, the wizard requires your search service and multi-service account to be in the [same supported region for the Document Layout skill](cognitive-search-skill-document-intelligence-layout.md#supported-regions), even when using keyless connections.
### Supported embedding methods
@@ -56,20 +57,18 @@ The portal supports the following models for each method. Deployment instruction
| Provider | Models for image verbalization | Models for multimodal embeddings |
|--|--|--|
-| [Microsoft Foundry resource](/azure/ai-services/multi-service-resource) <sup>1</sup> | **Embedding model**: [Azure Vision multimodal](/azure/ai-services/computer-vision/how-to/image-retrieval) <sup>2</sup> | [Azure Vision multimodal](/azure/ai-services/computer-vision/how-to/image-retrieval) <sup>2</sup> |
-| [Microsoft Foundry hub-based project](/azure/ai-foundry/how-to/hub-create-projects?view=foundry-classic&pivots=web-portal&preserve-view=true) | **LLMs**:<br>phi-4<br>gpt-4o<br>gpt-4o-mini<br>gpt-5<br>gpt-5-mini<br>gpt-5-nano<br><br>**Embedding models**:<br>text-embedding-ada-002<br>text-embedding-3-small<br>text-embedding-3-large<br>Cohere-embed-v3-english <sup>3</sup><br>Cohere-embed-v3-multilingual <sup>3</sup> | Cohere-embed-v3-english <sup>3</sup><br>Cohere-embed-v3-multilingual <sup>3</sup> |
-| [Microsoft Foundry project](/azure/ai-foundry/how-to/create-projects?view=foundry-classic&pivots=web-portal&preserve-view=true) | **LLMs**:<br>phi-4<br>gpt-4o<br>gpt-4o-mini<br>gpt-5<br>gpt-5-mini<br>gpt-5-nano<br><br>**Embedding models**:<br>text-embedding-ada-002<br>text-embedding-3-small<br>text-embedding-3-large | |
-| [Azure OpenAI resource](/azure/ai-foundry/openai/how-to/create-resource?view=foundry-classic&pivots=web-portal&preserve-view=true) <sup>4, 5</sup> | **LLMs**:<br>gpt-4o<br>gpt-4o-mini<br>gpt-5<br>gpt-5-mini<br>gpt-5-nano<br><br>**Embedding models**:<br>text-embedding-ada-002<br>text-embedding-3-small<br>text-embedding-3-large | |
-
-<sup>1</sup> For billing purposes, you must [attach your Foundry resource](cognitive-search-attach-cognitive-services.md) to the skillset in your Azure AI Search service. Unless you use a [keyless connection](cognitive-search-attach-cognitive-services.md#bill-through-a-keyless-connection) (preview) to create the skillset, both resources must be in the same region.
+| [Azure AI multi-service account](https://portal.azure.com/#create/Microsoft.CognitiveServicesAllInOne) <sup>1</sup> | Embedding model: [Azure Vision multimodal](/azure/ai-services/computer-vision/how-to/image-retrieval) | [Azure Vision multimodal](/azure/ai-services/computer-vision/how-to/image-retrieval) |
+| [Microsoft Foundry hub-based project](/azure/ai-foundry/how-to/hub-create-projects?view=foundry-classic&pivots=web-portal&preserve-view=true) | LLMs:<ul><li>phi-4</li><li>gpt-4o</li><li>gpt-4o-mini</li><li>gpt-5</li><li>gpt-5-mini</li><li>gpt-5-nano</li></ul>Embedding models:<ul><li>text-embedding-ada-002</li><li>text-embedding-3-small</li><li>text-embedding-3-large</li><li>Cohere-embed-v3-english <sup>2</sup></li><li>Cohere-embed-v3-multilingual <sup>2</sup></li></ul> | <ul><li>Cohere-embed-v3-english <sup>2</sup></li><li>Cohere-embed-v3-multilingual <sup>2</sup></li></ul> |
+| [Microsoft Foundry project](/azure/ai-foundry/how-to/create-projects?view=foundry-classic&pivots=web-portal&preserve-view=true) | LLMs:<ul><li>phi-4</li><li>gpt-4o</li><li>gpt-4o-mini</li><li>gpt-5</li><li>gpt-5-mini</li><li>gpt-5-nano</li></ul>Embedding models:<ul><li>text-embedding-ada-002</li><li>text-embedding-3-small</li><li>text-embedding-3-large</li></ul> | |
+| [Azure OpenAI resource](/azure/ai-foundry/openai/how-to/create-resource?view=foundry-classic&pivots=web-portal&preserve-view=true) <sup>3, 4</sup> | LLMs:<ul><li>gpt-4o</li><li>gpt-4o-mini</li><li>gpt-5</li><li>gpt-5-mini</li><li>gpt-5-nano</li></ul>Embedding models:<ul><li>text-embedding-ada-002</li><li>text-embedding-3-small</li><li>text-embedding-3-large</li></ul> | |
-<sup>2</sup> The Azure Vision multimodal embeddings APIs are available in [select regions](/azure/ai-services/computer-vision/overview-image-analysis#region-availability).
+<sup>1</sup> For billing purposes, you must [attach your multi-service account](cognitive-search-attach-cognitive-services.md) to your Azure AI Search skillset. Currently, the wizard requires your search service and multi-service account to be in the [same supported region for the Azure Vision multimodal embeddings skill](cognitive-search-skill-vision-vectorize.md#supported-regions), even when using keyless connections.
-<sup>3</sup> To use this model in the wizard, you must provision it as a serverless API deployment. You can use an [ARM/Bicep template](https://github.com/Azure-Samples/azure-ai-search-multimodal-sample/blob/42b4d07f2dd9f7720fdc0b0788bf107bdac5eecb/infra/ai/modules/project.bicep#L37C1-L38C1) for this task.
+<sup>2</sup> To use this model in the wizard, you must provision it as a serverless API deployment. You can use an [ARM/Bicep template](https://github.com/Azure-Samples/azure-ai-search-multimodal-sample/blob/42b4d07f2dd9f7720fdc0b0788bf107bdac5eecb/infra/ai/modules/project.bicep#L37C1-L38C1) for this task.
-<sup>4</sup> The endpoint of your Azure OpenAI resource must have a [custom subdomain](/azure/ai-services/cognitive-services-custom-subdomains), such as `https://my-unique-name.openai.azure.com`. If you created your resource in the [Azure portal](https://portal.azure.com/), this subdomain was automatically generated during resource setup.
+<sup>3</sup> The endpoint of your Azure OpenAI resource must have a [custom subdomain](/azure/ai-services/cognitive-services-custom-subdomains), such as `https://my-unique-name.openai.azure.com`. If you created your resource in the [Azure portal](https://portal.azure.com/), this subdomain was automatically generated during resource setup.
-<sup>5</sup> Azure OpenAI resources (with access to embedding models) that were created in the [Foundry portal](https://ai.azure.com/?cid=learnDocs) aren't supported. You must create an Azure OpenAI resource in the Azure portal.
+<sup>4</sup> Azure OpenAI resources (with access to embedding models) that were created in the [Microsoft Foundry portal](https://ai.azure.com/?cid=learnDocs) aren't supported. You must create an Azure OpenAI resource in the Azure portal.
### Public endpoint requirements
@@ -123,32 +122,32 @@ On your Azure Storage account:
The following tabs cover all wizard-compatible resources for multimodal search. Select only the tabs that apply to your chosen [extraction method](#supported-extraction-methods) and [embedding method](#supported-embedding-methods).
-### [**Azure OpenAI**](#tab/openai-perms)
+### [**Azure AI multi-service**](#tab/multi-service-perms)
-Azure OpenAI provides LLMs for image verbalization and embedding models for text and image vectorization. Your search service requires access to call the [GenAI Prompt skill](cognitive-search-skill-genai-prompt.md) and [Azure OpenAI Embedding skill](cognitive-search-skill-azure-openai-embedding.md).
+A multi-service account provides access to multiple Azure AI services, including [Azure Document Intelligence](/azure/ai-services/document-intelligence/overview) for content extraction and [Azure Vision](/azure/ai-services/computer-vision/overview) for content embedding. Your search service requires access to call the [Document Layout skill](cognitive-search-skill-document-intelligence-layout.md) and [Azure Vision multimodal embeddings skill](cognitive-search-skill-vision-vectorize.md).
-On your Azure OpenAI resource:
+On your multi-service account:
-+ Assign **Cognitive Services OpenAI User** to your [search service identity](search-how-to-managed-identities.md#create-a-system-managed-identity).
-
-### [**Foundry project**](#tab/foundry-project-perms)
++ Assign **Cognitive Services User** to your [search service identity](search-how-to-managed-identities.md#create-a-system-managed-identity).
-The Foundry model catalog provides LLMs for image verbalization and embedding models for text and image vectorization. Your search service requires access to call the [GenAI Prompt skill](cognitive-search-skill-genai-prompt.md) and [AML skill](cognitive-search-aml-skill.md).
+### [**Microsoft Foundry**](#tab/foundry-perms)
> [!NOTE]
> If you're using a hub-based project, skip this step. Hub-based projects support API keys instead of managed identities for authentication.
-On your Foundry resource:
+The Microsoft Foundry model catalog provides LLMs for image verbalization and embedding models for text and image vectorization. Your search service requires access to call the [GenAI Prompt skill](cognitive-search-skill-genai-prompt.md) and [AML skill](cognitive-search-aml-skill.md).
+
+On the parent resource of your Microsoft Foundry project:
+ Assign **Azure AI Project Manager** to your [search service identity](search-how-to-managed-identities.md#create-a-system-managed-identity).
-### [**Foundry resource**](#tab/foundry-resource-perms)
+### [**Azure OpenAI**](#tab/openai-perms)
-A Foundry resource provides access to multiple subservices of Foundry Tools, including [Azure Document Intelligence](/azure/ai-services/document-intelligence/overview) for content extraction and [Azure Vision](/azure/ai-services/computer-vision/overview) for content embedding. Your search service requires access to call the [Document Layout skill](cognitive-search-skill-document-intelligence-layout.md) and [Azure Vision multimodal embeddings skill](cognitive-search-skill-vision-vectorize.md).
+Azure OpenAI provides LLMs for image verbalization and embedding models for text and image vectorization. Your search service requires access to call the [GenAI Prompt skill](cognitive-search-skill-genai-prompt.md) and [Azure OpenAI Embedding skill](cognitive-search-skill-azure-openai-embedding.md).
-On your Foundry resource:
+On your Azure OpenAI resource:
-+ Assign **Cognitive Services User** to your [search service identity](search-how-to-managed-identities.md#create-a-system-managed-identity).
++ Assign **Cognitive Services OpenAI User** to your [search service identity](search-how-to-managed-identities.md#create-a-system-managed-identity).
---
@@ -168,18 +167,12 @@ To prepare the sample data for this quickstart:
## Deploy models
-The wizard offers several options for content embedding. Image verbalization requires an LLM to describe images and an embedding model to vectorize text and image content, while direct multimodal embeddings only require an embedding model. These models are available through Azure OpenAI and Foundry.
-
> [!NOTE]
-> If you're using Azure Vision, skip this step. The multimodal embeddings are built into your Foundry resource and don't require model deployment.
-
-To deploy the models for this quickstart:
+> If you're using Azure Vision, skip this step. The multimodal embeddings are built into your multi-service account and don't require model deployment.
-1. Sign in to the [Foundry portal](https://ai.azure.com/?cid=learnDocs).
-
-1. Select your Azure OpenAI resource or Foundry project.
+The wizard offers several options for content embedding. Image verbalization requires an LLM to describe images and an embedding model to vectorize text and image content, while direct multimodal embeddings only require an embedding model. These models are available through Azure OpenAI and Foundry.
-1. Deploy the models required for your chosen [embedding method](#supported-embedding-methods).
+To deploy the models required for your chosen [embedding method](#supported-embedding-methods), see [Deploy Microsoft Foundry Models in the Foundry portal](/azure/ai-foundry/how-to/deploy-models-openai).
## Start the wizard
@@ -199,7 +192,11 @@ To start the wizard for multimodal search:
:::image type="content" source="media/search-get-started-portal-images/wizard-scenarios-multimodal-rag.png" alt-text="Screenshot of the Multimodal RAG tile in the wizard." border="true" lightbox="media/search-get-started-portal-images/wizard-scenarios-multimodal-rag.png":::
-## Connect to your data
+## Run the wizard
+
+The wizard walks you through several configuration steps. This section covers each step in sequence.
+
+### Connect to your data
Azure AI Search requires a connection to a data source for content ingestion and indexing. In this case, the data source is your Azure Storage account.
@@ -215,7 +212,7 @@ To connect to your data:
1. Select **Next**.
-## Extract your content
+### Extract your content
Depending on your chosen [extraction method](#supported-extraction-methods), the wizard provides configuration options for document cracking and chunking.
@@ -233,15 +230,15 @@ To use the Document Extraction skill:
### [**Enhanced extraction**](#tab/document-intelligence)
-Your Foundry resource provides access to [Azure Document Intelligence](/azure/ai-services/document-intelligence/overview), which calls the [Document Layout skill](cognitive-search-skill-document-intelligence-layout.md) to recognize document structure and extract text and images relationally. It does so by attaching location metadata, such as page numbers and bounding polygons, to each image. The Document Layout skill also breaks text content into smaller, more manageable chunks.
+Your multi-service account provides access to [Azure Document Intelligence](/azure/ai-services/document-intelligence/overview), which calls the [Document Layout skill](cognitive-search-skill-document-intelligence-layout.md) to recognize document structure and extract text and images relationally. This skill attaches location metadata, such as page numbers and bounding polygons, to each image. It also breaks text content into smaller, more manageable chunks.
To use the Document Layout skill:
1. On the **Content extraction** page, select **AI Document Intelligence**.
:::image type="content" source="media/search-get-started-portal-images/extract-your-content-doc-intelligence.png" alt-text="Screenshot of the wizard page with Azure Document Intelligence selected for content extraction." border="true" lightbox="media/search-get-started-portal-images/extract-your-content-doc-intelligence.png":::
-1. Select your Azure subscription and Foundry resource.
+1. Select your Azure subscription and multi-service account.
1. For the authentication type, select **System assigned identity**.
@@ -253,7 +250,7 @@ To use the Document Layout skill:
---
-## Embed your content
+### Embed your content
During this step, the wizard uses your chosen [embedding method](#supported-embedding-methods) to generate vector representations of both text and images.
@@ -311,8 +308,6 @@ To use the skills for multimodal embeddings:
1. For the kind, select your model provider: **Azure AI Foundry** or **AI Vision vectorization**.
- If Azure Vision is unavailable, make sure your search service and Foundry resource are both in a [region that supports the Azure Vision multimodal APIs](/azure/ai-services/computer-vision/how-to/image-retrieval).
-
1. Select your Azure subscription, resource, and embedding model deployment (if applicable).
1. For the authentication type, select **System assigned identity** if you're not using a hub-based project. Otherwise, leave it as **API key**.
@@ -325,7 +320,7 @@ To use the skills for multimodal embeddings:
---
-## Store the extracted images
+### Store the extracted images
The next step is to send images extracted from your documents to Azure Storage. In Azure AI Search, this secondary storage is known as a [knowledge store](knowledge-store-concept-intro.md).
@@ -341,7 +336,11 @@ To store the extracted images:
1. Select **Next**.
-## Map new fields
+### Add semantic ranking
+
+On the **Advanced settings** page, you can optionally add [semantic ranking](semantic-search-overview.md) to rerank results at the end of query execution. Reranking promotes the most semantically relevant matches to the top.
+
+### Map new fields
On the **Advanced settings** page, you can optionally add fields to the index schema. By default, the wizard generates the fields described in the following table.
@@ -368,7 +367,13 @@ To add fields to the index schema:
1. If you want to restore the schema to its original version, select **Reset**.
-## Schedule indexing
+Key points about this step:
+
++ The index schema provides vector and nonvector fields for chunked data.
+
++ Document parsing mode creates chunks (one search document per chunk).
+
+### Schedule indexing
For data sources where the underlying data is volatile, you can [schedule indexing](search-howto-schedule-indexers.md) to capture changes at specific intervals or specific dates and times.
Summary
{
"modification_type": "minor update",
"modification_title": "Azureポータルにおけるマルチモーダル検索クイックスタートの情報更新"
}
Explanation
この変更は、articles/search/search-get-started-portal-image-search.mdファイルに対するマイナーな更新であり、Azureポータルにおけるマルチモーダル検索に関するクイックスタートの情報がアップデートされました。この更新では、主にタイトルの修正および具体的な手順の明確化が行われています。
具体的には、クイックスタートのタイトルが「Search for multimodal content in the Azure portal」から「Multimodal search in the Azure portal」に変更され、手順に関する情報がより明確に整理されました。また、いくつかの抽出メソッドや埋め込み方法についての説明が追加され、関連するリンク先の情報も更新されています。
この変更により、ユーザーはマルチモーダル検索の実行手順をより簡単に理解し、正確な情報に基づいて手続きを進めることができるようになります。また、クイックスタート内のさまざまな要素が整理され、使いやすさが向上しています。全体的に、54行の追加と49行の削除が行われ、合計103行にわたる変更が適用されています。
articles/search/search-get-started-portal-import-vectors.md
Diff
@@ -9,14 +9,17 @@ ms.custom:
- build-2024
- ignite-2024
ms.topic: quickstart
-ms.date: 12/16/2025
+ms.date: 01/16/2026
---
-# Quickstart: Vectorize text in the Azure portal
+# Quickstart: Vector search in the Azure portal
In this quickstart, you use the **Import data (new)** wizard in the Azure portal to get started with [integrated vectorization](vector-search-integrated-vectorization.md). The wizard chunks your content and calls an embedding model to vectorize the chunks at indexing and query time.
-This quickstart uses text-based PDFs from the [azure-search-sample-data](https://github.com/Azure-Samples/azure-search-sample-data/tree/main/sustainable-ai-pdf) repo. Although you can use images to complete this quickstart, we recommend [Quickstart: Multimodal search in the Azure portal](search-get-started-portal-image-search.md) for advanced image processing.
+This quickstart uses text-based PDFs and simple images from the [azure-search-sample-data](https://github.com/Azure-Samples/azure-search-sample-data/tree/main/sustainable-ai-pdf) repo. However, you can use different files and still complete this quickstart.
+
+> [!TIP]
+> Have image-rich documents? See [Quickstart: Multimodal search in the Azure portal](search-get-started-portal-image-search.md) to extract, store, and search images alongside text.
## Prerequisites
@@ -32,34 +35,32 @@ This quickstart uses text-based PDFs from the [azure-search-sample-data](https:/
### Supported data sources
-The wizard [supports a wide range of Azure data sources](search-import-data-portal.md#supported-data-sources-and-scenarios). However, this quickstart only covers the data sources that work with whole files, which are described in the following table.
+The wizard [supports several Azure data sources](search-import-data-portal.md#supported-data-sources-and-scenarios). However, this quickstart only covers the data sources that work with whole files, which are described in the following table.
| Supported data source | Description |
|--|--|
| [Azure Blob Storage](/azure/storage/common/storage-account-create) | This data source works with blobs and tables. You must use a standard performance (general-purpose v2) account. Access tiers can be hot, cool, or cold. |
| [Azure Data Lake Storage (ADLS) Gen2](/azure/storage/blobs/create-data-lake-storage-account) | This is an Azure Storage account with a hierarchical namespace enabled. To confirm that you have Data Lake Storage, check the **Properties** tab on the **Overview** page.<br><br> :::image type="content" source="media/search-get-started-portal-import-vectors/data-lake-storage.png" alt-text="Screenshot of an Azure Data Lake Storage account in the Azure portal." border="true" lightbox="media/search-get-started-portal-import-vectors/data-lake-storage.png"::: |
-| [Microsoft OneLake](search-how-to-index-onelake-files.md) | This data source connects to OneLake files and shortcuts. |
+| [Microsoft OneLake](search-how-to-index-onelake-files.md) | This data source connects to OneLake files and shortcuts. |
### Supported embedding models
The portal supports the following embedding models for integrated vectorization. Deployment instructions are provided in a [later section](#prepare-embedding-model).
| Provider | Supported models |
|--|--|
-| [Microsoft Foundry resource](/azure/ai-services/multi-service-resource) <sup>1</sup> | **For text and images**: [Azure Vision multimodal](/azure/ai-services/computer-vision/how-to/image-retrieval) <sup>2</sup> |
-| [Microsoft Foundry hub-based project](/azure/ai-foundry/how-to/hub-create-projects) | **For text**:<br>text-embedding-ada-002<br>text-embedding-3-small<br>text-embedding-3-large<br><br>**For text and images**:<br>Cohere-embed-v3-english <sup>3</sup><br>Cohere-embed-v3-multilingual <sup>3</sup> |
-| [Microsoft Foundry project](/azure/ai-foundry/how-to/create-projects) | **For text**:<br>text-embedding-ada-002<br>text-embedding-3-small<br>text-embedding-3-large |
-| [Azure OpenAI resource](/azure/ai-services/openai/how-to/create-resource) <sup>4, 5</sup> | **For text**:<br>text-embedding-ada-002<br>text-embedding-3-small<br>text-embedding-3-large |
+| [Azure AI multi-service account](https://portal.azure.com/#create/Microsoft.CognitiveServicesAllInOne) <sup>1</sup> | For text and images: [Azure Vision multimodal](/azure/ai-services/computer-vision/how-to/image-retrieval) |
+| [Microsoft Foundry hub-based project](/azure/ai-foundry/how-to/hub-create-projects) | For text:<ul><li>text-embedding-ada-002</li><li>text-embedding-3-small</li><li>text-embedding-3-large</li></ul>For text and images:<ul><li>Cohere-embed-v3-english <sup>2</sup></li><li>Cohere-embed-v3-multilingual <sup>2</sup></li></ul> |
+| [Microsoft Foundry project](/azure/ai-foundry/how-to/create-projects) | For text:<ul><li>text-embedding-ada-002</li><li>text-embedding-3-small</li><li>text-embedding-3-large</li></ul> |
+| [Azure OpenAI resource](/azure/ai-services/openai/how-to/create-resource) <sup>3, 4</sup> | For text:<ul><li>text-embedding-ada-002</li><li>text-embedding-3-small</li><li>text-embedding-3-large</li></ul> |
-<sup>1</sup> For billing purposes, you must [attach your Foundry resource](cognitive-search-attach-cognitive-services.md) to the skillset in your Azure AI Search service. Unless you use a [keyless connection](cognitive-search-attach-cognitive-services.md#bill-through-a-keyless-connection) (preview) to create the skillset, both resources must be in the same region.
+<sup>1</sup> For billing purposes, you must [attach your multi-service account](cognitive-search-attach-cognitive-services.md) to your Azure AI Search skillset. Currently, the wizard requires your search service and multi-service account to be in the [same supported region for the Azure Vision multimodal embeddings skill](cognitive-search-skill-vision-vectorize.md#supported-regions), even when using keyless connections.
-<sup>2</sup> The Azure Vision multimodal embeddings APIs are available in [select regions](/azure/ai-services/computer-vision/overview-image-analysis#region-availability).
+<sup>2</sup> To use this model in the wizard, you must provision it as a serverless API deployment. You can use an [ARM/Bicep template](https://github.com/Azure-Samples/azure-ai-search-multimodal-sample/blob/42b4d07f2dd9f7720fdc0b0788bf107bdac5eecb/infra/ai/modules/project.bicep#L37C1-L38C1) for this task.
-<sup>3</sup> To use this model in the wizard, you must provision it as a serverless API deployment. You can use an [ARM/Bicep template](https://github.com/Azure-Samples/azure-ai-search-multimodal-sample/blob/42b4d07f2dd9f7720fdc0b0788bf107bdac5eecb/infra/ai/modules/project.bicep#L37C1-L38C1) for this task.
+<sup>3</sup> The endpoint of your Azure OpenAI resource must have a [custom subdomain](/azure/ai-services/cognitive-services-custom-subdomains), such as `https://my-unique-name.openai.azure.com`. If you created your resource in the [Azure portal](https://portal.azure.com/), this subdomain was automatically generated during resource setup.
-<sup>4</sup> The endpoint of your Azure OpenAI resource must have a [custom subdomain](/azure/ai-services/cognitive-services-custom-subdomains), such as `https://my-unique-name.openai.azure.com`. If you created your resource in the [Azure portal](https://portal.azure.com/), this subdomain was automatically generated during resource setup.
-
-<sup>5</sup> Azure OpenAI resources (with access to embedding models) that were created in the [Foundry portal](https://ai.azure.com/?cid=learnDocs) aren't supported. You must create an Azure OpenAI resource in the Azure portal.
+<sup>4</sup> Azure OpenAI resources (with access to embedding models) that were created in the [Microsoft Foundry portal](https://ai.azure.com/?cid=learnDocs) aren't supported. You must create an Azure OpenAI resource in the Azure portal.
### Public endpoint requirements
@@ -207,7 +208,7 @@ The wizard supports several embedding models. Internally, the wizard calls the [
1. To deploy an embedding model:
- 1. Sign in to the [Foundry portal](https://ai.azure.com/?cid=learnDocs) and select your Azure OpenAI resource.
+ 1. Sign in to the [Microsoft Foundry portal](https://ai.azure.com/?cid=learnDocs) and select your Azure OpenAI resource.
1. Deploy a [supported embedding model](#supported-embedding-models).
@@ -219,7 +220,7 @@ To complete these steps, you must have a [Foundry project](/azure/ai-foundry/how
1. To assign roles:
- 1. Sign in to the [Azure portal](https://portal.azure.com/) and select your Foundry resource.
+ 1. Sign in to the [Azure portal](https://portal.azure.com/) and select your Microsoft Foundry resource.
1. From the left pane, select **Access control (IAM)**.
@@ -233,19 +234,19 @@ To complete these steps, you must have a [Foundry project](/azure/ai-foundry/how
1. To deploy an embedding model:
- 1. Sign in to the [Foundry portal](https://ai.azure.com/?cid=learnDocs) and select your resource.
+ 1. Sign in to the [Microsoft Foundry portal](https://ai.azure.com/?cid=learnDocs) and select your project.
1. Deploy a [supported embedding model](#supported-embedding-models).
### [Azure Vision](#tab/model-vision)
-The wizard supports text and image retrieval through the Azure Vision multimodal embeddings APIs, which are built into your Foundry resource. Internally, the wizard calls the [Azure Vision multimodal embeddings skill](cognitive-search-skill-vision-vectorize.md) to make the connection.
+The wizard supports text and image retrieval through the Azure Vision multimodal embeddings APIs, which are built into your Azure AI multi-service account. Internally, the wizard calls the [Azure Vision multimodal embeddings skill](cognitive-search-skill-vision-vectorize.md) to make the connection.
-Since no model deployment is required, you only need to assign roles to your search service identity.
+No model deployment is required, so you only need to assign roles to your search service identity.
To assign roles:
-1. Sign in to the [Azure portal](https://portal.azure.com/) and select your Foundry resource.
+1. Sign in to the [Azure portal](https://portal.azure.com/) and select your multi-service account.
1. From the left pane, select **Access control (IAM)**.
@@ -275,7 +276,11 @@ To start the wizard for vector search:
:::image type="content" source="media/search-get-started-portal-import-vectors/wizard-scenarios-rag.png" alt-text="Screenshot of the RAG tile in the wizard." border="true" lightbox="media/search-get-started-portal-import-vectors/wizard-scenarios-rag.png":::
-## Connect to your data
+## Run the wizard
+
+The wizard walks you through several configuration steps. This section covers each step in sequence.
+
+### Connect to your data
In this step, you connect Azure AI Search to your chosen [data source](#supported-data-sources) for content ingestion and indexing.
@@ -339,7 +344,7 @@ The current preview adds support for Logic Apps connectors. For a list of suppor
---
-## Vectorize your text
+### Vectorize your text
During this step, the wizard uses your chosen [embedding model](#supported-embedding-models) to vectorize chunked data. Chunking is built in and nonconfigurable. The effective settings are:
@@ -379,15 +384,15 @@ During this step, the wizard uses your chosen [embedding model](#supported-embed
1. Select the checkbox that acknowledges the billing effects of using these resources.
- :::image type="content" source="media/search-get-started-portal-import-vectors/vectorize-text-catalog.png" alt-text="Screenshot of the Vectorize your text page with the Foundry model catalog in the wizard." lightbox="media/search-get-started-portal-import-vectors/vectorize-text-catalog.png":::
+ :::image type="content" source="media/search-get-started-portal-import-vectors/vectorize-text-catalog.png" alt-text="Screenshot of the Vectorize your text page with the Microsoft Foundry model catalog in the wizard." lightbox="media/search-get-started-portal-import-vectors/vectorize-text-catalog.png":::
1. Select **Next**.
### [Azure Vision](#tab/vectorize-text-vision)
1. On the **Vectorize your text** page, select **AI Vision vectorization** for the kind.
-1. Select your Azure subscription and Foundry resource.
+1. Select your Azure subscription and multi-service account.
1. For the authentication type, select **System assigned identity**.
@@ -399,13 +404,13 @@ During this step, the wizard uses your chosen [embedding model](#supported-embed
---
-## Vectorize and enrich your images
+### Vectorize and enrich your images
The health-plan PDFs include a corporate logo, but otherwise, there are no images. You can skip this step if you're using the sample documents.
However, if your content includes useful images, you can apply AI in one or both of the following ways:
-+ Use a supported image embedding model from the Foundry model catalog or the Azure Vision multimodal embeddings API (via a Foundry resource) to vectorize images.
++ Use a supported image embedding model from the Microsoft Foundry model catalog or the Azure Vision multimodal embeddings API (via a multi-service account) to vectorize images.
+ Use optical character recognition (OCR) to extract text from images. This option invokes the [OCR skill](cognitive-search-skill-ocr.md).
@@ -415,8 +420,6 @@ However, if your content includes useful images, you can apply AI in one or both
1. For the kind, select your model provider: **Azure AI Foundry** or **AI Vision vectorization**.
- If Azure Vision is unavailable, make sure your search service and Foundry resource are both in a [region that supports the Azure Vision multimodal APIs](/azure/ai-services/computer-vision/how-to/image-retrieval).
-
1. Select your Azure subscription, resource, and embedding model deployment (if applicable).
1. For the authentication type, select **System assigned identity** if you're not using a hub-based project. Otherwise, leave it as **API key**.
@@ -431,7 +434,7 @@ However, if your content includes useful images, you can apply AI in one or both
1. On the **Vectorize and enrich your images** page, select the **Extract text from images** checkbox.
-1. Select your Azure subscription and Foundry resource.
+1. Select your Azure subscription and multi-service resource.
1. For the authentication type, select **System assigned identity**.
@@ -443,19 +446,11 @@ However, if your content includes useful images, you can apply AI in one or both
---
-## Add semantic ranking
+### Add semantic ranking
On the **Advanced settings** page, you can optionally add [semantic ranking](semantic-search-overview.md) to rerank results at the end of query execution. Reranking promotes the most semantically relevant matches to the top.
-## Map new fields
-
-Key points about this step:
-
-+ The index schema provides vector and nonvector fields for chunked data.
-
-+ You can add fields, but you can't delete or modify generated fields.
-
-+ Document parsing mode creates chunks (one search document per chunk).
+### Map new fields
On the **Advanced settings** page, you can optionally add new fields, assuming the data source provides metadata or fields that aren't picked up on the first pass. By default, the wizard generates the fields described in the following table.
@@ -469,21 +464,40 @@ On the **Advanced settings** page, you can optionally add new fields, assuming t
You can't modify the generated fields or their attributes, but you can add new fields if your data source provides them. For example, Azure Blob Storage provides a collection of metadata fields.
+To add fields to the index schema:
+
+1. On the **Advanced settings** page, under **Index fields**, select **Preview and edit**.
+
1. Select **Add field**.
1. Select a source field from the available fields, enter a field name for the index, and accept (or override) the default data type.
- > [!NOTE]
- > Metadata fields are searchable but not retrievable, filterable, facetable, or sortable.
-
1. If you want to restore the schema to its original version, select **Reset**.
-## Schedule indexing
+Key points about this step:
+
++ The index schema provides vector and nonvector fields for chunked data.
+
++ Document parsing mode creates chunks (one search document per chunk).
+
+### Schedule indexing
+
+For data sources where the underlying data is volatile, you can [schedule indexing](search-howto-schedule-indexers.md) to capture changes at specific intervals or specific dates and times.
-On the **Advanced settings** page, you can also specify an optional [run schedule](search-howto-schedule-indexers.md) for the indexer. After you choose an interval from the dropdown list, select **Next**.
+To schedule indexing:
+
+1. On the **Advanced settings** page, under **Schedule indexing**, specify a run schedule for the indexer. We recommend **Once** for this quickstart.
+
+ :::image type="content" source="media/search-get-started-portal-images/run-once.png" alt-text="Screenshot of the wizard page for scheduling indexing." border="true" lightbox="media/search-get-started-portal-images/run-once.png":::
+
+1. Select **Next**.
## Finish the wizard
+The final step is to review your configuration and create the necessary objects for vector search. If necessary, return to the previous pages in the wizard to adjust your configuration.
+
+To finish the wizard:
+
1. On the **Review your configuration** page, specify a prefix for the objects that the wizard creates. A common prefix helps you stay organized.
1. Select **Create**.
@@ -505,6 +519,8 @@ When the wizard completes the configuration, it creates the following objects:
Search Explorer accepts text strings as input and then vectorizes the text for vector query execution.
+To query your vector index:
+
1. In the Azure portal, go to **Search Management** > **Indexes**, and then select your index.
1. Select **Query options**, and then select **Hide vector values in search results**. This step makes the results more readable.
Summary
{
"modification_type": "minor update",
"modification_title": "Azureポータルでのベクトルサーチのクイックスタート更新"
}
Explanation
この変更は、articles/search/search-get-started-portal-import-vectors.mdファイルに対するマイナーな更新であり、Azureポータルでのベクトルサーチに関するクイックスタートガイドが最新の情報に基づいて更新されました。主な変更点には、タイトルの修正、手順の明確化、および推奨リソースの更新が含まれています。
具体的には、クイックスタートのタイトルは「Vectorize text in the Azure portal」から「Vector search in the Azure portal」に変更され、新しいヒントが追加されて、イメージを多く含む文書に関しても適切なクイックスタートが推奨されるようになりました。また、言及されているデータソースや埋め込みモデルの項目が再構成され、情報が整理されています。
これにより、ユーザーはベクトル検索の手順をより簡単に理解し、実行することができるようになります。変更は61行の追加と45行の削除から成り立っており、合計106行が変更されました。全体として、ベクトルサーチの利用を促進し、ユーザーにとっての使いやすさが向上しています。
articles/search/search-get-started-portal.md
Diff
@@ -1,5 +1,5 @@
---
-title: "Quickstart: Keyword Search in the Azure portal"
+title: "Quickstart: Full-Text Search in the Azure portal"
titleSuffix: Azure AI Search
description: Learn how to create, load, and query your first search index using an import wizard in the Azure portal. This quickstart uses a fictitious hotel dataset for sample data.
manager: nitinme
@@ -14,7 +14,7 @@ ms.custom:
- ignite-2024
---
-# Quickstart: Create a search index in the Azure portal
+# Quickstart: Full-text search in the Azure portal
[!INCLUDE [Import data (new) instructions](includes/quickstarts/search-get-started-portal-new-wizard.md)]
Summary
{
"modification_type": "minor update",
"modification_title": "Azureポータルにおけるフルテキストサーチのクイックスタートのタイトル変更"
}
Explanation
この変更は、articles/search/search-get-started-portal.mdファイルに対するマイナーな更新であり、Azureポータルにおけるフルテキスト検索に関するクイックスタートのタイトルが変更されました。具体的には、元のタイトル「Quickstart: Keyword Search in the Azure portal」が「Quickstart: Full-Text Search in the Azure portal」に修正されています。
この変更により、クイックスタートがキーワード検索よりもフルテキスト検索に焦点を当てていることが明確になりました。これは、ユーザーに対してより正確な情報を提供し、文書の一貫性を向上させるために重要です。また、セクション見出しも同様に変更され、全体的に4行の変更(2行の追加と2行の削除)が行われました。これにより、ドキュメントの内容が明確になり、ユーザーがフルテキスト検索の利用方法をより理解しやすくなっています。
articles/search/search-get-started-rbac.md
Diff
@@ -27,5 +27,5 @@ zone_pivot_groups: search-get-started-rbac
## Related content
+ [Configure a managed identity in Azure AI Search](search-how-to-managed-identities.md)
-+ [Connect your app to Azure AI Search using identities](keyless-connections.md)
++ [Connect your app to Azure AI Search using identities](search-security-rbac-client-code.md)
+ [Configure network access and firewall rules for Azure AI Search](service-configure-firewall.md)
\ No newline at end of file
Summary
{
"modification_type": "minor update",
"modification_title": "Azure AI SearchにおけるRBAC関連のドキュメントのリンク更新"
}
Explanation
この変更は、articles/search/search-get-started-rbac.mdファイルに対するマイナーな更新であり、Azure AI SearchのRBAC(ロールベースアクセス制御)に関連するドキュメント内のリンクが更新されました。具体的には、次のような変更が行われました:
- 配置されていた「Connect your app to Azure AI Search using identities」というリンクが、異なるドキュメント「search-security-rbac-client-code.md」へのリンクに変更されました。この更新は、RBACに基づくアイデンティティの接続方法に関する情報を提供するためのもので、ユーザーにとっての利便性を向上させることを目的としています。
この変更は1行の追加と1行の削除から成り立っており、合計で2行が変更されています。全体的に、この更新により、ドキュメントが最新の情報を反映し、ユーザーが適切なリソースにアクセスできるようになっています。
articles/search/search-how-to-create-search-index.md
Diff
@@ -8,7 +8,9 @@ ms.author: heidist
ms.service: azure-ai-search
ms.update-cycle: 180-days
ms.topic: how-to
-ms.date: 08/27/2025
+ms.date: 01/20/2026
+ms.custom: dev-focus
+ai-usage: ai-assisted
---
# Create an index in Azure AI Search
@@ -17,121 +19,15 @@ In this article, learn the steps for defining a schema for a [**search index**](
## Prerequisites
-+ Write permissions as a [**Search Service Contributor**](search-security-rbac.md) or an [admin API key](search-security-api-keys.md) for key-based authentication.
++ An Azure subscription. [Create one for free](https://azure.microsoft.com/free/cognitive-services).
-+ An understanding of the data you want to index. A search index is based on external content that you want to make searchable. Searchable content is stored as fields in an index. You should have a clear idea of which source fields you want to make searchable, retrievable, filterable, facetable, and sortable on Azure AI Search. See the [schema checklist](#schema-checklist) for guidance.
++ An [Azure AI Search service](search-create-service-portal.md), any region and tier, but it must be a billable tier (Basic or higher) for role-based access.
-+ You must also have a unique field in source data that can be used as the [document key (or ID)](#document-keys) in the index.
++ Permissions to create an index: **Search Service Contributor** role or an [admin API key](search-security-api-keys.md) for key-based authentication.
-+ A stable index location. Moving an existing index to a different search service isn't supported out-of-the-box. Revisit application requirements and make sure that your existing search service (capacity and region), are sufficient for your needs. If you're taking a dependency on Foundry Tools or Azure OpenAI, [choose a region](search-create-service-portal.md#checklist-for-choosing-a-region) that provides all of the necessary resources.
++ A unique field in your source data that can be used as the [document key](#document-keys) in the index.
-+ Finally, all service tiers have [index limits](search-limits-quotas-capacity.md#index-limits) on the number of objects that you can create. For example, if you're experimenting on the Free tier, you can only have three indexes at any given time. Within the index itself, there are [limits on vectors](search-limits-quotas-capacity.md#vector-index-size-limits) and [index limits](search-limits-quotas-capacity.md#index-limits) on the number of simple and complex fields.
-
-## Document keys
-
-Search index creation has two requirements: an index must have a unique name on the search service, and it must have a document key. The boolean `key` attribute on a field can be set to true to indicate which field provides the document key.
-
-A document key is the unique identifier of a search document, and a search document is a collection of fields that completely describes something. For example, if you're indexing a [movies data set](https://www.kaggle.com/datasets/harshitshankhdhar/imdb-dataset-of-top-1000-movies-and-tv-shows), a search document contains the title, genre, and duration of a single movie. Movie names are unique in this dataset, so you might use the movie name as the document key.
-
-In Azure AI Search, a document key is a string, and it must originate from unique values in the data source that's providing the content to be indexed. As a general rule, a search service doesn't generate key values, but in some scenarios (such as the [Azure table indexer](search-how-to-index-azure-tables.md)) it synthesizes existing values to create a unique key for the documents being indexed. Another scenario is one-to-many indexing for chunked or partitioned data, in which case document keys are generated for each chunk.
-
-During incremental indexing, where new and updated content is indexed, incoming documents with new keys are added, while incoming documents with existing keys are either merged or overwritten, depending on whether index fields are null or populated.
-
-Important points about document keys include:
-
-+ The maximum length of values in a key field is 1,024 characters.
-+ Exactly one top-level field in each index must be chosen as the key field and it must be of type `Edm.String`.
-+ The default of the `key` attribute is false for simple fields and null for complex fields.
-
-Key fields can be used to look up documents directly and update or delete specific documents. The values of key fields are handled in a case-sensitive manner when looking up or indexing documents. See [GET Document (REST)](/rest/api/searchservice/documents/get) and [Index Documents (REST)](/rest/api/searchservice/documents) for details.
-
-## Schema checklist
-
-Use this checklist to assist the design decisions for your search index.
-
-1. Review [naming conventions](/rest/api/searchservice/naming-rules) so that index and field names conform to the naming rules.
-
-1. Review [supported data types](/rest/api/searchservice/supported-data-types). The data type affects how the field is used. For example, numeric content is filterable but not full text searchable. The most common data type is `Edm.String` for searchable text, which is tokenized and queried using the full text search engine. The most common data type for a vector field is `Edm.Single` but you can use other types as well.
-
-1. Provide a description of the index, 4,000 character maximum. This human-readable text is invaluable when a system must access several indexes and make a decision based on the description. Consider a Model Context Protocol (MCP) server that must pick the correct index at run time. The decision can be based on the description rather than on index name alone.
-
-1. Identify a [document key](#document-keys). A document key is an index requirement. It's a single string field populated from a source data field that contains unique values. For example, if you're indexing from Blob Storage, the metadata storage path is often used as the document key because it uniquely identifies each blob in the container.
-
-1. Identify the fields in your data source that contribute searchable content in the index.
-
- Searchable nonvector content includes short or long strings that are queried using the full text search engine. If the content is verbose (small phrases or bigger chunks), experiment with different analyzers to see how the text is tokenized.
-
- Searchable vector content can be images or text (in any language) that exists as a mathematical representation. You can use narrow data types or vector compression to make vector fields smaller.
-
- [Attributes set on fields](search-what-is-an-index.md#index-attributes), such as `retrievable` or `filterable`, determine both search behaviors and the physical representation of your index on the search service. Determining how fields should be attributed is an iterative process for many developers. To speed up iterations, start with sample data so that you can drop and rebuild easily.
-
-1. Identify which source fields can be used as filters. Numeric content and short text fields, particularly those with repeating values, are good choices. When working with filters, remember:
-
- + Filters can be used in vector and nonvector queries, but the filter itself is applied to human-readable (nonvector) fields in your index.
-
- + Filterable fields can optionally be used in faceted navigation.
-
- + Filterable fields are returned in arbitrary order and don't undergo relevance scoring, so consider making them sortable as well.
-
-1. For vector fields, specify a vector search configuration and the algorithms used for creating navigation paths and filling the embedding space. For more information, see [Add vector fields](vector-search-how-to-create-index.md).
-
- Vector fields have extra properties that nonvector fields don't have, such as which algorithms to use and vector compression.
-
- Vector fields omit attributes that aren't useful on vector data, such as sorting, filtering, and faceting.
-
-1. For nonvector fields, determine whether to use the default analyzer (`"analyzer": null`) or a different analyzer. [Analyzers](search-analyzers.md) are used to tokenize text fields during indexing and query execution.
-
- For multi-lingual strings, consider a [language analyzer](index-add-language-analyzers.md).
-
- For hyphenated strings or special characters, consider [specialized analyzers](index-add-custom-analyzers.md#built-in-analyzers). One example is [keyword](https://lucene.apache.org/core/6_6_1/analyzers-common/org/apache/lucene/analysis/core/KeywordAnalyzer.html) that treats the entire contents of a field as a single token. This behavior is useful for data like zip codes, IDs, and some product names. For more information, see [Partial term search and patterns with special characters](search-query-partial-matching.md).
-
-> [!NOTE]
-> Full text search is conducted over terms that are tokenized during indexing. If your queries fail to return the results you expect, [test for tokenization](/rest/api/searchservice/indexes/analyze) to verify the string you're searching for actually exists. You can try different analyzers on strings to see how tokens are produced for various analyzers.
-
-## Configure field definitions
-
-The fields collection defines the structure of a search document. All fields have a name, data type, and attributes.
-
-Setting a field as searchable, filterable, sortable, or facetable has an effect on index size and query performance. Don't set those attributes on fields that aren't meant to be referenced in query expressions.
-
-If a field isn't set to be searchable, filterable, sortable, or facetable, the field can't be referenced in any query expression. This is desirable for fields that aren't used in queries, but are needed in search results.
-
-The REST APIs have default attribution based on [data types](/rest/api/searchservice/supported-data-types), which is also used by the [import wizards](search-import-data-portal.md) in the Azure portal. The Azure SDKs don't have defaults, but they have field subclasses that incorporate properties and behaviors, such as [SearchableField](/dotnet/api/azure.search.documents.indexes.models.searchablefield) for strings and [SimpleField](/dotnet/api/azure.search.documents.indexes.models.simplefield) for primitives.
-
-Default field attributions for the REST APIs are summarized in the following table.
-
-| Data type | Searchable | Retrievable | Filterable | Facetable | Sortable | Stored |
-|-----------|-------------|------------|------------|-----------|----------|--------|
-| `Edm.String` | ✅ | ✅ | ✅ | ✅| ✅ | ✅ |
-| `Collection(Edm.String)` | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
-| `Edm.Boolean` | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
-| `Edm.Int32`, `Edm.Int64`, `Edm.Double` | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
-| `Edm.DateTimeOffset` | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
-| `Edm.GeographyPoint` | ✅| ✅ | ✅ | ❌ | ✅ | ✅ |
-| `Edm.ComplexType` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
-| `Collection(Edm.Single)` and all other vector field types | ✅ | ✅ or ❌ | ❌ | ❌ | ❌ | ✅ |
-
-String fields can also be optionally associated with [analyzers](search-analyzers.md) and [synonym maps](search-synonyms.md). Fields of type `Edm.String` that are filterable, sortable, or facetable can be at most 32 kilobytes in length. This is because values of such fields are treated as a single search term, and the maximum length of a term in Azure AI Search is 32 kilobytes. If you need to store more text than this in a single string field, you should explicitly set filterable, sortable, and facetable to `false` in your index definition.
-
-Vector fields must be associated with [dimensions and vector profiles](vector-search-how-to-create-index.md). Retrievable is true by default if you add the vector field using the [**Import data (new)** wizard](search-get-started-portal-import-vectors.md) in the Azure portal. If you use the REST API, it's false.
-
-Field attributes are described in the following table.
-
-|Attribute|Description|
-|---------------|-----------------|
-|name|Required. Sets the name of the field, which must be unique within the fields collection of the index or parent field.|
-|type|Required. Sets the data type for the field. Fields can be simple or complex. Simple fields are of primitive types, like `Edm.String` for text or `Edm.Int32` for integers. [Complex fields](search-howto-complex-data-types.md) can have sub-fields that are themselves either simple or complex. This allows you to model objects and arrays of objects, which in turn enables you to upload most JSON object structures to your index. See [Supported data types](/rest/api/searchservice/supported-data-types) for the complete list of supported types.|
-|key|Required. Set this attribute to true to designate that a field's values uniquely identify documents in the index. See [Document keys](#document-keys) in this article for details.|
-|retrievable| Indicates whether the field can be returned in a search result. Set this attribute to `false` if you want to use a field as a filter, sorting, or scoring mechanism but don't want the field to be visible to the end user. This attribute must be `true` for key fields, and it must be `null` for complex fields. This attribute can be changed on existing fields. Setting retrievable to `true` doesn't cause any increase in index storage requirements. Default is `true` for simple fields and `null` for complex fields.|
-|searchable| Indicates whether the field is full-text searchable and can be referenced in search queries. This means it undergoes [lexical analysis](search-analyzers.md) such as word-breaking during indexing. If you set a searchable field to a value like "Sunny day", internally it's normalized into the individual tokens \"sunny\" and \"day\". This enables full-text searches for these terms. Fields of type `Edm.String` or `Collection(Edm.String)` are searchable by default. This attribute must be `false` for simple fields of other nonstring data types, and it must be `null` for complex fields. </br></br>A searchable field consumes extra space in your index since Azure AI Search processes the contents of those fields and organize them in auxiliary data structures for performant searching. If you want to save space in your index and you don't need a field to be included in searches, set searchable to `false`. See [How full-text search works in Azure AI Search](search-lucene-query-architecture.md) for details. |
-|filterable| Indicates whether to enable the field to be referenced in `$filter` queries. Filterable differs from searchable in how strings are handled. Fields of type `Edm.String` or `Collection(Edm.String)` that are filterable don't undergo lexical analysis, so comparisons are for exact matches only. For example, if you set such a field `f` to "Sunny day", `$filter=f eq 'sunny'` finds no matches, but `$filter=f eq 'Sunny day'` will. This attribute must be `null` for complex fields. Default is `true` for simple fields and `null` for complex fields. To reduce index size, set this attribute to `false` on fields that you won't be filtering on.|
-|sortable| Indicates whether to enable the field to be referenced in `$orderby` expressions. By default Azure AI Search sorts results by score, but in many experiences users want to sort by fields in the documents. A simple field can be sortable only if it's single-valued (it has a single value in the scope of the parent document). </br></br>Simple collection fields can't be sortable, since they're multi-valued. Simple subfields of complex collections are also multi-valued, and therefore can't be sortable. This is true whether it's an immediate parent field, or an ancestor field, that's the complex collection. Complex fields can't be sortable and the sortable attribute must be `null` for such fields. The default for sortable is `true` for single-valued simple fields, `false` for multi-valued simple fields, and `null` for complex fields.|
-|facetable| Indicates whether to enable the field to be referenced in facet queries. Typically used in a presentation of search results that includes hit count by category (for example, search for digital cameras and see hits by brand, by megapixels, by price, and so on). This attribute must be `null` for complex fields. Fields of type `Edm.GeographyPoint` or `Collection(Edm.GeographyPoint)` can't be facetable. Default is `true` for all other simple fields. To reduce index size, set this attribute to `false` on fields that you won't be faceting on. |
-|analyzer|Sets the lexical analyzer for tokenizing strings during indexing and query operations. Valid values for this property include [language analyzers](index-add-language-analyzers.md), [built-in analyzers](index-add-custom-analyzers.md#built-in-analyzers), and [custom analyzers](index-add-custom-analyzers.md). The default is `standard.lucene`. This attribute can only be used with searchable string fields, and it can't be set together with either searchAnalyzer or indexAnalyzer. Once the analyzer is chosen and the field is created in the index, it can't be changed for the field. Must be `null` for [complex fields](search-howto-complex-data-types.md). |
-|searchAnalyzer|Set this property together with indexAnalyzer to specify different lexical analyzers for indexing and queries. If you use this property, set analyzer to `null` and make sure indexAnalyzer is set to an allowed value. Valid values for this property include built-in analyzers and custom analyzers. This attribute can be used only with searchable fields. The search analyzer can be updated on an existing field since it's only used at query-time. Must be `null` for complex fields].|
-|indexAnalyzer|Set this property together with searchAnalyzer to specify different lexical analyzers for indexing and queries. If you use this property, set analyzer to `null` and make sure searchAnalyzer is set to an allowed value. Valid values for this property include built-in analyzers and custom analyzers. This attribute can be used only with searchable fields. Once the index analyzer is chosen, it can't be changed for the field. Must be `null` for complex fields.|
-|synonymMaps|A list of the names of synonym maps to associate with this field. This attribute can be used only with searchable fields. Currently only one synonym map per field is supported. Assigning a synonym map to a field ensures that query terms targeting that field are expanded at query-time using the rules in the synonym map. This attribute can be changed on existing fields. Must be `null` or an empty collection for complex fields.|
-|fields|A list of subfields if this is a field of type `Edm.ComplexType` or `Collection(Edm.ComplexType)`. Must be `null` or empty for simple fields. See [How to model complex data types in Azure AI Search](search-howto-complex-data-types.md) for more information on how and when to use subfields.|
++ An understanding of your data schema. See the [schema checklist](#schema-checklist) for design guidance on making fields searchable, retrievable, filterable, facetable, and sortable.
## Create an index
@@ -192,11 +88,18 @@ POST https://[servicename].search.windows.net/indexes?api-version=[api-version]
}
```
+A successful response returns HTTP 201 Created with the index definition.
+
+**Reference:** [Indexes - Create](/rest/api/searchservice/indexes/create)
+
### [**.NET SDK**](#tab/index-csharp)
The Azure SDK for .NET has [**SearchIndexClient**](/dotnet/api/azure.search.documents.indexes.searchindexclient) with methods for creating and updating indexes.
```csharp
+using Azure.Search.Documents.Indexes;
+using Azure.Search.Documents.Indexes.Models;
+
// Create the index
string indexName = "hotels";
SearchIndex index = new SearchIndex(indexName)
@@ -206,7 +109,7 @@ SearchIndex index = new SearchIndex(indexName)
new SimpleField("hotelId", SearchFieldDataType.String) { IsKey = true, IsFilterable = true, IsSortable = true },
new SearchableField("hotelName") { IsFilterable = true, IsSortable = true },
new SearchableField("description") { AnalyzerName = LexicalAnalyzerName.EnLucene },
- new SearchableField("descriptionFr") { AnalyzerName = LexicalAnalyzerName.FrLucene }
+ new SearchableField("descriptionFr") { AnalyzerName = LexicalAnalyzerName.FrLucene },
new ComplexField("address")
{
Fields =
@@ -226,6 +129,8 @@ await indexClient.CreateIndexAsync(index);
For more examples, see [azure-search-dotnet-samples/quickstart-keyword-search/v11](https://github.com/Azure-Samples/azure-search-dotnet-samples/tree/main/quickstart-keyword-search/AzureSearchQuickstart).
+**Reference:** [SearchIndex](/dotnet/api/azure.search.documents.indexes.models.searchindex), [SimpleField](/dotnet/api/azure.search.documents.indexes.models.simplefield), [SearchableField](/dotnet/api/azure.search.documents.indexes.models.searchablefield), [SearchIndexClient.CreateIndexAsync](/dotnet/api/azure.search.documents.indexes.searchindexclient.createindexasync)
+
### [**Other SDKs**](#tab/index-other-sdks)
For Azure AI Search, the Azure SDKs implement generally available features. As such, you can use any of the SDKs to create a search index. All of them provide a **SearchIndexClient** that has methods for creating and updating indexes.
@@ -238,27 +143,148 @@ For Azure AI Search, the Azure SDKs implement generally available features. As s
---
-<a name="corsoptions"></a>
+## Verify index creation
-## Set `corsOptions` for cross-origin queries
+After creating an index, verify it exists by listing the indexes on your search service.
-Index schemas include a section for setting `corsOptions`. By default, client-side JavaScript can't call any APIs because browsers prevent all cross-origin requests. To allow cross-origin queries through to your index, enable CORS (Cross-Origin Resource Sharing) by setting the **corsOptions** attribute. For security reasons, only [query APIs](search-query-create.md#choose-query-methods) support CORS.
+### [**Azure portal**](#tab/portal)
-```json
-"corsOptions": {
- "allowedOrigins": [
- "*"
- ],
- "maxAgeInSeconds": 300
+1. In the Azure portal, go to your search service.
+
+1. Under **Search management**, select **Indexes**.
+
+1. Confirm your new index appears in the list. If you don't see it, refresh the page.
+
+### [**REST**](#tab/index-rest)
+
+```http
+GET https://[servicename].search.windows.net/indexes?api-version=[api-version]
```
-The following properties can be set for CORS:
+A successful response returns a list of all indexes on the service, including your newly created index.
-+ **allowedOrigins** (required): This is a list of origins that are allowed access to your index. JavaScript code served from these origins is allowed to query your index (assuming the caller provides a valid key or has permissions). Each origin is typically of the form `protocol://<fully-qualified-domain-name>:<port>` although `<port>` is often omitted. For more information, see [Cross-origin resource sharing (Wikipedia)](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing).
+### [**.NET SDK**](#tab/index-csharp)
- If you want to allow access to all origins, include `*` as a single item in the **allowedOrigins** array. *This isn't a recommended practice for production search services* but it's often useful for development and debugging.
+```csharp
+// List all indexes to verify creation
+var indexNames = indexClient.GetIndexNames();
+foreach (var name in indexNames)
+{
+ Console.WriteLine(name);
+}
+```
-+ **maxAgeInSeconds** (optional): Browsers use this value to determine the duration (in seconds) to cache CORS preflight responses. This must be a non-negative integer. A longer cache period delivers better performance, but it extends the amount of time a CORS policy needs to take effect. If this value isn't set, a default duration of five minutes is used.
+### [**Other SDKs**](#tab/index-other-sdks)
+
+Use the `GetIndexNames()` or `list_index_names()` method on your SDK's `SearchIndexClient` to retrieve and display all index names.
+
+---
+
+## Document keys
+
+Search index creation has two requirements: an index must have a unique name on the search service, and it must have a document key. The boolean `key` attribute on a field can be set to true to indicate which field provides the document key.
+
+A document key is the unique identifier of a search document, and a search document is a collection of fields that completely describes something. For example, if you're indexing a [movies data set](https://www.kaggle.com/datasets/harshitshankhdhar/imdb-dataset-of-top-1000-movies-and-tv-shows), a search document contains the title, genre, and duration of a single movie. Movie names are unique in this dataset, so you might use the movie name as the document key.
+
+In Azure AI Search, a document key is a string, and it must originate from unique values in the data source that's providing the content to be indexed. As a general rule, a search service doesn't generate key values, but in some scenarios (such as the [Azure table indexer](search-how-to-index-azure-tables.md)) it synthesizes existing values to create a unique key for the documents being indexed. Another scenario is one-to-many indexing for chunked or partitioned data, in which case document keys are generated for each chunk.
+
+During incremental indexing, where new and updated content is indexed, incoming documents with new keys are added, while incoming documents with existing keys are either merged or overwritten, depending on whether index fields are null or populated.
+
+Important points about document keys include:
+
++ The maximum length of values in a key field is 1,024 characters.
++ Exactly one top-level field in each index must be chosen as the key field and it must be of type `Edm.String`.
++ The default of the `key` attribute is false for simple fields and null for complex fields.
+
+Key fields can be used to look up documents directly and update or delete specific documents. The values of key fields are handled in a case-sensitive manner when looking up or indexing documents. See [GET Document (REST)](/rest/api/searchservice/documents/get) and [Index Documents (REST)](/rest/api/searchservice/documents) for details.
+
+## Schema checklist
+
+Use this checklist to assist the design decisions for your search index.
+
+1. Review [naming conventions](/rest/api/searchservice/naming-rules) so that index and field names conform to the naming rules.
+
+1. Review [supported data types](/rest/api/searchservice/supported-data-types). The data type affects how the field is used. For example, numeric content is filterable but not full text searchable. The most common data type is `Edm.String` for searchable text, which is tokenized and queried using the full text search engine. The most common data type for a vector field is `Edm.Single` but you can use other types as well.
+
+1. Provide a description of the index, 4,000 character maximum. This human-readable text is invaluable when a system must access several indexes and make a decision based on the description. Consider a Model Context Protocol (MCP) server that must pick the correct index at run time. The decision can be based on the description rather than on index name alone.
+
+1. Identify a [document key](#document-keys). A document key is an index requirement. It's a single string field populated from a source data field that contains unique values. For example, if you're indexing from Blob Storage, the metadata storage path is often used as the document key because it uniquely identifies each blob in the container.
+
+1. Identify the fields in your data source that contribute searchable content in the index.
+
+ Searchable nonvector content includes short or long strings that are queried using the full text search engine. If the content is verbose (small phrases or bigger chunks), experiment with different analyzers to see how the text is tokenized.
+
+ Searchable vector content can be images or text (in any language) that exists as a mathematical representation. You can use narrow data types or vector compression to make vector fields smaller.
+
+ [Attributes set on fields](search-what-is-an-index.md#index-attributes), such as `retrievable` or `filterable`, determine both search behaviors and the physical representation of your index on the search service. Determining how fields should be attributed is an iterative process for many developers. To speed up iterations, start with sample data so that you can drop and rebuild easily.
+
+1. Identify which source fields can be used as filters. Numeric content and short text fields, particularly those with repeating values, are good choices. When working with filters, remember:
+
+ + Filters can be used in vector and nonvector queries, but the filter itself is applied to human-readable (nonvector) fields in your index.
+
+ + Filterable fields can optionally be used in faceted navigation.
+
+ + Filterable fields are returned in arbitrary order and don't undergo relevance scoring, so consider making them sortable as well.
+
+1. For vector fields, specify a vector search configuration and the algorithms used for creating navigation paths and filling the embedding space. For more information, see [Add vector fields](vector-search-how-to-create-index.md).
+
+ Vector fields have extra properties that nonvector fields don't have, such as which algorithms to use and vector compression.
+
+ Vector fields omit attributes that aren't useful on vector data, such as sorting, filtering, and faceting.
+
+1. For nonvector fields, determine whether to use the default analyzer (`"analyzer": null`) or a different analyzer. [Analyzers](search-analyzers.md) are used to tokenize text fields during indexing and query execution.
+
+ For multi-lingual strings, consider a [language analyzer](index-add-language-analyzers.md).
+
+ For hyphenated strings or special characters, consider [specialized analyzers](index-add-custom-analyzers.md#built-in-analyzers). One example is [keyword](https://lucene.apache.org/core/6_6_1/analyzers-common/org/apache/lucene/analysis/core/KeywordAnalyzer.html) that treats the entire contents of a field as a single token. This behavior is useful for data like zip codes, IDs, and some product names. For more information, see [Partial term search and patterns with special characters](search-query-partial-matching.md).
+
+> [!NOTE]
+> Full text search is conducted over terms that are tokenized during indexing. If your queries fail to return the results you expect, [test for tokenization](/rest/api/searchservice/indexes/analyze) to verify the string you're searching for actually exists. You can try different analyzers on strings to see how tokens are produced for various analyzers.
+
+## Configure field definitions
+
+The fields collection defines the structure of a search document. All fields have a name, data type, and attributes.
+
+Setting a field as searchable, filterable, sortable, or facetable has an effect on index size and query performance. Don't set those attributes on fields that aren't meant to be referenced in query expressions.
+
+If a field isn't set to be searchable, filterable, sortable, or facetable, the field can't be referenced in any query expression. This is desirable for fields that aren't used in queries, but are needed in search results.
+
+The REST APIs have default attribution based on [data types](/rest/api/searchservice/supported-data-types), which is also used by the [import wizards](search-import-data-portal.md) in the Azure portal. The Azure SDKs don't have defaults, but they have field subclasses that incorporate properties and behaviors, such as [SearchableField](/dotnet/api/azure.search.documents.indexes.models.searchablefield) for strings and [SimpleField](/dotnet/api/azure.search.documents.indexes.models.simplefield) for primitives.
+
+Default field attributions for the REST APIs are summarized in the following table.
+
+| Data type | Searchable | Retrievable | Filterable | Facetable | Sortable | Stored |
+|-----------|-------------|------------|------------|-----------|----------|--------|
+| `Edm.String` | ✅ | ✅ | ✅ | ✅| ✅ | ✅ |
+| `Collection(Edm.String)` | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ |
+| `Edm.Boolean` | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| `Edm.Int32`, `Edm.Int64`, `Edm.Double` | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| `Edm.DateTimeOffset` | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| `Edm.GeographyPoint` | ✅| ✅ | ✅ | ❌ | ✅ | ✅ |
+| `Edm.ComplexType` | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
+| `Collection(Edm.Single)` and all other vector field types | ✅ | ✅ or ❌ | ❌ | ❌ | ❌ | ✅ |
+
+String fields can also be optionally associated with [analyzers](search-analyzers.md) and [synonym maps](search-synonyms.md). Fields of type `Edm.String` that are filterable, sortable, or facetable can be at most 32 kilobytes in length. This is because values of such fields are treated as a single search term, and the maximum length of a term in Azure AI Search is 32 kilobytes. If you need to store more text than this in a single string field, you should explicitly set filterable, sortable, and facetable to `false` in your index definition.
+
+Vector fields must be associated with [dimensions and vector profiles](vector-search-how-to-create-index.md). Retrievable is true by default if you add the vector field using the [**Import data (new)** wizard](search-get-started-portal-import-vectors.md) in the Azure portal. If you use the REST API, it's false.
+
+Field attributes are described in the following table.
+
+|Attribute|Description|
+|---------------|-----------------|
+|name|Required. Sets the name of the field, which must be unique within the fields collection of the index or parent field.|
+|type|Required. Sets the data type for the field. Fields can be simple or complex. Simple fields are of primitive types, like `Edm.String` for text or `Edm.Int32` for integers. [Complex fields](search-howto-complex-data-types.md) can have sub-fields that are themselves either simple or complex. This allows you to model objects and arrays of objects, which in turn enables you to upload most JSON object structures to your index. See [Supported data types](/rest/api/searchservice/supported-data-types) for the complete list of supported types.|
+|key|Required. Set this attribute to true to designate that a field's values uniquely identify documents in the index. See [Document keys](#document-keys) in this article for details.|
+|retrievable| Indicates whether the field can be returned in a search result. Set this attribute to `false` if you want to use a field as a filter, sorting, or scoring mechanism but don't want the field to be visible to the end user. This attribute must be `true` for key fields, and it must be `null` for complex fields. This attribute can be changed on existing fields. Setting retrievable to `true` doesn't cause any increase in index storage requirements. Default is `true` for simple fields and `null` for complex fields.|
+|searchable| Indicates whether the field is full-text searchable and can be referenced in search queries. This means it undergoes [lexical analysis](search-analyzers.md) such as word-breaking during indexing. If you set a searchable field to a value like "Sunny day", internally it's normalized into the individual tokens \"sunny\" and \"day\". This enables full-text searches for these terms. Fields of type `Edm.String` or `Collection(Edm.String)` are searchable by default. This attribute must be `false` for simple fields of other nonstring data types, and it must be `null` for complex fields. </br></br>A searchable field consumes extra space in your index since Azure AI Search processes the contents of those fields and organize them in auxiliary data structures for performant searching. If you want to save space in your index and you don't need a field to be included in searches, set searchable to `false`. See [How full-text search works in Azure AI Search](search-lucene-query-architecture.md) for details. |
+|filterable| Indicates whether to enable the field to be referenced in `$filter` queries. Filterable differs from searchable in how strings are handled. Fields of type `Edm.String` or `Collection(Edm.String)` that are filterable don't undergo lexical analysis, so comparisons are for exact matches only. For example, if you set such a field `f` to "Sunny day", `$filter=f eq 'sunny'` finds no matches, but `$filter=f eq 'Sunny day'` will. This attribute must be `null` for complex fields. Default is `true` for simple fields and `null` for complex fields. To reduce index size, set this attribute to `false` on fields that you won't be filtering on.|
+|sortable| Indicates whether to enable the field to be referenced in `$orderby` expressions. By default Azure AI Search sorts results by score, but in many experiences users want to sort by fields in the documents. A simple field can be sortable only if it's single-valued (it has a single value in the scope of the parent document). </br></br>Simple collection fields can't be sortable, since they're multi-valued. Simple subfields of complex collections are also multi-valued, and therefore can't be sortable. This is true whether it's an immediate parent field, or an ancestor field, that's the complex collection. Complex fields can't be sortable and the sortable attribute must be `null` for such fields. The default for sortable is `true` for single-valued simple fields, `false` for multi-valued simple fields, and `null` for complex fields.|
+|facetable| Indicates whether to enable the field to be referenced in facet queries. Typically used in a presentation of search results that includes hit count by category (for example, search for digital cameras and see hits by brand, by megapixels, by price, and so on). This attribute must be `null` for complex fields. Fields of type `Edm.GeographyPoint` or `Collection(Edm.GeographyPoint)` can't be facetable. Default is `true` for all other simple fields. To reduce index size, set this attribute to `false` on fields that you won't be faceting on. |
+|analyzer|Sets the lexical analyzer for tokenizing strings during indexing and query operations. Valid values for this property include [language analyzers](index-add-language-analyzers.md), [built-in analyzers](index-add-custom-analyzers.md#built-in-analyzers), and [custom analyzers](index-add-custom-analyzers.md). The default is `standard.lucene`. This attribute can only be used with searchable string fields, and it can't be set together with either searchAnalyzer or indexAnalyzer. Once the analyzer is chosen and the field is created in the index, it can't be changed for the field. Must be `null` for [complex fields](search-howto-complex-data-types.md). |
+|searchAnalyzer|Set this property together with indexAnalyzer to specify different lexical analyzers for indexing and queries. If you use this property, set analyzer to `null` and make sure indexAnalyzer is set to an allowed value. Valid values for this property include built-in analyzers and custom analyzers. This attribute can be used only with searchable fields. The search analyzer can be updated on an existing field since it's only used at query-time. Must be `null` for complex fields.|
+|indexAnalyzer|Set this property together with searchAnalyzer to specify different lexical analyzers for indexing and queries. If you use this property, set analyzer to `null` and make sure searchAnalyzer is set to an allowed value. Valid values for this property include built-in analyzers and custom analyzers. This attribute can be used only with searchable fields. Once the index analyzer is chosen, it can't be changed for the field. Must be `null` for complex fields.|
+|synonymMaps|A list of the names of synonym maps to associate with this field. This attribute can be used only with searchable fields. Currently only one synonym map per field is supported. Assigning a synonym map to a field ensures that query terms targeting that field are expanded at query-time using the rules in the synonym map. This attribute can be changed on existing fields. Must be `null` or an empty collection for complex fields.|
+|fields|A list of subfields if this is a field of type `Edm.ComplexType` or `Collection(Edm.ComplexType)`. Must be `null` or empty for simple fields. See [How to model complex data types in Azure AI Search](search-howto-complex-data-types.md) for more information on how and when to use subfields.|
## Allowed updates on existing indexes
@@ -284,6 +310,28 @@ To minimize churn in the design process, the following table describes which ele
| [Synonym maps](search-synonyms.md) | Yes, you can create and edit synonym maps with no rebuild. |
| [Semantic configuration](semantic-how-to-configure.md) | Yes, you can create and edit semantic configurations with no rebuild. |
+<a name="corsoptions"></a>
+
+## Set `corsOptions` for cross-origin queries
+
+Index schemas include a section for setting `corsOptions`. By default, client-side JavaScript can't call any APIs because browsers prevent all cross-origin requests. To allow cross-origin queries through to your index, enable CORS (Cross-Origin Resource Sharing) by setting the **corsOptions** attribute. For security reasons, only [query APIs](search-query-create.md#choose-query-methods) support CORS.
+
+```json
+"corsOptions": {
+ "allowedOrigins": [
+ "*"
+ ],
+ "maxAgeInSeconds": 300
+```
+
+The following properties can be set for CORS:
+
++ **allowedOrigins** (required): This is a list of origins that are allowed access to your index. JavaScript code served from these origins is allowed to query your index (assuming the caller provides a valid key or has permissions). Each origin is typically of the form `protocol://<fully-qualified-domain-name>:<port>` although `<port>` is often omitted. For more information, see [Cross-origin resource sharing (Wikipedia)](https://en.wikipedia.org/wiki/Cross-origin_resource_sharing).
+
+ If you want to allow access to all origins, include `*` as a single item in the **allowedOrigins** array. *This isn't a recommended practice for production search services* but it's often useful for development and debugging.
+
++ **maxAgeInSeconds** (optional): Browsers use this value to determine the duration (in seconds) to cache CORS preflight responses. This must be a non-negative integer. A longer cache period delivers better performance, but it extends the amount of time a CORS policy needs to take effect. If this value isn't set, a default duration of five minutes is used.
+
## Next steps
Use the following links to learn about specialized features that can be added to an index:
Summary
{
"modification_type": "minor update",
"modification_title": "Azure AI Search インデックス作成方法文書の更新"
}
Explanation
この変更は、articles/search/search-how-to-create-search-index.mdファイルに対する重要な更新を示しています。この更新では、Azure AI Searchにおける検索インデックスの作成方法に関する内容が見直され、以下の主な変更点が含まれています:
メタデータの更新: 文書の日付が「2025年8月27日」から「2026年1月20日」に変更され、新しいメタデータ属性が追加されました(ms.custom: dev-focus、ai-usage: ai-assisted)。
前提条件の変更: 前提条件セクションが大幅に改訂され、必要なリソースと権限について具体的に記載されるとともに、不要だった記述が削除されました。たとえば、Azureサブスクリプションの作成方法や、APIキーの利用についての情報が含まれています。
インデックス作成の手順: 新しいインデックス作成手順が追加され、成功を確認する方法として、インデックスのリスト取得が示されています。また、具体的なコードスニペットも提供され、ASP.NET SDKを使用したインデックス作成手順が説明されています。
CORS設定の追加: CORS(Cross-Origin Resource Sharing)に関する詳しい設定方法が新たに加えられ、これにより外部アプリケーションからのAPI呼び出しの管理が容易になりました。
これらの更新により、ユーザーはAzure AI Searchの機能をより効果的に利用できるようになり、文書の一貫性と正確性が向上しました。全体として、174行の新しい内容が追加され、126行が削除され、合計で300行の変更が行われました。この改訂は、ユーザーがインデックスを作成する際の理解を深め、具体的な手続きを示すことを目指しています。
articles/search/search-how-to-delete-documents.md
Diff
@@ -8,14 +8,14 @@ ms.author: heidist
ms.service: azure-ai-search
ms.update-cycle: 180-days
ms.topic: how-to
-ms.date: 01/15/2026
+ms.date: 01/20/2026
+ms.custom: dev-focus
+ai-usage: ai-assisted
---
# Delete documents in a search index
-This article explains how to delete whole documents from a search index on Azure AI Search.
-
-It covers these tasks:
+This article explains how to delete whole documents from a search index on Azure AI Search using REST APIs or Azure SDKs. It covers these tasks:
+ Understand when manual deletion is required
+ Identify specific documents to delete
@@ -24,14 +24,24 @@ It covers these tasks:
+ Delete documents in bulk
+ Confirm deletion
-You can use the REST APIs or an Azure SDK client library to delete documents. There's currently no support for document deletion in the Azure portal.
-
-For more information about deleting or updating a *specific field* within a document, see [Update or rebuild an index](search-howto-reindex.md).
+> [!TIP]
+> For a quick single-document delete, skip to [Delete a single document](#delete-a-single-document).
## Prerequisites
-+ To delete documents, you must have
-`Microsoft.Search/searchServices/indexes/documents/delete` or **Search Index Data Contributor** permissions.
++ An Azure AI Search service (any tier). [Create a service](search-create-service-portal.md) or [find an existing one](https://portal.azure.com/#blade/HubsExtension/BrowseResourceBlade/resourceType/Microsoft.Search%2FsearchServices).
+
++ An existing search index with documents to delete. This article assumes you already [created an index](search-how-to-create-search-index.md) and [loaded documents](search-how-to-load-search-index.md).
+
++ Permissions to delete documents:
+ + **Key-based authentication**: An [admin API key](search-security-api-keys.md) for your search service.
+ + **Role-based authentication**: [Search Index Data Contributor](search-security-rbac.md) role or the `Microsoft.Search/searchServices/indexes/documents/delete` permission.
+
++ For SDK development, install the Azure Search client library:
+ + Python: [azure-search-documents](https://pypi.org/project/azure-search-documents/)
+ + .NET: [Azure.Search.Documents](https://www.nuget.org/packages/Azure.Search.Documents/)
+ + JavaScript: [@azure/search-documents](https://www.npmjs.com/package/@azure/search-documents)
+ + Java: [azure-search-documents](https://central.sonatype.com/artifact/com.azure/azure-search-documents)
## Understand when manual deletion is required
@@ -143,7 +153,11 @@ Here's an example response:
### [**REST**](#tab/rest)
-1. Use the [Documents - Index](/rest/api/searchservice/documents) REST API with a delete `@search.action` to remove it from the search index. Formulate a POST call specifying the index name and the `docs/index` endpoint. Make sure the body of the request includes the key of the document you want to delete.
+1. Use the [Documents - Index](/rest/api/searchservice/documents) REST API with a delete `@search.action` to remove it from the search index.
+
+1. Formulate a POST call specifying the index name and the `docs/index` endpoint.
+
+1. Make sure the body of the request includes the key of the document you want to delete.
```http
POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/index?api-version=2025-09-01
@@ -168,7 +182,7 @@ Here's an example response:
|-----------|-------|---------|-----|
|200|Document was successfully deleted.|n/a|Delete operations are [idempotent](https://en.wikipedia.org/wiki/Idempotence). That is, even if a document key doesn't exist in the index, attempting a delete operation with that key results in a 200 status code.|
|400|There was an error in the document that prevented it from being deleted.|No|The error message in the response provides details.|
- |422|The index is temporarily unavailable because it was updated with the 'allowIndexDowntime' flag set to 'true'.|Yes|
+ |422|The index is temporarily unavailable because it was updated with the 'allowIndexDowntime' flag set to 'true'.|Yes|Wait for index to become available.|
|503|Your search service is temporarily unavailable, possibly due to heavy load.|Yes|Your code should wait before retrying in this case or you risk prolonging the service unavailability.|
> [!NOTE]
@@ -180,49 +194,98 @@ Here's an example response:
GET https://[service name].search.windows.net/indexes/hotel-sample-index/docs/18?api-version=2025-09-01
```
-### [**.NET**](#tab/sdk-dotnet)
+**Reference:** [Documents - Index](/rest/api/searchservice/documents)
-The Azure SDK for .NET provides the following APIs for simple and bulk document uploads into an index:
+A successful delete request returns HTTP 200 (OK). The response body contains status for each document:
-+ [IndexDocumentsAsync](/dotnet/api/azure.search.documents.searchclient.indexdocumentsasync)
-+ [SearchIndexingBufferedSender](/dotnet/api/azure.search.documents.searchindexingbufferedsender-1)
+```json
+{
+ "value": [
+ { "key": "18", "status": true, "statusCode": 200 }
+ ]
+}
+```
### [**Python**](#tab/sdk-python)
-The Azure SDK for Python provides the following APIs for simple and bulk document uploads into an index:
+The following example deletes a document from an index:
-+ [IndexDocumentsBatch](/python/api/azure-search-documents/azure.search.documents.indexdocumentsbatch)
-+ [SearchIndexingBufferedSender](/python/api/azure-search-documents/azure.search.documents.searchindexingbufferedsender)
+```python
+from azure.core.credentials import AzureKeyCredential
+from azure.search.documents import SearchClient
+
+# Set up the client
+service_name = "<your-search-service-name>"
+index_name = "hotels-sample-index"
+api_key = "<your-admin-api-key>"
+
+endpoint = f"https://{service_name}.search.windows.net"
+credential = AzureKeyCredential(api_key)
+client = SearchClient(endpoint=endpoint, index_name=index_name, credential=credential)
+
+# Delete a document by key
+result = client.delete_documents(documents=[{"HotelId": "18"}])
+print(f"Deleted {len(result)} document(s)")
+```
-Code sample:
+**Reference:** [SearchClient](/python/api/azure-search-documents/azure.search.documents.searchclient), [delete_documents](/python/api/azure-search-documents/azure.search.documents.searchclient#azure-search-documents-searchclient-delete-documents)
-+ [sample_crud_operations.py](https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/search/azure-search-documents/samples/sample_crud_operations.py)
+### [**C#**](#tab/sdk-csharp)
+
+The following example deletes a document from an index:
+
+```csharp
+using Azure;
+using Azure.Search.Documents;
+using Azure.Search.Documents.Models;
+
+// Set up the client
+string serviceName = "<your-search-service-name>";
+string indexName = "hotels-sample-index";
+string apiKey = "<your-admin-api-key>";
+
+Uri endpoint = new Uri($"https://{serviceName}.search.windows.net");
+AzureKeyCredential credential = new AzureKeyCredential(apiKey);
+SearchClient searchClient = new SearchClient(endpoint, indexName, credential);
+
+// Delete a document by key
+var batch = IndexDocumentsBatch.Delete("HotelId", new[] { "18" });
+IndexDocumentsResult result = await searchClient.IndexDocumentsAsync(batch);
+
+Console.WriteLine($"Deleted {result.Results.Count} document(s)");
+```
+
+**Reference:** [SearchClient](/dotnet/api/azure.search.documents.searchclient), [IndexDocumentsAsync](/dotnet/api/azure.search.documents.searchclient.indexdocumentsasync), [IndexDocumentsBatch](/dotnet/api/azure.search.documents.models.indexdocumentsbatch)
### [**JavaScript**](#tab/sdk-javascript)
-The Azure SDK for JavaScript/TypeScript provides the following APIs for simple and bulk document uploads into an index:
+The Azure SDK for JavaScript/TypeScript provides the following APIs for document deletion:
-+ [IndexDocumentsBath](/javascript/api/%40azure/search-documents/indexdocumentsbatch)
++ [IndexDocumentsBatch](/javascript/api/%40azure/search-documents/indexdocumentsbatch)
+ [SearchIndexingBufferedSender](/javascript/api/%40azure/search-documents/searchindexingbufferedsender)
+**Reference:** [SearchClient](/javascript/api/@azure/search-documents/searchclient), [IndexDocumentsBatch](/javascript/api/@azure/search-documents/indexdocumentsbatch)
+
### [**Java**](#tab/sdk-java)
-The Azure SDK for Java provides the following APIs for simple and bulk document uploads into an index:
+The Azure SDK for Java provides the following APIs for document deletion:
-+ [indexactiontype enumerator](/java/api/com.azure.search.documents.models.indexactiontype)
++ [IndexActionType](/java/api/com.azure.search.documents.models.indexactiontype)
+ [SearchIndexingBufferedSender](/java/api/com.azure.search.documents.searchclientbuilder.searchindexingbufferedsenderbuilder)
-Code sample:
+Code sample: [IndexContentManagementExample.java](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/search/azure-search-documents/src/samples/java/com/azure/search/documents/IndexContentManagementExample.java)
-+ [IndexContentManagementExample.java](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/search/azure-search-documents/src/samples/java/com/azure/search/documents/IndexContentManagementExample.java)
+**Reference:** [SearchClient](/java/api/com.azure.search.documents.searchclient), [IndexActionType](/java/api/com.azure.search.documents.models.indexactiontype)
---
## Delete documents in bulk
### [**REST**](#tab/rest)
-1. Use the [Documents - Index](/rest/api/searchservice/documents) REST API with a delete `@search.action` to remove it from the search index. Formulate a POST call specifying the index name and the `docs/index` endpoint. Make sure the body of the request includes the keys of all of the documents you want to delete.
+1. Use the [Documents - Index](/rest/api/searchservice/documents) REST API with a delete `@search.action` to remove it from the search index. Formulate a POST call specifying the index name and the `docs/index` endpoint.
+
+1. Make sure the body of the request includes the keys of all of the documents you want to delete.
```http
POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/index?api-version=2025-09-01
@@ -251,58 +314,159 @@ Code sample:
+ **Vector storage**: Deleting documents does not immediately free up vector storage quotas. It takes several minutes for physical deletion. For immediate reclamation of vector space, you may need to drop and rebuild the index.
-### [**.NET**](#tab/sdk-dotnet)
+**Reference:** [Documents - Index](/rest/api/searchservice/documents)
-The Azure SDK for .NET provides the following APIs for simple and bulk document uploads into an index:
+### [**Python**](#tab/sdk-python)
-+ [IndexDocumentsAsync](/dotnet/api/azure.search.documents.searchclient.indexdocumentsasync)
-+ [SearchIndexingBufferedSender](/dotnet/api/azure.search.documents.searchindexingbufferedsender-1)
+The following example deletes multiple documents in bulk:
+
+```python
+from azure.core.credentials import AzureKeyCredential
+from azure.search.documents import SearchClient
+
+# Set up the client
+service_name = "<your-search-service-name>"
+index_name = "hotels-sample-index"
+api_key = "<your-admin-api-key>"
+
+endpoint = f"https://{service_name}.search.windows.net"
+credential = AzureKeyCredential(api_key)
+client = SearchClient(endpoint=endpoint, index_name=index_name, credential=credential)
+
+# Delete multiple documents by key
+documents_to_delete = [
+ {"HotelId": "doc1"},
+ {"HotelId": "doc2"},
+ {"HotelId": "doc3"}
+]
+result = client.delete_documents(documents=documents_to_delete)
+print(f"Deleted {len(result)} document(s)")
+```
-### [**Python**](#tab/sdk-python)
+**Reference:** [SearchClient](/python/api/azure-search-documents/azure.search.documents.searchclient), [delete_documents](/python/api/azure-search-documents/azure.search.documents.searchclient#azure-search-documents-searchclient-delete-documents)
+
+### [**C#**](#tab/sdk-csharp)
+
+The following example deletes multiple documents in bulk:
-The Azure SDK for Python provides the following APIs for simple and bulk document uploads into an index:
+```csharp
+using Azure;
+using Azure.Search.Documents;
+using Azure.Search.Documents.Models;
-+ [IndexDocumentsBatch](/python/api/azure-search-documents/azure.search.documents.indexdocumentsbatch)
-+ [SearchIndexingBufferedSender](/python/api/azure-search-documents/azure.search.documents.searchindexingbufferedsender)
+// Set up the client
+string serviceName = "<your-search-service-name>";
+string indexName = "hotels-sample-index";
+string apiKey = "<your-admin-api-key>";
-Code sample:
+Uri endpoint = new Uri($"https://{serviceName}.search.windows.net");
+AzureKeyCredential credential = new AzureKeyCredential(apiKey);
+SearchClient searchClient = new SearchClient(endpoint, indexName, credential);
-+ [sample_crud_operations.py](https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/search/azure-search-documents/samples/sample_crud_operations.py)
+// Delete multiple documents by key
+var batch = IndexDocumentsBatch.Delete("HotelId", new[] { "doc1", "doc2", "doc3" });
+IndexDocumentsResult result = await searchClient.IndexDocumentsAsync(batch);
+
+Console.WriteLine($"Deleted {result.Results.Count} document(s)");
+```
+
+**Reference:** [SearchClient](/dotnet/api/azure.search.documents.searchclient), [IndexDocumentsAsync](/dotnet/api/azure.search.documents.searchclient.indexdocumentsasync), [IndexDocumentsBatch](/dotnet/api/azure.search.documents.models.indexdocumentsbatch)
### [**JavaScript**](#tab/sdk-javascript)
-The Azure SDK for JavaScript/TypeScript provides the following APIs for simple and bulk document uploads into an index:
+The Azure SDK for JavaScript/TypeScript provides the following APIs for bulk document deletion:
-+ [IndexDocumentsBath](/javascript/api/%40azure/search-documents/indexdocumentsbatch)
++ [IndexDocumentsBatch](/javascript/api/%40azure/search-documents/indexdocumentsbatch)
+ [SearchIndexingBufferedSender](/javascript/api/%40azure/search-documents/searchindexingbufferedsender)
+**Reference:** [SearchClient](/javascript/api/@azure/search-documents/searchclient), [IndexDocumentsBatch](/javascript/api/@azure/search-documents/indexdocumentsbatch)
+
### [**Java**](#tab/sdk-java)
-The Azure SDK for Java provides the following APIs for simple and bulk document uploads into an index:
+The Azure SDK for Java provides the following APIs for bulk document deletion:
-+ [indexactiontype enumerator](/java/api/com.azure.search.documents.models.indexactiontype)
++ [IndexActionType](/java/api/com.azure.search.documents.models.indexactiontype)
+ [SearchIndexingBufferedSender](/java/api/com.azure.search.documents.searchclientbuilder.searchindexingbufferedsenderbuilder)
-Code sample:
+Code sample: [IndexContentManagementExample.java](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/search/azure-search-documents/src/samples/java/com/azure/search/documents/IndexContentManagementExample.java)
-+ [IndexContentManagementExample.java](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/search/azure-search-documents/src/samples/java/com/azure/search/documents/IndexContentManagementExample.java)
+**Reference:** [SearchClient](/java/api/com.azure.search.documents.searchclient), [IndexActionType](/java/api/com.azure.search.documents.models.indexactiontype)
---
-## Confirm document deletion
+## Verify document deletion
-You can find metrics about document counts and index storage using:
+After deleting documents, verify the deletion was successful.
-+ The Azure portal, under **Search management** > **Indexes**.
-+ The [Indexes - Get Statistics](/rest/api/searchservice/indexes/get-statistics) REST API
+### [**Portal**](#tab/verify-portal)
+
+1. In the Azure portal, open the search service **Overview** page.
+1. Select **Search management** > **Indexes**.
+1. Check the **Document count** column for your index.
+1. Wait a few minutes and refresh if the count hasn't changed (deletion is asynchronous).
+
+### [**REST**](#tab/verify-rest)
+
+Use the [Get Document](/rest/api/searchservice/documents/get) API to confirm the document no longer exists:
+
+```http
+GET https://[service-name].search.windows.net/indexes/hotels-sample-index/docs/18?api-version=2025-09-01
+api-key: [admin-key]
+```
+
+Expected response: HTTP 404 Not Found if the document was deleted successfully.
+
+You can also check index statistics:
+
+```http
+GET https://[service-name].search.windows.net/indexes/hotels-sample-index/stats?api-version=2025-09-01
+api-key: [admin-key]
+```
-Get Statistics is the mechanism for retrieving index metrics. The portal calls Get Statistics to populate the index metrics in the portal pages.
+### [**SDK**](#tab/verify-sdk)
+
+```python
+# Python - verify document was deleted
+try:
+ document = client.get_document(key="18")
+ print("Document still exists")
+except Exception as e:
+ print(f"Document not found (expected): {e}")
+```
+
+```csharp
+// C# - verify document was deleted
+try
+{
+ var document = await searchClient.GetDocumentAsync<Hotel>("18");
+ Console.WriteLine("Document still exists");
+}
+catch (RequestFailedException ex) when (ex.Status == 404)
+{
+ Console.WriteLine("Document not found (expected)");
+}
+```
+
+---
Deleting a document doesn't immediately free up space in the index. Every few minutes, a background process performs the physical deletion. Whether you use the Azure portal or the Get Statistics API to return index statistics, you can expect a small delay before the deletion is reflected in the Azure portal and API metrics.
+## Troubleshoot document deletion
+
+The following table lists common issues when deleting documents and how to resolve them.
+
+| Issue | Cause | Resolution |
+| ----- | ----- | ---------- |
+| Document count unchanged | Deletion is asynchronous. Background process runs every few minutes. | Wait 2-3 minutes and refresh. Check index statistics again. |
+| 400 Bad Request | Invalid document key or malformed request body. | Verify the document key field name matches your index schema. Check JSON syntax. |
+| 403 Forbidden | Insufficient permissions. | Use an admin API key or ensure your identity has Search Index Data Contributor role. |
+| 404 Not Found on index | Index name is incorrect or doesn't exist. | Verify the index name in your request URL. |
+| Storage not reclaimed | Physical deletion happens asynchronously in background. | Wait several minutes. For immediate vector storage reclamation, drop and rebuild the index. |
+| Orphaned documents remain | Source documents deleted before indexer ran with deletion detection. | Manually delete orphaned documents using their document keys. |
+
## See also
-+ [Search indexes overview](search-what-is-an-index.md)
-+ [Data import overview](search-what-is-data-import.md)
-+ [Import data wizard overview](search-import-data-portal.md)
-+ [Indexers overview](search-indexer-overview.md)
++ [Documents - Index (REST API)](/rest/api/searchservice/documents)
++ [Indexes - Get Statistics (REST API)](/rest/api/searchservice/indexes/get-statistics)
++ [Load documents into a search index](search-how-to-load-search-index.md)
++ [Create a search index](search-how-to-create-search-index.md)
Summary
{
"modification_type": "minor update",
"modification_title": "Azure AI Searchにおけるドキュメント削除方法の更新"
}
Explanation
この変更は、articles/search/search-how-to-delete-documents.mdファイルに対する重要な更新を示しています。本記事は、Azure AI Searchの検索インデックスからドキュメントを削除する方法について説明していますが、以下の主な点が改訂されています:
メタデータの更新: 文書の日付が「2026年1月15日」から「2026年1月20日」に変更され、新たにメタデータ属性(ms.custom: dev-focus、ai-usage: ai-assisted)が追加されました。
削除方法の具体化: REST APIまたはAzure SDKを使用してドキュメントを削除する方法が明確に説明され、手順が強化されています。具体的には、削除操作のヒントや推奨される方法が追加されました。
前提条件の詳細化: 削除を行うための要件が詳細に記載され、Azure AI Searchサービスの作成方法や、必要な権限(APIキーまたはロールベースの認証)について具体的に説明しています。
コード例の追加: ドキュメントを削除するためのSDKの使用例が多くの言語(Python、C#、JavaScriptなど)で追加され、実際のコードスニペットが提供されています。これにより、ユーザーが具体的な実装方法を容易に理解できるようになっています。
確認方法とトラブルシューティングの追加: 削除したドキュメントを確認する方法や一般的な問題とその解決策が示され、ユーザーが削除の成功を容易に確認できるようになりました。
全体として、216行の新しい内容が追加され、52行が削除され、合計268行の変更が行われました。この改定により、Azure AI Searchにおけるドキュメント削除のプロセスが一層明確になり、ユーザーにとっての利便性が向上しました。
articles/search/search-how-to-integrated-vectorization.md
Diff
@@ -78,7 +78,7 @@ To configure role-based access for integrated vectorization:
In this section, you retrieve the endpoint and Microsoft Entra token for your Azure AI Search service. Both values are necessary to establish connections in REST<!--and Python--> requests.
> [!TIP]
-> The following steps assume that you're using [role-based access](#role-based-access) for proof-of-concept testing. If you want to use integrated vectorization for app development, see [Connect your app to Azure AI Search using identities](keyless-connections.md).
+> The following steps assume that you're using [role-based access](#role-based-access) for proof-of-concept testing. If you want to use integrated vectorization for app development, see [Connect your app to Azure AI Search using identities](search-security-rbac-client-code.md).
1. Sign in to the [Azure portal](https://portal.azure.com/) and select your Azure AI Search service.
Summary
{
"modification_type": "minor update",
"modification_title": "組み込みベクトライゼーションに関するドキュメントの更新"
}
Explanation
この変更は、articles/search/search-how-to-integrated-vectorization.mdファイルに対する小規模な更新を示しています。以下に明確なポイントを挙げます:
リンクの更新: 「“keyless-connections.md”」というリンクが「“search-security-rbac-client-code.md”」に変更されました。この変更は、統合されたベクトライゼーションをアプリ開発に利用する際の関連情報へのナビゲーションをより正確にすることを目的としています。
全体的な流れの整合性: ドキュメント内のメッセージが見直され、より適切なリソースに誘導されることで、開発者がAzure AI Searchを効果的に活用できるようにしています。
この変更によって、ドキュメントの信頼性と関連性が向上し、目的のリソースにスムーズにアクセスできるようになります。全体として、1行の新規追加と1行の削除が行われ、合計で2行の変更が行われました。
articles/search/search-how-to-load-search-index.md
Diff
@@ -8,28 +8,33 @@ ms.author: heidist
ms.service: azure-ai-search
ms.update-cycle: 180-days
ms.topic: how-to
-ms.date: 01/13/2026
+ms.date: 01/20/2026
+ms.custom: dev-focus
+ai-usage: ai-assisted
---
# Load data into a search index in Azure AI Search
-This article explains how to import documents into a predefined search index. In Azure AI Search, a [search index is created first](search-how-to-create-search-index.md) with [data import](search-what-is-data-import.md) following as a second step. The exception is [Import wizards](search-import-data-portal.md) in the Azure portal and [indexer pipelines](search-indexer-overview.md), which create and load an index in one workflow.
+This article explains how to import documents into a predefined search index using REST APIs, Azure SDKs, or the Azure portal.
-## How data import works
-
-A search service accepts JSON documents that conform to the index schema. A search service can import and index plain text content and vector content in JSON documents.
-
-+ Plain text content is retrieved from fields in the external data source, from metadata properties, or from enriched content that's generated by a [skillset](cognitive-search-working-with-skillsets.md). Skills can extract or infer textual descriptions from images and unstructured content.
+> [!TIP]
+> For the fastest path to loading data, use the [Import data wizard](search-import-data-portal.md) in the Azure portal, which creates an index and loads it in one workflow.
-+ Vector content is retrieved from a data source that provides it, or it's created by a skillset that implements [integrated vectorization](vector-search-integrated-vectorization.md) in an Azure AI Search indexer workload.
+## Prerequisites
-You can prepare these documents yourself, but if content resides in a [supported data source](search-indexer-overview.md#supported-data-sources), running an [indexer](search-indexer-overview.md) or using an Import wizard can automate document retrieval, JSON serialization, and indexing.
++ An Azure AI Search service (any tier). [Create a service](search-create-service-portal.md) or [find an existing one](https://portal.azure.com/#blade/HubsExtension/BrowseResourceBlade/resourceType/Microsoft.Search%2FsearchServices).
-Once data is indexed, the physical data structures of the index are locked in. For guidance on what can and can't be changed, see [Update and rebuild an index](search-howto-reindex.md).
++ An existing search index. This article assumes you already [created an index](search-how-to-create-search-index.md). If you need to create and load in one step, use an [Import wizard](search-import-data-portal.md) or [indexer](search-indexer-overview.md).
-Indexing isn't a background process. A search service balances indexing and query workloads, but if [query latency is too high](search-performance-analysis.md#impact-of-indexing-on-queries), you can either [add capacity](search-capacity-planning.md#add-or-remove-partitions-and-replicas) or identify periods of low query activity for loading an index.
++ Permissions to load documents:
+ + **Key-based authentication**: An [admin API key](search-security-api-keys.md) for your search service.
+ + **Role-based authentication**: [Search Index Data Contributor](search-security-rbac.md) role on the search service.
-For more information, see [Data import strategies](search-what-is-data-import.md).
++ For SDK development, install the Azure Search client library:
+ + .NET: [Azure.Search.Documents](https://www.nuget.org/packages/Azure.Search.Documents/)
+ + Python: [azure-search-documents](https://pypi.org/project/azure-search-documents/)
+ + JavaScript: [@azure/search-documents](https://www.npmjs.com/package/@azure/search-documents)
+ + Java: [azure-search-documents](https://central.sonatype.com/artifact/com.azure/azure-search-documents)
## Use the Azure portal
@@ -132,39 +137,86 @@ REST APIs are useful for initial proof-of-concept testing, where you can test in
GET https://[service name].search.windows.net/indexes/hotel-sample-index/docs/1111?api-version=2025-09-01
```
+**Reference:** [Documents - Index](/rest/api/searchservice/documents), [Documents - Get](/rest/api/searchservice/documents/get)
+
+A successful index request returns HTTP 200 (OK) for a batch where all documents succeeded, or HTTP 207 (Multi-Status) if some documents failed. The response body contains status for each document:
+
+```json
+{
+ "value": [
+ { "key": "1111", "status": true, "statusCode": 201 },
+ { "key": "2", "status": true, "statusCode": 200 }
+ ]
+}
+```
+
When the document key or ID is new, **null** becomes the value for any field that's unspecified in the document. For actions on an existing document, updated values replace the previous values. Any fields that weren't specified in a "merge" or "mergeUpload" are left intact in the search index.
## Use the Azure SDKs
Programmability is provided in the following Azure SDKs.
-### [**.NET**](#tab/sdk-dotnet)
+### [**Python**](#tab/sdk-python)
+
+The Azure SDK for Python provides the following APIs for simple and bulk document uploads into an index:
+
++ [IndexDocumentsBatch](/python/api/azure-search-documents/azure.search.documents.indexdocumentsbatch)
++ [SearchIndexingBufferedSender](/python/api/azure-search-documents/azure.search.documents.searchindexingbufferedsender)
+
+**Reference:** [SearchClient](/python/api/azure-search-documents/azure.search.documents.searchclient), [IndexDocumentsBatch](/python/api/azure-search-documents/azure.search.documents.indexdocumentsbatch)
+
+Code samples include:
+
++ [sample_crud_operations.py](https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/search/azure-search-documents/samples/sample_crud_operations.py)
+
++ Be sure to check the [azure-search-vector-samples](https://github.com/Azure/azure-search-vector-samples) repo for code examples showing how to index vector fields.
+
+### [**C#**](#tab/sdk-csharp)
The Azure SDK for .NET provides the following APIs for simple and bulk document uploads into an index:
+ [IndexDocumentsAsync](/dotnet/api/azure.search.documents.searchclient.indexdocumentsasync)
+ [SearchIndexingBufferedSender](/dotnet/api/azure.search.documents.searchindexingbufferedsender-1)
-There are several samples that illustrate indexing in context of simple and large-scale indexing:
+The following example uploads documents to an existing index:
-+ [**"Load an index"**](search-howto-dotnet-sdk.md#load-an-index) explains basic steps.
+```csharp
+using Azure;
+using Azure.Search.Documents;
+using Azure.Search.Documents.Models;
-+ [**Azure.Search.Documents Samples - Indexing Documents**](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/search/Azure.Search.Documents/samples/Sample05_IndexingDocuments.md) from the Azure SDK team adds [SearchIndexingBufferedSender](/dotnet/api/azure.search.documents.searchindexingbufferedsender-1).
+// Create the search client
+string serviceName = "<your-search-service-name>";
+string indexName = "hotels-sample-index";
+string apiKey = "<your-admin-api-key>";
-+ [**Tutorial: Index any data**](tutorial-optimize-indexing-push-api.md) couples batch indexing with testing strategies for determining an optimum size.
+Uri endpoint = new Uri($"https://{serviceName}.search.windows.net");
+AzureKeyCredential credential = new AzureKeyCredential(apiKey);
+SearchClient searchClient = new SearchClient(endpoint, indexName, credential);
-+ Be sure to check the [azure-search-vector-samples](https://github.com/Azure/azure-search-vector-samples) repo for code examples showing how to index vector fields.
+// Define documents to upload
+var documents = new[]
+{
+ new { HotelId = "1111", HotelName = "Stay-Kay City Hotel", Category = "Boutique" },
+ new { HotelId = "1112", HotelName = "Old Century Hotel", Category = "Luxury" }
+};
-### [**Python**](#tab/sdk-python)
+// Upload documents
+IndexDocumentsResult result = await searchClient.IndexDocumentsAsync(
+ IndexDocumentsBatch.Upload(documents));
-The Azure SDK for Python provides the following APIs for simple and bulk document uploads into an index:
+Console.WriteLine($"Uploaded {result.Results.Count} documents");
+```
-+ [IndexDocumentsBatch](/python/api/azure-search-documents/azure.search.documents.indexdocumentsbatch)
-+ [SearchIndexingBufferedSender](/python/api/azure-search-documents/azure.search.documents.searchindexingbufferedsender)
+**Reference:** [SearchClient](/dotnet/api/azure.search.documents.searchclient), [IndexDocumentsAsync](/dotnet/api/azure.search.documents.searchclient.indexdocumentsasync), [IndexDocumentsBatch](/dotnet/api/azure.search.documents.models.indexdocumentsbatch)
-Code samples include:
+There are several samples that illustrate indexing in context of simple and large-scale indexing:
-+ [sample_crud_operations.py](https://github.com/Azure/azure-sdk-for-python/blob/main/sdk/search/azure-search-documents/samples/sample_crud_operations.py)
++ [**"Load an index"**](search-howto-dotnet-sdk.md#load-an-index) explains basic steps.
+
++ [**Azure.Search.Documents Samples - Indexing Documents**](https://github.com/Azure/azure-sdk-for-net/blob/main/sdk/search/Azure.Search.Documents/samples/Sample05_IndexingDocuments.md) from the Azure SDK team adds [SearchIndexingBufferedSender](/dotnet/api/azure.search.documents.searchindexingbufferedsender-1).
+
++ [**Tutorial: Index any data**](tutorial-optimize-indexing-push-api.md) couples batch indexing with testing strategies for determining an optimum size.
+ Be sure to check the [azure-search-vector-samples](https://github.com/Azure/azure-search-vector-samples) repo for code examples showing how to index vector fields.
@@ -175,6 +227,8 @@ The Azure SDK for JavaScript/TypeScript provides the following APIs for simple a
+ [IndexDocumentsBath](/javascript/api/%40azure/search-documents/indexdocumentsbatch)
+ [SearchIndexingBufferedSender](/javascript/api/%40azure/search-documents/searchindexingbufferedsender)
+**Reference:** [SearchClient](/javascript/api/@azure/search-documents/searchclient), [IndexDocumentsBatch](/javascript/api/@azure/search-documents/indexdocumentsbatch)
+
Code samples include:
+ See this quickstart for basic steps: [Quickstart: Full-text search](search-get-started-text.md?tabs=keyless%2Cwindows&pivots=javascript)
@@ -188,6 +242,8 @@ The Azure SDK for Java provides the following APIs for simple and bulk document
+ [indexactiontype enumerator](/java/api/com.azure.search.documents.models.indexactiontype)
+ [SearchIndexingBufferedSender](/java/api/com.azure.search.documents.searchclientbuilder.searchindexingbufferedsenderbuilder)
+**Reference:** [SearchClient](/java/api/com.azure.search.documents.searchclient), [IndexDocumentsBatch](/java/api/com.azure.search.documents.indexes.models)
+
Code samples include:
+ [IndexContentManagementExample.java](https://github.com/Azure/azure-sdk-for-java/blob/main/sdk/search/azure-search-documents/src/samples/java/com/azure/search/documents/IndexContentManagementExample.java)
@@ -196,9 +252,66 @@ Code samples include:
---
-## See also
+## Verify your data load
+
+After loading documents, verify the data is indexed correctly.
+
+### [**Portal**](#tab/verify-portal)
+
+1. In the Azure portal, open the search service **Overview** page.
+1. Select **Search explorer** from the command bar.
+1. Select your index from the dropdown.
+1. Select **Search** to run an empty query that returns all documents.
+1. Verify the document count and spot-check field values.
+
+### [**REST**](#tab/verify-rest)
+
+Use the [Get Document](/rest/api/searchservice/documents/get) API to retrieve a specific document by key:
+
+```http
+GET https://[service-name].search.windows.net/indexes/hotels-sample-index/docs/1111?api-version=2025-09-01
+api-key: [admin-key]
+```
+
+Expected response: HTTP 200 with the document JSON if found, or HTTP 404 if the key doesn't exist.
+
+### [**.NET**](#tab/verify-dotnet)
+
+```csharp
+// Verify document was indexed
+var document = await searchClient.GetDocumentAsync<Hotel>("1111");
+Console.WriteLine($"Found: {document.Value.HotelName}");
+```
+
+### [**Other SDKs**](#tab/verify-other)
+
+Use the `get_document()` (Python), `getDocument()` (JavaScript/Java) method on the SearchClient to retrieve a document by key.
+
+---
+
+## How data import works
+
+A search service accepts JSON documents that conform to the index schema. A search service can import and index plain text content and vector content in JSON documents.
+
++ Plain text content is retrieved from fields in the external data source, from metadata properties, or from enriched content that's generated by a [skillset](cognitive-search-working-with-skillsets.md). Skills can extract or infer textual descriptions from images and unstructured content.
+
++ Vector content is retrieved from a data source that provides it, or it's created by a skillset that implements [integrated vectorization](vector-search-integrated-vectorization.md) in an Azure AI Search indexer workload.
+
+You can prepare these documents yourself, but if content resides in a [supported data source](search-indexer-overview.md#supported-data-sources), running an [indexer](search-indexer-overview.md) or using an Import wizard can automate document retrieval, JSON serialization, and indexing.
+
+Once data is indexed, the physical data structures of the index are locked in. For guidance on what can and can't be changed, see [Update and rebuild an index](search-howto-reindex.md).
+
+Indexing isn't a background process. A search service balances indexing and query workloads, but if [query latency is too high](search-performance-analysis.md#impact-of-indexing-on-queries), you can either [add capacity](search-capacity-planning.md#add-or-remove-partitions-and-replicas) or identify periods of low query activity for loading an index.
+
+For more information, see [Data import strategies](search-what-is-data-import.md).
+
+## Troubleshoot common errors
-+ [Search indexes overview](search-what-is-an-index.md)
-+ [Data import overview](search-what-is-data-import.md)
-+ [Import data wizard overview](search-import-data-portal.md)
-+ [Indexers overview](search-indexer-overview.md)
+| Error | Cause | Solution |
+|-------|-------|----------|
+| HTTP 400 Bad Request | Document contains invalid data or missing required fields | Check the error message for the specific field. Ensure all required fields are present and data types match the index schema. |
+| HTTP 404 Not Found (merge) | Attempting to merge a document that doesn't exist | Use `mergeOrUpload` instead of `merge` if the document might not exist. |
+| HTTP 409 Conflict | Concurrent updates to the same document | Implement retry logic with exponential backoff. |
+| HTTP 413 Payload Too Large | Batch size exceeds limits | Reduce the number of documents per batch. Maximum batch size is 1,000 documents or 16 MB. |
+| HTTP 429 Too Many Requests | Quota exceeded | Check your service tier limits. Consider upgrading or creating a new index. |
+| HTTP 503 Service Unavailable | Service is under heavy load | Implement retry logic with exponential backoff. Reduce indexing request frequency. |
Summary
{
"modification_type": "minor update",
"modification_title": "Azure AI Searchへのデータローディング方法の更新"
}
Explanation
この変更は、articles/search/search-how-to-load-search-index.mdファイルに対する重要な更新を示しています。主なポイントは以下の通りです:
メタデータの更新: 文書の日付が「2026年1月13日」から「2026年1月20日」に更新され、ms.customとai-usageのメタデータ属性が追加されました。これにより、ドキュメントの鮮度と焦点が明確になります。
インポート手法の拡充: インポート方法がREST API、Azure SDK、Azureポータルを使用する方法として明記され、様々な選択肢がユーザーに提供されます。
前提条件の強化: Azure AI Searchサービスの作成や、インデックスの事前作成に関する詳細が追加され、利用者が準備すべき条件が明確になりました。権限に関する情報も詳述され、利用者がドキュメントをローディングするために必要な認証方法が具体化されました。
SDKの使用方法の具体化: 複数のプログラミング言語(Python、C#、JavaScript、Java)に対するSDKの使用方法が整理され、具体例が提供されることで、利用者が簡単に実装できるようになっています。
データローディングの確認とトラブルシューティング: データをローディングした後の確認方法が追加されており、成功した場合のHTTPレスポンス例や、一般的なエラーとその解決策も提供されています。これにより、ユーザーは自信を持ってローディングプロセスを実行し、問題を特定して対処することができるようになります。
全体として、142行の新しい内容が追加され、29行が削除され、合計171行の変更が行われることで、Azure AI Searchを利用したデータローディングに関する情報が大幅に改善され、ユーザーエクスペリエンスが向上しています。
articles/search/search-howto-complex-data-types.md
Diff
@@ -372,4 +372,4 @@ If you implement the workaround, be sure to test extensively.
Use an import wizard with sample data to guide you through creating, loading, and querying an index.
> [!div class="nextstepaction"]
-> [Quickstart: Create a search index in the Azure portal](search-get-started-portal.md)
+> [Quickstart: Full-text search in the Azure portal](search-get-started-portal.md)
Summary
{
"modification_type": "minor update",
"modification_title": "複雑なデータタイプに関するクイックスタートリンクの修正"
}
Explanation
この変更は、articles/search/search-howto-complex-data-types.mdファイルに対する小規模なアップデートを示しています。具体的には、次のような点が変更されました:
リンクの修正: 「クイックスタート: Azureポータルでの検索インデックスの作成」というリンクが「クイックスタート: Azureポータルでの全文検索」に変更されました。この修正により、ユーザーがより関連性の高いリソースにアクセスできるようになり、検索インデックスの作成に関する具体的なナビゲーションが提供されます。
全体の流れの整合性: リンク先の内容がより精確になり、ドキュメント全体の一致感とナビゲーションの利便性が向上します。
この変更は、合計で1行の追加と1行の削除が行われ、2行の変更があったことを示しています。明確な情報提供を通じて、読者が効率的に必要な知識にアクセスできることを目的としています。
articles/search/search-howto-reindex.md
Diff
@@ -8,18 +8,38 @@ ms.author: heidist
ms.service: azure-ai-search
ms.custom:
- ignite-2024
+ - dev-focus
ms.topic: how-to
-ms.date: 01/13/2026
+ms.date: 01/20/2026
+ai-usage: ai-assisted
ms.update-cycle: 180-days
---
# Update or rebuild an index in Azure AI Search
-This article explains how to update an existing index in Azure AI Search with schema changes or content changes through incremental indexing. It explains the circumstances under which rebuilds are required, and provides recommendations for mitigating the effects of rebuilds on ongoing query requests.
+This article explains how to update an existing index in Azure AI Search with schema changes or content changes through incremental indexing.
-During active development, it's common to drop and rebuild indexes when you're iterating over index design. Most developers work with a small representative sample of their data so that reindexing goes faster.
+> [!TIP]
+> To update documents immediately, skip to [Update content](#update-content). For schema changes, see [Update an index schema](#update-an-index-schema).
-For schema changes on applications already in production, we recommend creating and testing a new index that runs side by side an existing index. Use an [index alias](search-how-to-alias.md) to swap in the new index so that you can avoid changes your application code.
+## Prerequisites
+
++ An Azure AI Search service (any tier). [Create a service](search-create-service-portal.md) or [find an existing one](https://portal.azure.com/#blade/HubsExtension/BrowseResourceBlade/resourceType/Microsoft.Search%2FsearchServices).
+
++ An existing search index with documents. This article assumes you already [created an index](search-how-to-create-search-index.md) and [loaded documents](search-how-to-load-search-index.md).
+
++ Permissions to update or rebuild indexes:
+ + **Key-based authentication**: An [admin API key](search-security-api-keys.md) for your search service.
+ + **Role-based authentication**: [Search Index Data Contributor](search-security-rbac.md) role for document updates, or [Search Service Contributor](search-security-rbac.md) for schema changes.
+
++ For SDK development, install the Azure Search client library:
+ + Python: [azure-search-documents](https://pypi.org/project/azure-search-documents/)
+ + .NET: [Azure.Search.Documents](https://www.nuget.org/packages/Azure.Search.Documents/)
+ + JavaScript: [@azure/search-documents](https://www.npmjs.com/package/@azure/search-documents)
+ + Java: [azure-search-documents](https://central.sonatype.com/artifact/com.azure/azure-search-documents)
+
+> [!TIP]
+> During active development, it's common to drop and rebuild indexes when iterating over index design. Work with a small representative sample of data so that reindexing goes faster. For production schema changes, create and test a new index side by side, then use an [index alias](search-how-to-alias.md) to swap indexes without changing application code.
## Update content
@@ -45,11 +65,13 @@ The body of the request contains one or more documents to be indexed. Within the
}
```
+**Reference:** [Documents - Index](/rest/api/searchservice/documents)
+
+ First, use the APIs for loading documents, such as [Documents - Index (REST)](/rest/api/searchservice/documents) or an equivalent API in the Azure SDKs. For more information about indexing techniques, see [Load documents](search-how-to-load-search-index.md).
+ For a large update, batching (up to 1,000 documents per batch, or about 16 MB per batch, whichever limit comes first) is recommended and significantly improves indexing performance.
-+ Set the `@search.action` parameter on the API to determine the effect on existing documents.
++ Set the `@search.action` parameter on the API to determine the effect on existing documents. Use `mergeOrUpload` for incremental updates (most common), `delete` to remove documents, or `merge` for partial field updates on existing documents.
| Action | Effect |
|--------|--------|
@@ -190,6 +212,73 @@ GET {{baseUrl}}/indexes/hotels-vector-quickstart/docs('1')?api-version=2025-09-
api-key: {{apiKey}}
```
+**Reference:** [Documents - Index](/rest/api/searchservice/documents), [Lookup Document](/rest/api/searchservice/documents/get)
+
+### SDK examples
+
+The following examples show how to update documents using the Azure SDKs.
+
+### [**Python**](#tab/sdk-python)
+
+```python
+from azure.core.credentials import AzureKeyCredential
+from azure.search.documents import SearchClient
+
+# Set up the client
+service_name = "<your-search-service-name>"
+index_name = "hotels-sample-index"
+api_key = "<your-admin-api-key>"
+
+endpoint = f"https://{service_name}.search.windows.net"
+credential = AzureKeyCredential(api_key)
+client = SearchClient(endpoint=endpoint, index_name=index_name, credential=credential)
+
+# Update documents using merge_or_upload
+documents = [
+ {
+ "HotelId": "1",
+ "Description": "Updated description for the hotel.",
+ "Tags": ["updated", "renovated"]
+ }
+]
+
+result = client.merge_or_upload_documents(documents=documents)
+print(f"Updated {len(result)} document(s)")
+```
+
+**Reference:** [SearchClient](/python/api/azure-search-documents/azure.search.documents.searchclient), [merge_or_upload_documents](/python/api/azure-search-documents/azure.search.documents.searchclient#azure-search-documents-searchclient-merge-or-upload-documents)
+
+### [**C#**](#tab/sdk-csharp)
+
+```csharp
+using Azure;
+using Azure.Search.Documents;
+using Azure.Search.Documents.Models;
+
+// Set up the client
+string serviceName = "<your-search-service-name>";
+string indexName = "hotels-sample-index";
+string apiKey = "<your-admin-api-key>";
+
+Uri endpoint = new Uri($"https://{serviceName}.search.windows.net");
+AzureKeyCredential credential = new AzureKeyCredential(apiKey);
+SearchClient searchClient = new SearchClient(endpoint, indexName, credential);
+
+// Update documents using MergeOrUpload
+var batch = IndexDocumentsBatch.MergeOrUpload(
+ new[]
+ {
+ new Hotel { HotelId = "1", Description = "Updated description.", Tags = new[] { "updated", "renovated" } }
+ });
+
+IndexDocumentsResult result = await searchClient.IndexDocumentsAsync(batch);
+Console.WriteLine($"Updated {result.Results.Count} document(s)");
+```
+
+**Reference:** [SearchClient](/dotnet/api/azure.search.documents.searchclient), [IndexDocumentsAsync](/dotnet/api/azure.search.documents.searchclient.indexdocumentsasync), [IndexDocumentsBatch](/dotnet/api/azure.search.documents.models.indexdocumentsbatch)
+
+---
+
## Update an index schema
The index schema defines the physical data structures created on the search service, so there aren't many schema changes that you can make without incurring a full rebuild.
@@ -316,9 +405,24 @@ If you added or renamed a field, use [select](search-query-odata-select.md) to r
The Azure portal provides index size and vector index size. You can check these values after updating an index, but remember to expect a small delay as the service processes the change and to account for portal refresh rates, which can be a few minutes.
+## Troubleshoot reindexing
+
+The following table lists common issues when updating or rebuilding indexes and how to resolve them.
+
+| Issue | Cause | Resolution |
+| ----- | ----- | ---------- |
+| 207 response with mixed results | Some documents succeeded, others failed. | Check `statusCode` for each document in response. If 503, throttle requests and retry. |
+| 409 Version conflict | Concurrent updates to same document. | Serialize updates to the same document or implement retry with exponential backoff. |
+| 429 Too Many Requests | Storage quota exceeded or too many concurrent requests. | Delete documents to free space, or upgrade service tier for more capacity. |
+| 503 Service unavailable | Service under heavy load. | Wait and retry with exponential backoff. Consider reducing batch size. |
+| Document count unchanged after delete | Deletion is asynchronous. | Wait 2-3 minutes for background process to complete physical deletion. |
+| New field returns null | Field added to schema but documents not reindexed. | Run indexer or push updated documents to populate the new field. |
+| Schema change rejected | Attempted incompatible change (rename, type change). | Drop and rebuild the index. Use index alias to minimize downtime. |
+
## See also
+ [Indexer overview](search-indexer-overview.md)
++ [Delete documents from a search index](search-how-to-delete-documents.md)
+ [Index large data sets at scale](search-howto-large-index.md)
+ [Indexing in the Azure portal](search-import-data-portal.md)
+ [Azure SQL Database indexer](search-how-to-index-sql-database.md)
Summary
{
"modification_type": "minor update",
"modification_title": "Azure AI Searchインデックスの更新および再構築に関する情報の強化"
}
Explanation
この変更は、articles/search/search-howto-reindex.mdファイルに対する重要な更新を反映しています。主に次の内容が含まれています:
メタデータの更新: ドキュメントの日付が「2026年1月13日」から「2026年1月20日」に変更され、また、新たにai-usage属性が追加されました。これにより、文書がより時代に即したものとなります。
記事の構成と内容の強化:
- イントロダクションの内容が洗練され、インデックスの更新や再構築に関するより具体的なアドバイスが示されました。
- 「更新内容」セクションには、更新時に文書を即座に更新するためのヒントや、スキーマ変更に関する指示が追加されています。
前提条件の追加: インデックスの更新や再構築に必要なサービスや権限に関する情報が詳述され、新たに開発チーム向けのSDKインストールの手引きも含まれています。
SDKの使用例: PythonおよびC#に対する具体的なコード例が追加され、ユーザーがどのようにドキュメントを更新するかを理解しやすくしています。
トラブルシューティングセクションの追加: インデックス更新や再構築に際して直面する可能性のある問題とその解決策が表形式で提供され、ユーザーが迅速に問題を特定し対処しやすくなっています。
合計で109行の新規追加と5行の削除が行われ、114行の変更が加えられることで、Azure AI Searchのインデックスの管理に関する情報が大幅に充実しています。これにより、ユーザーの理解と実行能力が向上し、より効果的にサービスを利用できるようになります。
articles/search/search-more-like-this.md
Diff
@@ -25,7 +25,7 @@ The `moreLikeThis` parameter isn't supported for [complex types](search-howto-co
## Examples
-All following examples use the hotels sample from [Quickstart: Create a search index in the Azure portal](search-get-started-portal.md).
+All following examples use the hotels sample from [Quickstart: Full-text search in the Azure portal](search-get-started-portal.md).
### Simple query
Summary
{
"modification_type": "minor update",
"modification_title": "クイックスタートリンクの修正"
}
Explanation
この変更は、articles/search/search-more-like-this.mdファイルに対する小規模なアップデートを示しています。具体的には、次のような点が修正されました:
クイックスタートリンクの更新: 「クイックスタート: Azureポータルでの検索インデックスの作成」というリンクが「クイックスタート: Azureポータルでの全文検索」に変更されました。この修正により、ドキュメントがより正確な情報を提供し、ユーザーが必要なリソースに容易にアクセスできるようになります。
文書全体の整合性向上: このリンクの変更は、文書の関連性を高め、読者が具体的な手順に従いやすくすることで、効率的な情報取得を促進します。
この変更により、合計で1行の追加と1行の削除が行われ、2行の変更があったことが示されています。全体として、情報の正確さと整合性を維持するための重要な修正が行われました。
articles/search/search-query-create.md
Diff
@@ -8,8 +8,10 @@ ms.author: heidist
ms.service: azure-ai-search
ms.custom:
- ignite-2023
+ - dev-focus
ms.topic: how-to
-ms.date: 10/02/2025
+ms.date: 01/20/2026
+ai-usage: ai-assisted
ms.update-cycle: 180-days
---
@@ -19,9 +21,22 @@ If you're building a query for [full text search](search-lucene-query-architectu
## Prerequisites
++ An Azure AI Search service (any tier). [Create a service](search-create-service-portal.md) or [find an existing one](https://portal.azure.com/#blade/HubsExtension/BrowseResourceBlade/resourceType/Microsoft.Search%2FsearchServices).
+
+ A [search index](search-how-to-create-search-index.md) with string fields attributed as *searchable*. You can also use an [index alias](search-how-to-alias.md) as the endpoint of your query request.
-+ Read permissions on the search index. For read access, include a [query API key](search-security-api-keys.md) on the request, or give the caller [Search Index Data Reader](search-security-rbac.md) permissions.
++ Permissions to query the index:
+ + **Key-based authentication**: A [query API key](search-security-api-keys.md) for your search service.
+ + **Role-based authentication**: [Search Index Data Reader](search-security-rbac.md) role.
+
++ For SDK development, install the Azure Search client library:
+ + Python: [azure-search-documents](https://pypi.org/project/azure-search-documents/)
+ + .NET: [Azure.Search.Documents](https://www.nuget.org/packages/Azure.Search.Documents/)
+ + JavaScript: [@azure/search-documents](https://www.npmjs.com/package/@azure/search-documents)
+ + Java: [azure-search-documents](https://central.sonatype.com/artifact/com.azure/azure-search-documents)
+
+> [!TIP]
+> For a quick code example, skip to [Example of a full text query request](#example-of-a-full-text-query-request).
## Example of a full text query request
@@ -44,6 +59,8 @@ POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/
}
```
+**Reference:** [Search POST](/rest/api/searchservice/documents/search-post)
+
### Key points
+ **`search`** provides the match criteria, usually whole terms or phrases, with or without operators. Any field that is attributed as *searchable* in the index schema is within scope for a search operation.
@@ -94,6 +111,8 @@ In the Azure portal, when you open an index, you can work with Search Explorer a
}
```
+ **Reference:** [Search POST](/rest/api/searchservice/documents/search-post)
+
The following screenshot illustrates the query and response:
:::image type="content" source="media/search-explorer/search-explorer-full-text-query-hotels.png" alt-text="Screenshot of Search Explorer with a full text query.":::
@@ -120,6 +139,8 @@ POST https://[service name].search.windows.net/indexes/hotels-sample-index/docs/
}
```
+**Reference:** [Search POST](/rest/api/searchservice/documents/search-post)
+
**Continuation of Partial Search Responses**
Sometimes Azure AI Search can't return all the requested results in a single Search response. A partial response can happen for different reasons, such as when the query returns too many documents by not specifying $top, or by specifying a value for $ top that's too large. In such cases, Azure AI Search includes the @odata.nextLink annotation in the response body, and also @search.nextPageParameters if it was a POST request. You can use the values of these annotations to formulate another Search request to get the next part of the search response. This behavior is called a *continuation* of the original Search request, and the annotations are called *continuation tokens*. See the example in the Response section for details on the syntax of these annotations and where they appear in the response body.
@@ -131,14 +152,87 @@ The reasons why Azure AI Search might return continuation tokens are implementat
### [**Azure SDKs**](#tab/sdk-text-query)
-The following Azure SDKs provide a `SearchClient` that has methods for formulating query requests.
+The following examples show how to run a full-text query using the Azure SDKs.
+
+#### Python
+
+```python
+from azure.core.credentials import AzureKeyCredential
+from azure.search.documents import SearchClient
+
+# Set up the client
+service_name = "<your-search-service-name>"
+index_name = "hotels-sample-index"
+api_key = "<your-query-api-key>"
+
+endpoint = f"https://{service_name}.search.windows.net"
+credential = AzureKeyCredential(api_key)
+client = SearchClient(endpoint=endpoint, index_name=index_name, credential=credential)
+
+# Run a full-text search query
+results = client.search(
+ search_text="NY +view",
+ search_mode="all",
+ search_fields=["HotelName", "Description", "Address/City", "Tags"],
+ select=["HotelName", "Description", "Address/City", "Tags"],
+ top=10,
+ include_total_count=True
+)
+
+print(f"Total documents matching query: {results.get_count()}")
+for result in results:
+ print(f"Hotel: {result['HotelName']}")
+```
+
+**Reference:** [SearchClient](/python/api/azure-search-documents/azure.search.documents.searchclient), [search](/python/api/azure-search-documents/azure.search.documents.searchclient#azure-search-documents-searchclient-search)
+
+#### C#
+
+```csharp
+using Azure;
+using Azure.Search.Documents;
+using Azure.Search.Documents.Models;
+
+// Set up the client
+string serviceName = "<your-search-service-name>";
+string indexName = "hotels-sample-index";
+string apiKey = "<your-query-api-key>";
+
+Uri endpoint = new Uri($"https://{serviceName}.search.windows.net");
+AzureKeyCredential credential = new AzureKeyCredential(apiKey);
+SearchClient searchClient = new SearchClient(endpoint, indexName, credential);
+
+// Run a full-text search query
+SearchOptions options = new SearchOptions
+{
+ SearchMode = SearchMode.All,
+ IncludeTotalCount = true,
+ Size = 10
+};
+options.SearchFields.Add("HotelName");
+options.SearchFields.Add("Description");
+options.Select.Add("HotelName");
+options.Select.Add("Description");
+
+SearchResults<SearchDocument> response = await searchClient.SearchAsync<SearchDocument>("NY +view", options);
+
+Console.WriteLine($"Total documents matching query: {response.TotalCount}");
+await foreach (SearchResult<SearchDocument> result in response.GetResultsAsync())
+{
+ Console.WriteLine($"Hotel: {result.Document["HotelName"]}");
+}
+```
+
+**Reference:** [SearchClient](/dotnet/api/azure.search.documents.searchclient), [SearchAsync](/dotnet/api/azure.search.documents.searchclient.searchasync), [SearchOptions](/dotnet/api/azure.search.documents.searchoptions)
+
+#### Additional SDK resources
| Azure SDK | Client | Examples |
-|-----------|--------|----------|
+| --------- | ------ | -------- |
| .NET | [SearchClient](/dotnet/api/azure.search.documents.searchclient) | [DotNetHowTo](https://github.com/Azure-Samples/search-dotnet-getting-started/tree/master/DotNetHowTo) |
| Java | [SearchClient](/java/api/com.azure.search.documents.searchclient) | [SearchForDynamicDocumentsExample.java](https://github.com/Azure/azure-sdk-for-java/blob/azure-search-documents_11.1.3/sdk/search/azure-search-documents/src/samples/java/com/azure/search/documents/SearchForDynamicDocumentsExample.java) |
| JavaScript | [SearchClient](/javascript/api/@azure/search-documents/searchclient) | [SDK examples](/javascript/api/overview/azure/search-documents-readme?view=azure-node-latest#examples&preserve-view=true) |
-| Python | [SearchClient](/python/api/azure-search-documents/azure.search.documents.searchclient) | [sample_simple_query.py ](https://github.com/Azure/azure-sdk-for-python/blob/7cd31ac01fed9c790cec71de438af9c45cb45821/sdk/search/azure-search-documents/samples/sample_simple_query.py) |
+| Python | [SearchClient](/python/api/azure-search-documents/azure.search.documents.searchclient) | [sample_simple_query.py](https://github.com/Azure/azure-sdk-for-python/blob/7cd31ac01fed9c790cec71de438af9c45cb45821/sdk/search/azure-search-documents/samples/sample_simple_query.py) |
---
@@ -180,9 +274,25 @@ During indexing, the search engine uses a text analyzer on strings to maximize t
The key point is that what you think your index contains, and what's actually in it, can be different. If queries don't return expected results, you can inspect the tokens created by the analyzer through the [Analyze Text (REST API)](/rest/api/searchservice/indexes/analyze). For more information about tokenization and the effect on queries, see [Partial term search and patterns with special characters](search-query-partial-matching.md).
+## Troubleshoot queries
+
+The following table lists common query issues and how to resolve them.
+
+| Issue | Cause | Resolution |
+| ----- | ----- | ---------- |
+| Empty results | No documents match query terms. | Verify field is marked *searchable* in schema. Use [Analyze Text API](/rest/api/searchservice/indexes/analyze) to check tokenization. |
+| Unexpected results | Query matches unintended fields. | Use `searchFields` to limit which fields are searched. |
+| Too many results | Query is too broad. | Add filters, use `searchMode=all`, or add required terms with `+` operator. |
+| Results not ranked as expected | Relevance scoring doesn't match expectations. | Consider [scoring profiles](index-add-scoring-profiles.md) or [semantic ranking](semantic-search-overview.md). |
+| Partial matches missing | Analyzer tokenized differently than expected. | Use wildcard (`*`) suffix or check analyzer behavior with Analyze Text API. |
+| Filter not working | Field isn't marked *filterable*. | Update index schema to set `filterable: true` on the field. |
+
## Related content
Now that you have a better understanding of how query requests work, try the following quickstarts for hands-on experience.
+ [Search explorer](search-explorer.md)
+ [Quickstart: Full-text search](search-get-started-text.md)
++ [Simple query syntax](query-simple-syntax.md)
++ [Full Lucene query syntax](query-lucene-syntax.md)
++ [OData filter syntax](query-odata-filter-orderby-syntax.md)
Summary
{
"modification_type": "minor update",
"modification_title": "検索クエリの作成に関する情報を強化"
}
Explanation
この変更は、articles/search/search-query-create.mdファイルに対する大幅な更新を反映しています。主な変更内容は次の通りです:
メタデータの追加および更新: ドキュメントの日付が「2025年10月2日」から「2026年1月20日」に変更され、新しい属性ai-usageが追加されました。
前提条件の明確化: Azure AI Searchサービスの tierに関する具体的な情報が追加され、ユーザーがサービスを作成または見つけるためのガイドへのリンクも含まれています。また、クエリのための権限についても詳細が述べられ、異なる認証方法に基づく具体的な説明が追加されています。
具体例の追加: フルテキストクエリの実行に関するコード例がPythonとC#について新たに紹介され、ユーザーが実際のコードに基づいてクエリを実行できるように支援しています。各言語のリファレンスも明示されています。
トラブルシューティングセクションの追加: 一般的なクエリの問題とその解決方法が表形式で整理され、ユーザーが遭遇する可能性のある問題に迅速に対応できるようになっています。
関連コンテンツの案内: クエリリクエストに関する理解を深めるための関連クイックスタートへのリンクが追加され、関連ドキュメントを参照しながらスキルを向上させることが示唆されています。
この修正により、合計で115行の新しい追加と5行の削除があり、合計で120行の変更が行われました。全体として、ユーザーがAzure AI Searchでクエリを作成するためのリソースとガイダンスが大幅に充実し、利便性が向上しています。
articles/search/search-query-simple-examples.md
Diff
@@ -22,7 +22,7 @@ In Azure AI Search, the [simple query syntax](query-simple-syntax.md) invokes th
## Hotels sample index
-The following queries are based on the hotels-sample-index, which you can create by following the instructions in [Quickstart: Create a search index in the Azure portal](search-get-started-portal.md).
+The following queries are based on the hotels-sample-index, which you can create by following the instructions in [Quickstart: Full-text search in the Azure portal](search-get-started-portal.md).
Example queries are articulated using the REST API and POST requests. You can paste and run them in a [REST client](search-get-started-text.md). Or, use the JSON view of [Search explorer](search-explorer.md) in the Azure portal. In JSON view, you can paste in the query examples shown here in this article.
Summary
{
"modification_type": "minor update",
"modification_title": "クイックスタートリンクの修正"
}
Explanation
この変更は、articles/search/search-query-simple-examples.mdファイルに対する小規模な更新を示しています。具体的な改修内容は次のとおりです:
クイックスタートリンクの更新: ドキュメント内で言及されているクエリは、hotels-sample-indexに基づいており、以前は「クイックスタート: Azureポータルでの検索インデックスの作成」というリンクが使用されていましたが、「クイックスタート: Azureポータルでの全文検索」に修正されました。この変更により、ユーザーがより正確なリソースに基づいて作業を進められるようになります。
関係性の強化: このリンクの修正は、検索クエリの具体例と手順を実行するための情報が最新であることを保証し、ドキュメント全体の整合性を向上させます。
この修正に伴い、合計で1行の追加と1行の削除が行われ、2行の変更が記録されています。全体として、ユーザーが検索インデックスを作成し、サンプルクエリを実行する際の資料が改善されています。
articles/search/search-security-api-keys.md
Diff
@@ -6,80 +6,116 @@ manager: nitinme
author: HeidiSteen
ms.author: heidist
ms.service: azure-ai-search
+ai-usage: ai-assisted
ms.custom:
- ignite-2023
+ - dev-focus
ms.topic: how-to
-ms.date: 12/01/2025
+ms.date: 01/20/2026
ms.update-cycle: 365-days
-#customer intent: I want to learn how to connect to Azure AI Search using API keys so that I can authenticate inbound requests to my search service.
---
# Connect to Azure AI Search using keys
-Azure AI Search supports both identity-based and key-based authentication for connections to your search service. An API key is a unique string composed of 52 randomly generated numbers and letters.
+Azure AI Search supports both identity-based and key-based authentication (default) for connections to your search service.
-In your source code, you can directly specify the API key in a request header. Alternatively, you can store it as an [environment variable](/azure/ai-services/cognitive-services-environment-variables) or app setting in your project and then reference the variable in the request.
+A request made to a search service endpoint is accepted if both the request and the API key are valid and if the search service is configured to allow API keys on a request.
> [!IMPORTANT]
-> When you create a search service, key-based authentication is the default, but it's not the most secure option. We recommend that you replace it with [role-based access](search-security-enable-roles.md).
+> When you create a search service, key-based authentication is the default, but it's not the most secure option. We recommend that you replace it with [role-based access](search-security-enable-roles.md).
-## Enabled by default
+## Prerequisites
-Key-based authentication is the default for new search services. A request made to a search service endpoint is accepted if both the request and the API key are valid and if the search service is configured to allow API keys on a request.
+You must be an Owner, Contributor, or [Search Service Contributor](/azure/role-based-access-control/built-in-roles#search-service-contributor) to view or manage keys.
-In the Azure portal, you specify authentication on the **Settings** > **Keys** page. Either **API keys** or **Both** provides key support.
+## Enabled by default
+
+In the Azure portal, authentication is specified on the **Settings** > **Keys** page. Options set to either **API keys** (default) or **Both** allow API keys on a request.
:::image type="content" source="media/search-security-overview/api-keys-enabled.png" alt-text="Screenshot of the Keys page in the Azure portal.":::
## Types of keys
+An API key is a unique string composed of 52 randomly generated numbers and letters. Visually, there's no distinction between an admin key or query key. If you lose track of what type of key is specified in your application, you can [check the key values in the Azure portal](#find-existing-keys).
+
There are two kinds of keys used for authenticating a request:
| Type | Permission level | How it's created | Maximum |
-|------|------------------|---------|---------|
-| Admin | Full access (read-write) for all content operations | Two admin keys, referred to as *primary* and *secondary* keys in the Azure portal, are generated when the service is created and can be individually regenerated on demand. | 2 <sup>1</sup> |
+| ------ | ------------------ | --------- | --------- |
+| Admin | Full access (read-write) for all data plane (content) operations | Two admin keys, *primary* and *secondary*, are generated when the service is created and can be individually regenerated on demand. Having two allows you to roll over one key while using the second key for continued access to the service. | 2 |
| Query | Read-only access, scoped to the documents collection of a search index | One query key is generated with the service. More can be created on demand by a search service administrator. | 50 |
-<sup>1</sup> Having two allows you to roll over one key while using the second key for continued access to the service.
+## Find existing keys
-Visually, there's no distinction between an admin key or query key. Both keys are strings composed of 52 randomly generated alpha-numeric characters. If you lose track of what type of key is specified in your application, you can [check the key values in the Azure portal](#find-existing-keys).
+You can view and manage API keys using the [Azure portal](https://portal.azure.com), [PowerShell](/powershell/module/az.search), [Azure CLI](/cli/azure/search), or [REST API](/rest/api/searchmanagement/).
-### Key-to-role mapping
+### [**Portal**](#tab/portal-find)
-This article is about API keys. However, if you want to transition to role-based access, it's helpful to understand how keys map to [built-in roles in Azure AI Search](search-security-rbac.md#built-in-roles-used-in-search):
+1. Sign in to the [Azure portal](https://portal.azure.com) and [find your search service](https://portal.azure.com/#blade/HubsExtension/BrowseResourceBlade/resourceType/Microsoft.Search%2FsearchServices).
-+ An admin key corresponds to the **Search Service Contributor** and **Search Index Data Contributor** roles.
-+ A query key corresponds to the **Search Index Data Reader** role.
+1. From the left pane, select **Settings** > **Keys** to view admin and query keys.
-## Permissions to view or manage keys
+ :::image type="content" source="media/search-manage/azure-search-view-keys.png" alt-text="Screenshot of a portal page showing API keys." border="true":::
-Permissions for viewing and managing API keys are conveyed through [role assignments](search-security-rbac.md). Members of the following roles can view and regenerate keys:
+### [**REST API**](#tab/rest-find)
-+ Owner
-+ Contributor
-+ [Search Service Contributor](/azure/role-based-access-control/built-in-roles#search-service-contributor)
-+ Administrator and co-administrator (classic)
+Run the following commands to return admin and query API keys, respectively. For help with REST, see [Manage your Azure AI Search service with REST APIs](search-manage-rest.md).
-The following roles don't have access to API keys:
+1. Return admin keys:
-+ Reader
-+ Search Index Data Contributor
-+ Search Index Data Reader
+ ```rest
+ POST https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resource-group}}/providers//Microsoft.Search/searchServices/{{search-service-name}}/listAdminKeys?api-version=2025-05-01
+ ```
-## Find existing keys
+1. Return query keys:
-You can view and manage API keys using the [Azure portal](https://portal.azure.com), [PowerShell](/powershell/module/az.search), [Azure CLI](/cli/azure/search), or [REST API](/rest/api/searchmanagement/).
+ ```rest
+ POST https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resource-group}}/providers//Microsoft.Search/searchServices/{{search-service-name}}/listAdminKeys?api-version=2025-05-01
+ ```
-### [**Portal**](#tab/portal-find)
+**Reference:** [Admin Keys - Get](/rest/api/searchmanagement/admin-keys/get), [Query Keys - List By Search Service](/rest/api/searchmanagement/query-keys/list-by-search-service)
-1. Sign in to the [Azure portal](https://portal.azure.com) and [find your search service](https://portal.azure.com/#blade/HubsExtension/BrowseResourceBlade/resourceType/Microsoft.Search%2FsearchServices).
+### [**Python**](#tab/python-find)
-1. From the left pane, select **Settings** > **Keys** to view admin and query keys.
+Use the Azure SDK for Python to retrieve API keys programmatically. Install the management SDK:
-:::image type="content" source="media/search-manage/azure-search-view-keys.png" alt-text="Screenshot of a portal page showing API keys." border="true":::
+```bash
+pip install azure-mgmt-search azure-identity
+```
+
+Run the following code to return admin and query API keys:
+
+```python
+import os
+from azure.identity import DefaultAzureCredential
+from azure.mgmt.search import SearchManagementClient
+
+# Set up variables
+subscription_id = os.environ["AZURE_SUBSCRIPTION_ID"]
+resource_group = "your-resource-group"
+search_service_name = "your-search-service"
+
+# Create the management client
+credential = DefaultAzureCredential()
+client = SearchManagementClient(credential, subscription_id)
+
+# Get admin keys
+admin_keys = client.admin_keys.get(resource_group, search_service_name)
+print(f"Primary admin key: {admin_keys.primary_key}")
+print(f"Secondary admin key: {admin_keys.secondary_key}")
+
+# Get query keys
+query_keys = client.query_keys.list_by_search_service(resource_group, search_service_name)
+for key in query_keys:
+ print(f"Query key '{key.name}': {key.key}")
+```
+
+**Reference:** [SearchManagementClient](/python/api/azure-mgmt-search/azure.mgmt.search.searchmanagementclient) | [AdminKeys](/python/api/azure-mgmt-search/azure.mgmt.search.operations.adminkeysoperations) | [QueryKeys](/python/api/azure-mgmt-search/azure.mgmt.search.operations.querykeysoperations)
### [**PowerShell**](#tab/azure-ps-find)
+Run the following commands to return admin and query API keys, respectively. For help with PowerShell, see [Manage your Azure AI Search service using PowerShell](search-manage-powershell.md).
+
1. Install the `Az.Search` module:
```azurepowershell
@@ -98,38 +134,40 @@ You can view and manage API keys using the [Azure portal](https://portal.azure.c
Get-AzSearchQueryKey -ResourceGroupName <resource-group-name> -ServiceName <search-service-name>
```
-### [**Azure CLI**](#tab/azure-cli-find)
-Use the following commands to return admin and query API keys, respectively:
+### [**Azure CLI**](#tab/azure-cli-find)
-```azurecli
-az search admin-key show --resource-group <myresourcegroup> --service-name <myservice>
+Run the following commands to return admin and query API keys, respectively. For help with the Azure CLI, see [Manage your Azure AI Search service using the Azure CLI](search-manage-azure-cli.md).
-az search query-key list --resource-group <myresourcegroup> --service-name <myservice>
-```
-
-### [**REST API**](#tab/rest-find)
-
-Use [List Admin Keys](/rest/api/searchmanagement/admin-keys/get) or [List Query Keys](/rest/api/searchmanagement/query-keys/list-by-search-service) in the Management REST API to return API keys.
+1. Return admin keys:
-You must have a [valid role assignment](#permissions-to-view-or-manage-keys) to return or update API keys. See [Manage your Azure AI Search service with REST APIs](search-manage-rest.md) for guidance on meeting role requirements using the REST APIs.
+ ```azurecli
+ az search admin-key show --resource-group <myresourcegroup> --service-name <myservice>
+ ```
-```rest
-POST https://management.azure.com/subscriptions/{{subscriptionId}}/resourceGroups/{{resource-group}}/providers//Microsoft.Search/searchServices/{{search-service-name}}/listAdminKeys?api-version=2025-05-01
-```
+1. Return query keys:
+ ```azurecli
+ az search query-key list --resource-group <myresourcegroup> --service-name <myservice>
+ ```
---
## Use keys on connections
-API keys are used for data plane (content) requests, such as creating or accessing an index or any other request that's represented in the [Search Service REST APIs](/rest/api/searchservice/).
-
-You can use either an API key or [roles](search-security-rbac.md) for control plane (service) requests. When you use an API key:
+Key-based authentication is used only for data plane (content) requests, such as creating or querying index and any other action that's performed using the [Search Service REST API](/rest/api/searchservice/operation-groups).
-- Admin keys are used for creating, modifying, or deleting objects. Admin keys are also used to GET object definitions and system information, such as [LIST Indexes](/rest/api/searchservice/indexes/list) or [GET Service Statistics](/rest/api/searchservice/get-service-statistics/get-service-statistics).
+In your source code, you can directly specify the API key in a request header. Alternatively, you can store it as an [environment variable](/azure/ai-services/cognitive-services-environment-variables) or app setting in your project and then reference the variable in the request.
+- Admin keys are used for creating, modifying, or deleting objects.
+- Admin keys are also used to GET object definitions and system information, such as [LIST Indexes](/rest/api/searchservice/indexes/list) or [GET Service Statistics](/rest/api/searchservice/get-service-statistics/get-service-statistics).
- Query keys are typically distributed to client applications that issue queries.
+### [**Portal**](#tab/portal-use)
+
+Recall that key authentication is enabled by default and supports data plane operations such as indexing and queries.
+
+However, if you [disable API keys](search-security-enable-roles.md#disable-api-key-authentication) and set up role assignments, the Azure portal uses role assignments instead.
+
### [**REST API**](#tab/rest-use)
Set an admin key in the request header. You can't pass admin keys on the URI or in the body of the request.
@@ -172,6 +210,7 @@ It's a best practice to set the API key as an environment variable, but for simp
```python
# Import libraries
+from azure.search.documents import SearchClient
from azure.core.credentials import AzureKeyCredential
from azure.identity import DefaultAzureCredential, AzureAuthorityHosts
@@ -224,12 +263,6 @@ Invoke-RestMethod -Uri $url -Headers $headers | ConvertTo-Json
More script examples for other operations can be found at [Quickstart: Create an Azure AI Search index in PowerShell using REST APIs](search-get-started-text.md).
-### [**Portal**](#tab/portal-use)
-
-Recall that key authentication is enabled by default and supports data plane operations such as indexing and queries.
-
-However, if you [disable API keys](search-security-enable-roles.md#disable-api-key-authentication) and set up role assignments, the Azure portal uses role assignments instead.
-
---
## Create query keys
@@ -248,24 +281,24 @@ Restricting access and operations in client apps is essential to safeguarding th
:::image type="content" source="media/search-security-overview/create-query-key.png" alt-text="Screenshot of the query key management options." border="true":::
-### [**PowerShell**](#tab/azure-ps-query)
-
-A script example showing API key usage can be found at [Create or delete query keys](search-manage-powershell.md#create-or-delete-query-keys).
-
-### [**Azure CLI**](#tab/azure-cli-query)
-
-A script example showing query key usage can be found at [Create or delete query keys](search-manage-azure-cli.md#create-or-delete-query-keys).
-
### [**REST API**](#tab/rest-query)
Use [Create Query Keys](/rest/api/searchmanagement/query-keys/create) in the Management REST API.
-You must have a [valid role assignment](#permissions-to-view-or-manage-keys) to create or manage API keys. See [Manage your Azure AI Search service with REST APIs](search-manage-rest.md) for guidance on meeting role requirements using the REST APIs.
+You must have a valid role assignment to create or manage API keys. See [Manage your Azure AI Search service with REST APIs](search-manage-rest.md) for guidance on meeting role requirements using the REST APIs.
```rest
POST https://management.azure.com/subscriptions/{subscriptionId}/resourceGroups/{resourceGroupName}/providers/Microsoft.Search/searchServices/{searchServiceName}/createQueryKey/{name}?api-version=2025-05-01
```
+### [**PowerShell**](#tab/azure-ps-query)
+
+A script example showing API key usage can be found at [Create or delete query keys](search-manage-powershell.md#create-or-delete-query-keys).
+
+### [**Azure CLI**](#tab/azure-cli-query)
+
+A script example showing query key usage can be found at [Create or delete query keys](search-manage-azure-cli.md#create-or-delete-query-keys).
+
---
<a name="regenerate-admin-keys"></a>
@@ -292,6 +325,13 @@ You can still access the service through the Azure portal or programmatically. M
After you create new keys via portal or management layer, access is restored to your content (indexes, indexers, data sources, synonym maps) once you provide those keys on requests.
+## Migrate from keys to roles
+
+If you want to transition to role-based access, it's helpful to understand how keys map to [built-in roles in Azure AI Search](search-security-rbac.md#built-in-roles-used-in-search):
+
++ An admin key corresponds to the **Search Service Contributor** and **Search Index Data Contributor** roles.
++ A query key corresponds to the **Search Index Data Reader** role.
+
## Secure keys
Use role assignments to restrict access to API keys.
@@ -308,7 +348,7 @@ It's not possible to use [customer-managed key encryption](search-security-manag
## Best practices
-+ For production workloads, switch to [Microsoft Entra ID and role-based access](keyless-connections.md). Alternatively, if you want to continue using API keys, be sure to always monitor [who has access to your API keys](#secure-keys) and [regenerate API keys](#regenerate-admin-keys) on a regular cadence.
++ For production workloads, switch to [Microsoft Entra ID and role-based access](search-security-rbac-client-code.md). Alternatively, if you want to continue using API keys, be sure to always monitor [who has access to your API keys](#secure-keys) and [regenerate API keys](#regenerate-admin-keys) on a regular cadence.
+ Only use API keys if data disclosure isn't a risk (for example, when using sample data) and if you're operating behind a firewall. Exposing API keys puts both your data and your search service at risk of unauthorized use.
Summary
{
"modification_type": "minor update",
"modification_title": "APIキーに関するドキュメントの更新"
}
Explanation
この変更は、articles/search/search-security-api-keys.mdファイルに関する大幅な更新が行われたことを反映しています。主な変更内容は以下の通りです:
メタデータの更新: ドキュメントの日付が「2025年12月1日」から「2026年1月20日」に変更され、新しい属性ai-usageが追加されました。これにより、文書の最新性と関連性が向上しています。
コンテンツの増強: 認証の種類や前提条件に関する詳細情報が追加され、APIキーの用途や管理方法が拡充されています。また、Azureポータル内での認証設定に関する説明がより明確になっています。
APIキーの種類と機能の詳細な記述: 管理キーとクエリーキーの詳細がテーブル形式で整理され、それぞれの役割や作成方法について詳しく説明されています。このセクションは、ユーザーがどのキーを使用すべきかを判断するのに役立ちます。
Azure SDKやCLI、パワーシェルを用いたキーの管理方法: APIキーを取得するための具体的なコード例が追加され、プログラム的にキーを管理するための具体的な手順が示されています。
ベストプラクティスの強調: 本番環境での使用を念頭に置いた安全性に関する提案が更新され、Microsoft Entra IDを利用したロールベースのアクセス制御への移行が推奨されています。
この修正によって、106行の新しい内容が追加され、66行が削除される形で、合計172行の変更が行われました。全体として、APIキーの管理とセキュリティに関する情報が大幅に豊富になり、ユーザーがより安全にAzure AI Searchを利用できるよう支援しています。
articles/search/search-security-rbac-client-code.md
Diff
@@ -1,49 +1,57 @@
---
-title: Use keyless connections in search apps
+title: Configure apps for role-based security
description: Use keyless connections with an Azure Identity library for Microsoft Entra ID authentication and authorization with Azure AI Search.
ms.topic: how-to
-ms.date: 06/17/2025
+ms.date: 01/20/2026
ms.service: azure-ai-search
ms.update-cycle: 180-days
author: HeidiSteen
ms.author: heidist
-ms.custom: devx-track-dotnet, devx-track-extended-java, devx-track-js, devx-track-python, Keyless-dotnet, Keyless-java, Keyless-js, Keyless-python, build-2024-intelligent-apps
+ms.custom: devx-track-dotnet, devx-track-extended-java, devx-track-js, devx-track-python, Keyless-dotnet, Keyless-java, Keyless-js, Keyless-python, build-2024-intelligent-apps, dev-focus
+ai-usage: ai-assisted
#customer intent: As a developer, I want to use keyless connections so that I don't leak secrets.
---
# Connect your app to Azure AI Search using identities
In your application code, you can set up a keyless connection to Azure AI Search that uses Microsoft Entra ID and roles for authentication and authorization. Application requests to most Azure services must be authenticated with keys or keyless connections. Developers must be diligent to never expose the keys in an unsecure location. Anyone who gains access to the key is able to authenticate to the service. Keyless authentication offers improved management and security benefits over the account key because there's no key (or connection string) to store.
-Keyless connections are enabled with the following steps:
+This article explains how to use `DefaultAzureCredential` in your application code.
+
+To implement keyless connections in your code, follow these steps:
* Enable role-based access on your search service
* Set environment variables, as needed.
* Use an Azure Identity library credential type to create an Azure AI Search client object.
## Prerequisites
-The following steps need to be completed for both local development and production workloads:
++ [Azure AI Search](search-create-service-portal.md), any region but it must be a billable tier (basic or higher).
+
++ [Role-based access enabled](search-security-enable-roles.md) on your search service.
-* [Create an AI Search resource](search-create-service-portal.md)
-* [Enable role-based access on your search service](search-security-enable-roles.md)
-* [Install Azure Identity client library](#install-azure-identity-client-library)
++ Role assignments on Azure AI Search. Assign these roles to your identity:
+ + **Search Service Contributor** and **Search Index Data Contributor** for local development (full access)
+ + **Search Index Data Reader** for production read-only queries
+
+ For step-by-step instructions, see [Assign roles for development](search-security-rbac.md#assign-roles-for-development).
## Install Azure Identity client library
To use a keyless approach, update your AI Search enabled code with the Azure Identity client library.
### [.NET](#tab/csharp)
-Install the [Azure Identity client library for .NET](https://www.nuget.org/packages/Azure.Identity):
+Install the [Azure Identity client library for .NET](https://www.nuget.org/packages/Azure.Identity) and the [Azure Search Documents client library](https://www.nuget.org/packages/Azure.Search.Documents):
```dotnetcli
dotnet add package Azure.Identity
+dotnet add package Azure.Search.Documents
```
### [Java](#tab/java)
-Install the [Azure Identity client library for Java](https://mvnrepository.com/artifact/com.azure/azure-identity) with the following POM file:
+Install the [Azure Identity client library for Java](https://mvnrepository.com/artifact/com.azure/azure-identity) and the [Azure Search Documents client library](https://mvnrepository.com/artifact/com.azure/azure-search-documents) with the following POM file:
```xml
<dependencyManagement>
@@ -53,24 +61,29 @@ Install the [Azure Identity client library for Java](https://mvnrepository.com/a
<artifactId>azure-identity</artifactId>
<version>1.15.1</version>
</dependency>
+ <dependency>
+ <groupId>com.azure</groupId>
+ <artifactId>azure-search-documents</artifactId>
+ <version>11.7.0</version>
+ </dependency>
</dependencies>
</dependencyManagement>
```
### [JavaScript](#tab/javascript)
-Install the [Azure Identity client library for JavaScript](https://www.npmjs.com/package/@azure/identity):
+Install the [Azure Identity client library for JavaScript](https://www.npmjs.com/package/@azure/identity) and the [Azure Search Documents client library](https://www.npmjs.com/package/@azure/search-documents):
```console
-npm install --save @azure/identity
+npm install --save @azure/identity @azure/search-documents
```
### [Python](#tab/python)
-Install the [Azure Identity client library for Python](https://pypi.org/project/azure-identity/):
+Install the [Azure Identity client library for Python](https://pypi.org/project/azure-identity/) and the [Azure Search Documents client library](https://pypi.org/project/azure-search-documents/):
```console
-pip install azure-identity
+pip install azure-identity azure-search-documents
```
---
@@ -101,6 +114,8 @@ SearchClient searchClient = new(new Uri(endpoint), indexName, credential);
SearchIndexClient searchIndexClient = new(endpoint, credential);
```
+**Reference:** [SearchClient](/dotnet/api/azure.search.documents.searchclient), [SearchIndexClient](/dotnet/api/azure.search.documents.indexes.searchindexclient), [DefaultAzureCredential](/dotnet/api/azure.identity.defaultazurecredential)
+
### [Java](#tab/java)
For more information on `DefaultAzureCredential` for Java, see [Azure Identity client library for Java](/java/api/overview/azure/identity-readme#defaultazurecredential).
@@ -145,6 +160,8 @@ SearchIndexAsyncClient searchIndexAsyncClient = new SearchIndexClientBuilder()
.buildAsyncClient();
```
+**Reference:** [SearchClient](/java/api/com.azure.search.documents.searchclient), [SearchIndexClient](/java/api/com.azure.search.documents.indexes.searchindexclient), [DefaultAzureCredential](/java/api/com.azure.identity.defaultazurecredential)
+
### [JavaScript](#tab/javascript)
For more information on `DefaultAzureCredential` for JavaScript, see [Azure Identity client library for JavaScript](/javascript/api/overview/azure/identity-readme#defaultazurecredential).
@@ -175,6 +192,8 @@ const indexClient = new SearchIndexClient(
);
```
+**Reference:** [SearchClient](/javascript/api/@azure/search-documents/searchclient), [SearchIndexClient](/javascript/api/@azure/search-documents/searchindexclient), [DefaultAzureCredential](/javascript/api/@azure/identity/defaultazurecredential)
+
### [Python](#tab/python)
For more information on `DefaultAzureCredential` for Python, see [Azure Identity client library for Python](/python/api/overview/azure/identity-readme#defaultazurecredential).
@@ -204,10 +223,57 @@ search_index_client = SearchIndexClient(
audience=audience)
```
+**Reference:** [SearchClient](/python/api/azure-search-documents/azure.search.documents.searchclient), [SearchIndexClient](/python/api/azure-search-documents/azure.search.documents.indexes.searchindexclient), [DefaultAzureCredential](/python/api/azure-identity/azure.identity.defaultazurecredential)
+
+---
+
+## Verify your connection
+
+After setting up the client, verify your connection by running a simple operation. The following example lists indexes on your search service:
+
+### [.NET](#tab/csharp)
+
+```csharp
+// List indexes to verify connection
+var indexes = searchIndexClient.GetIndexNames();
+foreach (var name in indexes)
+{
+ Console.WriteLine(name);
+}
+```
+
+### [Java](#tab/java)
+
+```java
+// List indexes to verify connection
+searchIndexClient.listIndexNames().forEach(System.out::println);
+```
+
+### [JavaScript](#tab/javascript)
+
+```javascript
+// List indexes to verify connection
+for await (const name of indexClient.listIndexesNames()) {
+ console.log(name);
+}
+```
+
+### [Python](#tab/python)
+
+```python
+# List indexes to verify connection
+for index in search_index_client.list_index_names():
+ print(index)
+```
+
+---
+
+A successful connection prints the names of your indexes (or an empty list if no indexes exist). If you receive an authentication error, verify that role-based access is enabled and your identity has the required role assignments.
+
The default authority is Azure public cloud. Custom `audience` values for sovereign or specialized clouds include:
* `https://search.azure.us` for Azure Government
-* `https://search.azure.cn` for Azure China
+* `https://search.azure.cn` for Azure operated by 21Vianet
* `https://search.microsoftazure.de` for Azure Germany
---
@@ -231,19 +297,25 @@ Find your personal identity with one of the following tools. Use that identity a
#### [Azure CLI](#tab/azure-cli)
+Replace placeholders `<role-name>`, `<identity-id>`, `<subscription-id>`, and `<resource-group-name>` with your actual values in the following commands.
+
1. Sign in to Azure CLI.
```azurecli
az login
```
+ A browser window opens for authentication. After successful sign-in, the terminal displays your subscription information.
+
2. Get your personal identity.
```azurecli
az ad signed-in-user show \
--query id -o tsv
```
+ The command returns your user object ID (a GUID). Save this value for the next step.
+
3. Assign the role-based access control (RBAC) role to the identity for the resource group.
```azurecli
@@ -253,26 +325,36 @@ Find your personal identity with one of the following tools. Use that identity a
--scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>"
```
+ A successful assignment returns a JSON object with the role assignment details.
+
#### [Azure PowerShell](#tab/azure-powershell)
+Replace placeholders `<role-name>`, `<identity-id>`, `<subscription-id>`, and `<resource-group-name>` with your actual values in the following commands.
+
1. Sign in with PowerShell.
```azurepowershell
Connect-AzAccount
```
+ A browser window opens for authentication. After successful sign-in, the terminal displays your account and subscription information.
+
2. Get your personal identity.
```azurepowershell
(Get-AzContext).Account.ExtendedProperties.HomeAccountId.Split('.')[0]
```
+ The command returns your user object ID (a GUID). Save this value for the next step.
+
3. Assign the role-based access control (RBAC) role to the identity for the resource group.
```azurepowershell
New-AzRoleAssignment -ObjectId "<identity-id>" -RoleDefinitionName "<role-name>" -Scope "/subscriptions/<subscription-id>/resourceGroups/<resource-group-name>"
```
+ A successful assignment returns the role assignment object with details including the `RoleAssignmentId`.
+
#### [Azure portal](#tab/portal)
1. Use the steps found here: [find the user object ID](/partner-center/find-ids-and-domain-names#find-the-user-object-id) in the Azure portal.
@@ -281,30 +363,12 @@ Find your personal identity with one of the following tools. Use that identity a
---
-Where applicable, replace `<identity-id>`, `<subscription-id>`, and `<resource-group-name>` with your actual values.
-
### Authentication for local development
-Use a tool in your local development environment to authentication to Azure identity. Once you're authenticated, the `DefaultAzureCredential` instance in your source code finds and uses the authentication.
-
-#### [.NET](#tab/csharp)
-
-Select a tool for [authentication during local development](/dotnet/api/overview/azure/identity-readme#authenticate-the-client).
-
-#### [Java](#tab/java)
-
-Select a tool for [authentication during local development](/java/api/overview/azure/identity-readme#authenticate-the-client).
-
-#### [JavaScript](#tab/javascript)
-
-Select a tool for [authentication during local development](/javascript/api/overview/azure/identity-readme#authenticate-the-client-in-development-environment).
-
-#### [Python](#tab/python)
+Use a tool in your local development environment to authentication to Azure identity. Once you're authenticated, the `DefaultAzureCredential` instance in your source code finds and uses your identity for authentication purposes.
Select a tool for [authentication during local development](/python/api/overview/azure/identity-readme#authenticate-during-local-development).
----
-
### Configure environment variables for local development
To connect to Azure AI Search, your code needs to know your resource endpoint.
@@ -385,6 +449,16 @@ Create environment variables for your deployed and keyless Azure AI Search resou
- `AZURE_SEARCH_ENDPOINT`: This URL is the access point for your Azure AI Search resource. This URL generally has the format `https://<YOUR-RESOURCE-NAME>.search.windows.net/`.
- `AZURE_CLIENT_ID`: This is the identity to authenticate as.
+## Troubleshoot common errors
+
+| Error | Cause | Solution |
+| ----- | ----- | -------- |
+| `AuthenticationFailedException` | Missing or invalid credentials | Ensure you're signed in with `az login` (CLI) or `Connect-AzAccount` (PowerShell). Verify your Azure account has access to the subscription. |
+| `403 Forbidden` | Identity lacks required role | Assign the appropriate role (Search Index Data Reader for queries, Search Index Data Contributor for indexing). Role assignments can take up to 10 minutes to propagate. |
+| `401 Unauthorized` | RBAC not enabled on search service | Enable role-based access in the Azure portal under **Settings** > **Keys** > **Role-based access control**. |
+| `ResourceNotFoundException` | Invalid endpoint or index name | Verify the `AZURE_SEARCH_ENDPOINT` environment variable matches your search service URL (format: `https://<service-name>.search.windows.net`). |
+| `CredentialUnavailableException` | No valid credential found | `DefaultAzureCredential` tries multiple authentication methods. Ensure at least one is configured (Azure CLI, Visual Studio, environment variables). |
+
## Related content
* [Keyless connections developer guide](/azure/developer/intro/passwordless-overview)
Summary
{
"modification_type": "minor update",
"modification_title": "ロールベースのセキュリティに関するアプリの設定"
}
Explanation
この変更は、articles/search/search-security-rbac-client-code.mdファイルが「keyless-connections.md」から「search-security-rbac-client-code.md」に改名され、内容が大きく更新されたことを示しています。主な変更点は次の通りです:
タイトルと説明の変更: ドキュメントのタイトルが「Use keyless connections in search apps」から「Configure apps for role-based security」に変更され、焦点がキーなし接続からロールベースのセキュリティに移っています。
内容の増強: キーなし接続の実装方法が具体的に説明され、そのための手順や注意事項が明記されています。Microsoft Entra IDを使用した認証と承認の設定方法が詳細に解説されています。
手順とPrerequisitesの追加: ロールベースのアクセス設定や役割の割り当てに関する新しい章が設けられ、具体的なロール(例: Search Service Contributor、Search Index Data Contributorなど)の詳細説明が追加されており、ユーザーが必要な権限を理解しやすくなっています。
ライブラリのインストール手順の追加: Azure Identity クライアントライブラリやAzure Search Documents クライアントライブラリのインストール手順が各プログラミング言語について具体的に説明されており、キーなし接続を利用するために必要な準備が整っています。
一般的なエラーのトラブルシューティングセクションの追加: 認証失敗やアクセス権限が不足している場合のエラー処理に関する情報が追加され、エラーの原因と解決策がまとめられています。
この更新により、108行が追加され、34行が削除されており、合計で142行の変更が行われました。全体として、ドキュメントがロールベースのアクセス制御に関するより明確で包括的なリソースに進化しています。
articles/search/search-security-rbac.md
Diff
@@ -5,14 +5,16 @@ description: Use Azure role-based access control for granular permissions on ser
author: HeidiSteen
ms.author: heidist
manager: nitinme
-ms.date: 01/15/2026
+ms.date: 01/20/2026
ms.service: azure-ai-search
ms.update-cycle: 180-days
ms.topic: how-to
ms.custom:
- subject-rbac-steps
- devx-track-azurepowershell
- build-2025
+ - dev-focus
+ai-usage: ai-assisted
---
# Connect to Azure AI Search using roles
@@ -32,34 +34,22 @@ Role assignments are cumulative and pervasive across all tools and client librar
Role-based access is optional, but recommended. The alternative is [key-based authentication](search-security-api-keys.md), which is the default.
+### Quick reference: Roles by task
+
+| Task | Required role(s) |
+| ---- | ---------------- |
+| Create or manage indexes, indexers, skillsets | Search Service Contributor |
+| Load documents into an index | Search Index Data Contributor |
+| Query an index | Search Index Data Reader |
+| Full development access | Search Service Contributor + Search Index Data Contributor + Search Index Data Reader |
+| Service administration | Owner or Contributor |
+
## Prerequisites
+ A search service in any region, on any tier, [enabled for role-based access](search-security-enable-roles.md).
+ Owner, User Access Administrator, Role-based Access Control Administrator, or a custom role with [Microsoft.Authorization/roleAssignments/write](/azure/templates/microsoft.authorization/roleassignments) permissions.
-## How to assign roles in the Azure portal
-
-The following steps work for all role assignments.
-
-1. Sign in to the [Azure portal](https://portal.azure.com).
-
-1. Navigate to your search service.
-
-1. [Enable role-based access](search-security-enable-roles.md).
-
-1. Select **Access Control (IAM)** in the left pane.
-
-1. Select **+ Add** > **Add role assignment** to start the **Add role assignment** wizard.
-
- :::image type="content" source="media/search-security-rbac/portal-access-control.png" alt-text="Screenshot of the access control page in the Azure portal.":::
-
-1. Select a role. You can assign multiple security principals, whether users or managed identities, to a role in one pass through the wizard. However, you need to repeat these steps for each role you define.
-
-1. On the **Members** tab, select the Microsoft Entra user or group identity. If you're setting up permissions for another Azure service, select a system or user-managed identity.
-
-1. On the **Review + assign** tab, select **Review + assign** to assign the role.
-
## Built-in roles used in search
Roles are a collection of permissions on specific operations that affect either data plane or control plane layers.
@@ -84,7 +74,7 @@ Combine these roles to get sufficient permissions for your use case.
> [!NOTE]
> If you disable Azure role-based access, built-in roles for the control plane (Owner, Contributor, Reader) continue to be available. Disabling role-based access removes just the data-related permissions associated with those roles. If you disable data plane roles, Search Service Contributor is equivalent to control-plane Contributor.
-## Summary
+## Summary of permissions
| Permissions | Search Index Data Reader | Search Index Data Contributor | Search Service Contributor | Owner/Contributor | Reader |
|-------------|--------------------------|-------------------------------|----------------------------|-------------------|--------|
@@ -135,12 +125,22 @@ As a service administrator, you can create and configure a search service, and p
1. Sign in to the [Azure portal](https://portal.azure.com).
-1. Assign these roles:
+1. Select **Access Control (IAM)** in the left pane.
+
+1. Select **+ Add** > **Add role assignment** to start the **Add role assignment** wizard.
+
+ :::image type="content" source="media/search-security-rbac/portal-access-control.png" alt-text="Screenshot of the access control page in the Azure portal.":::
+
+1. Select a role.
+ Owner (full access to all data plane and control plane operations, except for query permissions)
+ Contributor (same as Owner, except for permissions to assign roles)
+ Reader (acceptable for monitoring and viewing metrics)
+1. On the **Members** tab, select the Microsoft Entra user or group identity. If you're setting up permissions for another Azure service, select a system or user-managed identity.
+
+1. On the **Review + assign** tab, select **Review + assign** to assign the role.
+
#### [**PowerShell**](#tab/roles-powershell-admin)
When you [use PowerShell to assign roles](/azure/role-based-access-control/role-assignments-powershell), call [New-AzRoleAssignment](/powershell/module/az.resources/new-azroleassignment), providing the Azure user or group name, and the scope of the assignment.
@@ -153,6 +153,8 @@ New-AzRoleAssignment -SignInName <email> `
-Scope "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Search/searchServices/<search-service>"
```
+**Reference:** [New-AzRoleAssignment](/powershell/module/az.resources/new-azroleassignment)
+
---
### Assign roles for development
@@ -174,12 +176,22 @@ Another combination of roles that provides full access is Contributor or Owner,
1. Sign in to the [Azure portal](https://portal.azure.com).
-1. Assign these roles:
+1. Select **Access Control (IAM)** in the left pane.
+
+1. Select **+ Add** > **Add role assignment** to start the **Add role assignment** wizard.
+
+ :::image type="content" source="media/search-security-rbac/portal-access-control.png" alt-text="Screenshot of the access control page in the Azure portal.":::
+
+1. Select a role.
+ Search Service Contributor (create, read, update, and delete operations on indexes, indexers, skillsets, and other top-level objects)
+ Search Index Data Contributor (load documents and run indexing jobs)
+ Search Index Data Reader (query an index)
+1. On the **Members** tab, select the Microsoft Entra user or group identity. If you're setting up permissions for another Azure service, select a system or user-managed identity.
+
+1. On the **Review + assign** tab, select **Review + assign** to assign the role.
+
#### [**PowerShell**](#tab/roles-powershell)
When you [use PowerShell to assign roles](/azure/role-based-access-control/role-assignments-powershell), call [New-AzRoleAssignment](/powershell/module/az.resources/new-azroleassignment), providing the Azure user or group name, and the scope of the assignment.
@@ -200,6 +212,8 @@ New-AzRoleAssignment -SignInName <email> `
-Scope "/subscriptions/<subscription>/resourceGroups/<resource-group>/providers/Microsoft.Search/searchServices/<search-service>/indexes/<index-name>"
```
+**Reference:** [New-AzRoleAssignment](/powershell/module/az.resources/new-azroleassignment)
+
---
### Assign roles for read-only queries
@@ -212,7 +226,7 @@ Use the Search Index Data Reader role for apps and processes that only need read
This role is very specific. It grants [GET or POST access](/rest/api/searchservice/documents) to the *documents collection of a search index* for search, autocomplete, and suggestions. It doesn't support GET or LIST operations on an index or other top-level objects, or GET service statistics.
-This section provides basic steps for setting up the role assignment and is here for completeness, but for comprehensive instructions on configuring your app for role-based access, see [Use Azure AI Search without keys](keyless-connections.md).
+This section provides basic steps for setting up the role assignment and is here for completeness, but for comprehensive instructions on configuring your app for role-based access, see [Use Azure AI Search without keys](search-security-rbac-client-code.md).
> [!NOTE]
> As a developer, if you need to debug queries that are predicated on a Microsoft identity, use Search Index Data Contributor or create a custom role that gives you [elevated permissions for debug purposes](search-query-access-control-rbac-enforcement.md#elevated-permissions-for-investigating-incorrect-results).
@@ -221,7 +235,17 @@ This section provides basic steps for setting up the role assignment and is here
1. Sign in to the [Azure portal](https://portal.azure.com).
-1. Assign the **Search Index Data Reader** role.
+1. Select **Access Control (IAM)** in the left pane.
+
+1. Select **+ Add** > **Add role assignment** to start the **Add role assignment** wizard.
+
+ :::image type="content" source="media/search-security-rbac/portal-access-control.png" alt-text="Screenshot of the access control page in the Azure portal.":::
+
+1. Select the **Search Index Data Reader** role.
+
+1. On the **Members** tab, select the Microsoft Entra user or group identity. If you're setting up permissions for another Azure service, select a system or user-managed identity.
+
+1. On the **Review + assign** tab, select **Review + assign** to assign the role.
#### [**PowerShell**](#tab/roles-powershell-query)
@@ -232,9 +256,11 @@ When [using PowerShell to assign roles](/azure/role-based-access-control/role-as
1. Get the object identifier of your Azure service, such as Azure OpenAI.
```azurepowershell
- Get-AzADServicePrincipal -SearchString <YOUR AZURE OPENAI RESOURCE NAME>
+ Get-AzADServicePrincipal -SearchString <your-azure-openai-resource-name>
```
+ The output includes an `Id` property containing the object ID you need for the role assignment.
+
1. Get the role definition and review the permissions to make sure this is the role you want.
```azurepowershell
@@ -244,24 +270,28 @@ When [using PowerShell to assign roles](/azure/role-based-access-control/role-as
1. Create the role assignment, substituting valid values for the placeholders.
```azurepowershell
- New-AzRoleAssignment -ObjectId YOUR-AZURE-OPENAI-OBJECT-ID -RoleDefinitionName "Search Index Data Reader" -Scope /subscriptions/YOUR-SUBSCRIPTION-ID/resourcegroups/YOUR-RESOURCE-GROUP/providers/Microsoft.Search/searchServices/YOUR-SEARCH-SERVICE-NAME
+ New-AzRoleAssignment -ObjectId <your-azure-openai-object-id> -RoleDefinitionName "Search Index Data Reader" -Scope /subscriptions/<your-subscription-id>/resourcegroups/<your-resource-group>/providers/Microsoft.Search/searchServices/<your-search-service-name>
```
+ A successful assignment returns the role assignment details including `RoleAssignmentId`.
+
1. Here's an example of a role assignment scoped to a specific index:
```powershell
- New-AzRoleAssignment -ObjectId YOUR-AZURE-OPENAI-OBJECT-ID `
+ New-AzRoleAssignment -ObjectId <your-azure-openai-object-id> `
-RoleDefinitionName "Search Index Data Reader" `
- -Scope /subscriptions/YOUR-SUBSCRIPTION-ID/resourcegroups/YOUR-RESOURCE-GROUP/providers/Microsoft.Search/searchServices/YOUR-SEARCH-SERVICE-NAME/indexes/YOUR-INDEX-NAME
+ -Scope /subscriptions/<your-subscription-id>/resourcegroups/<your-resource-group>/providers/Microsoft.Search/searchServices/<your-search-service-name>/indexes/<your-index-name>
```
+ **Reference:** [New-AzRoleAssignment](/powershell/module/az.resources/new-azroleassignment)
+
---
## Test role assignments
Use a client to test role assignments. Remember that roles are cumulative. You can't delete or deny inherited roles that are scoped to the subscription or resource group level at the resource (search service) level.
-[Configure your application for keyless connections](keyless-connections.md) and have role assignments in place before testing.
+[Configure your application for keyless connections](search-security-rbac-client-code.md) and have role assignments in place before testing.
### [**Azure portal**](#tab/test-portal)
@@ -323,34 +353,64 @@ This approach assumes Visual Studio Code with a [REST client extension](https://
}
```
-For more information on how to acquire a token for a specific environment, see [Manage a Azure AI Search service with REST APIs](search-manage-rest.md) and [Microsoft identity platform authentication libraries](/azure/active-directory/develop/reference-v2-libraries).
+ A successful query returns search results with matching documents. If the index is empty or has no matches, `value` contains an empty array.
+
+ **Reference:** [Search Documents](/rest/api/searchservice/documents/search-post)
+
+> [!TIP]
+> For more information on how to acquire a token for a specific environment, see [Manage a Azure AI Search service with REST APIs](search-manage-rest.md) and [Microsoft identity platform authentication libraries](/azure/active-directory/develop/reference-v2-libraries).
### [**.NET**](#tab/test-csharp)
-1. Use the [Azure.Search.Documents](https://www.nuget.org/packages/Azure.Search.Documents) package.
+1. Install the required packages:
+
+ ```dotnetcli
+ dotnet add package Azure.Search.Documents
+ dotnet add package Azure.Identity
+ ```
1. Use [Azure.Identity for .NET](/dotnet/api/overview/azure/identity-readme) for token authentication. Microsoft recommends [`DefaultAzureCredential()`](/dotnet/api/azure.identity.defaultazurecredential) for most scenarios.
1. Here's an example of a client connection using `DefaultAzureCredential()`:
```csharp
// Create a SearchIndexClient to send create/delete index commands
+ // Requires Search Service Contributor role
SearchIndexClient adminClient = new SearchIndexClient(serviceEndpoint, new DefaultAzureCredential());
// Create a SearchClient to load and query documents
+ // Requires Search Index Data Contributor (load) or Search Index Data Reader (query)
SearchClient srchclient = new SearchClient(serviceEndpoint, indexName, new DefaultAzureCredential());
```
+ **Reference:** [SearchClient](/dotnet/api/azure.search.documents.searchclient), [SearchIndexClient](/dotnet/api/azure.search.documents.indexes.searchindexclient), [DefaultAzureCredential](/dotnet/api/azure.identity.defaultazurecredential)
+
1. Here's another example of using [client secret credential](/dotnet/api/azure.core.tokencredential):
```csharp
var tokenCredential = new ClientSecretCredential(aadTenantId, aadClientId, aadSecret);
SearchClient srchclient = new SearchClient(serviceEndpoint, indexName, tokenCredential);
```
+1. Here's an example of running a query:
+
+ ```csharp
+ SearchResults<SearchDocument> response = srchclient.Search<SearchDocument>("motel");
+ foreach (SearchResult<SearchDocument> result in response.GetResults())
+ {
+ Console.WriteLine(result.Document["HotelName"]);
+ }
+ ```
+
+ A successful query returns search results. If no documents match, the results collection is empty.
+
### [**Python**](#tab/test-python)
-1. Use [azure.search.documents (Azure SDK for Python)](https://pypi.org/project/azure-search-documents/).
+1. Install the required packages:
+
+ ```bash
+ pip install azure-search-documents azure-identity
+ ```
1. Use [Azure.Identity for Python](/python/api/overview/azure/identity-readme) for token authentication.
@@ -368,17 +428,36 @@ For more information on how to acquire a token for a specific environment, see [
client = SearchClient(endpoint=endpoint, index_name=index_name, credential=credential)
```
+ **Reference:** [SearchClient](/python/api/azure-search-documents/azure.search.documents.searchclient), [DefaultAzureCredential](/python/api/azure-identity/azure.identity.defaultazurecredential)
+
### [**JavaScript**](#tab/test-javascript)
-1. Use [@azure/search-documents (Azure SDK for JavaScript), version 11.3](https://www.npmjs.com/package/@azure/search-documents).
+1. Install the required packages:
+
+ ```bash
+ npm install @azure/search-documents @azure/identity
+ ```
1. Use [Azure.Identity for JavaScript](/javascript/api/overview/azure/identity-readme) for token authentication.
1. If you're using React, use `InteractiveBrowserCredential` for Microsoft Entra authentication to Search. See [When to use `@azure/identity`](/javascript/api/overview/azure/identity-readme?view=azure-node-latest#when-to-use&preserve-view=true) for details.
### [**Java**](#tab/test-java)
-1. Use [azure-search-documents (Azure SDK for Java)](https://central.sonatype.com/artifact/com.azure/azure-search-documents).
+1. Add the required dependencies to your `pom.xml`:
+
+ ```xml
+ <dependency>
+ <groupId>com.azure</groupId>
+ <artifactId>azure-search-documents</artifactId>
+ <version>11.6.0</version>
+ </dependency>
+ <dependency>
+ <groupId>com.azure</groupId>
+ <artifactId>azure-identity</artifactId>
+ <version>1.10.0</version>
+ </dependency>
+ ```
1. Use [Azure.Identity for Java](/java/api/overview/azure/identity-readme?view=azure-java-stable&preserve-view=true) for token authentication.
Summary
{
"modification_type": "minor update",
"modification_title": "Azure AI Searchのロールベースアクセス制御に関する更新"
}
Explanation
この変更は、articles/search/search-security-rbac.mdファイルに対して行われたもので、117行が新たに追加され、38行が削除され、計155行の内容が変更されました。以下は主な変更点の概要です:
メタデータの更新: ファイルの日付が「2026年1月15日」から「2026年1月20日」に変更され、ai-usageタグが追加されました。この追加により、AI使用に関連するドキュメントもサポートされます。
役割に基づくアクセスの概要の追加: 新たに「Quick reference: Roles by task」というセクションが設けられ、各タスクに必要な役割が表形式で説明されています。これにより、ユーザーが必要な権限を簡単に把握できるようになりました。
役割の割り当て手順の改善: Azureポータルでの役割の割り当てに関する手順が整理され、手順ごとのナビゲーションが向上しました。具体的な画面ショットを掲載し、役割の割り当てを視覚的にサポートしています。
要約セクションの内容の再構成: 要約が「Summary」から「Summary of permissions」へ変更され、より具体的な情報が提供されています。これにより、役割の権限に関する情報が明確にまとめられています。
PowerShellによる役割の割り当て: PowerShellを使用して役割を割り当てる手順に新たに「Reference」セクションが追加され、役割の管理に関するリソースへのリンクが提供されています。
デバッグ用の役割についての説明の追加: 開発者がトラブルシューティングを行うために必要な役割の情報が加わり、役割の詳細な説明が複数の言語にわたって提供されています。
この更新によって、ドキュメントは役割ベースのアクセス制御に関するより明確で有用な情報を提供するようになり、ユーザーがAzure AI Searchを効果的に利用できるよう支援しています。
articles/search/service-configure-firewall.md
Diff
@@ -157,7 +157,7 @@ To set up a managed identity for a Foundry resource:
### Trusted resources must have a role assignment
-Once your Azure resource has a managed identity, [assign roles on Azure AI Search](keyless-connections.md) to grant permissions to data and operations.
+Once your Azure resource has a managed identity, [assign roles on Azure AI Search](search-security-rbac-client-code.md) to grant permissions to data and operations.
The trusted services are used for vectorization workloads: generating vectors from text and image content, and sending payloads back to the search service for query execution or indexing. Connections from a trusted service are used to deliver payloads to Azure AI search.
Summary
{
"modification_type": "minor update",
"modification_title": "ファイアウォールの設定に関するドキュメントの修正"
}
Explanation
この変更は、articles/search/service-configure-firewall.mdファイルにおいて、文の一部が修正され、全体で2行が変更されました。具体的な変更内容は以下の通りです:
ロール割り当てに関するリンクの更新: 文中のリンクが「keyless-connections.md」から「search-security-rbac-client-code.md」に変更されました。これにより、管理されたアイデンティティを持つAzureリソースに対してAzure AI Searchのロールを割り当てるためのより適切な情報へ導かれます。
内容の簡素化: その他の内容は変更されていませんが、リファレンス先の更新により、ユーザーに対して必要な役割の割り当てに関するより正確で関連性の高い情報が提供されるようになります。
この更新により、ファイアウォールの設定に関するドキュメントが、より正確で信頼性のあるリソースに接続できるよう改善されています。