[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6EXQCWCGVRMK22YJJEC453B":3,"skill-same:01M6EXQCWCGVRMK22YJJEC453B":75},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":46,"commitSha":47,"skillDirectory":48,"forksCount":49,"repositoryHtmlUrl":50,"repositoryHomepageUrl":51,"ownerHtmlUrl":52,"ownerBlogUrl":6,"ownerDescription":53,"updatedAt":54,"install":55,"resources":68},"01M6EXQCWCGVRMK22YJJEC453B","azure-search-documents-dotnet",null,"Azure AI Search SDK for .NET (Azure.Search.Documents). Use for building search applications with full-text, vector, semantic, and hybrid search. Covers SearchClient (queries, document CRUD), SearchIndexClient (index management), and SearchIndexerClient (indexers, skillsets). Triggers: \"Azure Search .NET\", \"SearchClient\", \"SearchIndexClient\", \"vector search C#\", \"semantic search .NET\", \"hybrid search\", \"Azure.Search.Documents\".","ComeOnOliver\u002Fskillshub","ComeOnOliver","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F43215937?v=4","01M6E5JNFECJAAVFE0W7SMWWD2","Haoran Shu","01M6E5JNNDQS7AJZDYFQ8TPZCK",66,"MIT","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsickn33\u002Fazure-search-documents-dotnet\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"dotnet","search documents","search","azure search documents dotnet","azure","documents","semantic search","azure ai","vector","applications","sdk","crud","text","use","queries","document","full","triggers","Hybrid Search","with","2026-11-10 10:12:30",false,"---\nname: azure-search-documents-dotnet\ndescription: |\n  Azure AI Search SDK for .NET (Azure.Search.Documents). Use for building search applications with full-text, vector, semantic, and hybrid search. Covers SearchClient (queries, document CRUD), SearchIndexClient (index management), and SearchIndexerClient (indexers, skillsets). Triggers: \"Azure Search .NET\", \"SearchClient\", \"SearchIndexClient\", \"vector search C#\", \"semantic search .NET\", \"hybrid search\", \"Azure.Search.Documents\".\npackage: Azure.Search.Documents\n---\n\n# Azure.Search.Documents (.NET)\n\nBuild search applications with full-text, vector, semantic, and hybrid search capabilities.\n\n## Installation\n\n```bash\ndotnet add package Azure.Search.Documents\ndotnet add package Azure.Identity\n```\n\n**Current Versions**: Stable v11.7.0, Preview v11.8.0-beta.1\n\n## Environment Variables\n\n```bash\nSEARCH_ENDPOINT=https:\u002F\u002F\u003Csearch-service>.search.windows.net\nSEARCH_INDEX_NAME=\u003Cindex-name>\n# For API key auth (not recommended for production)\nSEARCH_API_KEY=\u003Capi-key>\n```\n\n## Authentication\n\n**DefaultAzureCredential (preferred)**:\n```csharp\nusing Azure.Identity;\nusing Azure.Search.Documents;\n\nvar credential = new DefaultAzureCredential();\nvar client = new SearchClient(\n    new Uri(Environment.GetEnvironmentVariable(\"SEARCH_ENDPOINT\")),\n    Environment.GetEnvironmentVariable(\"SEARCH_INDEX_NAME\"),\n    credential);\n```\n\n**API Key**:\n```csharp\nusing Azure;\nusing Azure.Search.Documents;\n\nvar credential = new AzureKeyCredential(\n    Environment.GetEnvironmentVariable(\"SEARCH_API_KEY\"));\nvar client = new SearchClient(\n    new Uri(Environment.GetEnvironmentVariable(\"SEARCH_ENDPOINT\")),\n    Environment.GetEnvironmentVariable(\"SEARCH_INDEX_NAME\"),\n    credential);\n```\n\n## Client Selection\n\n| Client | Purpose |\n|--------|---------|\n| `SearchClient` | Query indexes, upload\u002Fupdate\u002Fdelete documents |\n| `SearchIndexClient` | Create\u002Fmanage indexes, synonym maps |\n| `SearchIndexerClient` | Manage indexers, skillsets, data sources |\n\n## Index Creation\n\n### Using FieldBuilder (Recommended)\n\n```csharp\nusing Azure.Search.Documents.Indexes;\nusing Azure.Search.Documents.Indexes.Models;\n\n\u002F\u002F Define model with attributes\npublic class Hotel\n{\n    [SimpleField(IsKey = true, IsFilterable = true)]\n    public string HotelId { get; set; }\n\n    [SearchableField(IsSortable = true)]\n    public string HotelName { get; set; }\n\n    [SearchableField(AnalyzerName = LexicalAnalyzerName.EnLucene)]\n    public string Description { get; set; }\n\n    [SimpleField(IsFilterable = true, IsSortable = true, IsFacetable = true)]\n    public double? Rating { get; set; }\n\n    [VectorSearchField(VectorSearchDimensions = 1536, VectorSearchProfileName = \"vector-profile\")]\n    public ReadOnlyMemory\u003Cfloat>? DescriptionVector { get; set; }\n}\n\n\u002F\u002F Create index\nvar indexClient = new SearchIndexClient(endpoint, credential);\nvar fieldBuilder = new FieldBuilder();\nvar fields = fieldBuilder.Build(typeof(Hotel));\n\nvar index = new SearchIndex(\"hotels\")\n{\n    Fields = fields,\n    VectorSearch = new VectorSearch\n    {\n        Profiles = { new VectorSearchProfile(\"vector-profile\", \"hnsw-algo\") },\n        Algorithms = { new HnswAlgorithmConfiguration(\"hnsw-algo\") }\n    }\n};\n\nawait indexClient.CreateOrUpdateIndexAsync(index);\n```\n\n### Manual Field Definition\n\n```csharp\nvar index = new SearchIndex(\"hotels\")\n{\n    Fields =\n    {\n        new SimpleField(\"hotelId\", SearchFieldDataType.String) { IsKey = true, IsFilterable = true },\n        new SearchableField(\"hotelName\") { IsSortable = true },\n        new SearchableField(\"description\") { AnalyzerName = LexicalAnalyzerName.EnLucene },\n        new SimpleField(\"rating\", SearchFieldDataType.Double) { IsFilterable = true, IsSortable = true },\n        new SearchField(\"descriptionVector\", SearchFieldDataType.Collection(SearchFieldDataType.Single))\n        {\n            VectorSearchDimensions = 1536,\n            VectorSearchProfileName = \"vector-profile\"\n        }\n    }\n};\n```\n\n## Document Operations\n\n```csharp\nvar searchClient = new SearchClient(endpoint, indexName, credential);\n\n\u002F\u002F Upload (add new)\nvar hotels = new[] { new Hotel { HotelId = \"1\", HotelName = \"Hotel A\" } };\nawait searchClient.UploadDocumentsAsync(hotels);\n\n\u002F\u002F Merge (update existing)\nawait searchClient.MergeDocumentsAsync(hotels);\n\n\u002F\u002F Merge or Upload (upsert)\nawait searchClient.MergeOrUploadDocumentsAsync(hotels);\n\n\u002F\u002F Delete\nawait searchClient.DeleteDocumentsAsync(\"hotelId\", new[] { \"1\", \"2\" });\n\n\u002F\u002F Batch operations\nvar batch = IndexDocumentsBatch.Create(\n    IndexDocumentsAction.Upload(hotel1),\n    IndexDocumentsAction.Merge(hotel2),\n    IndexDocumentsAction.Delete(hotel3));\nawait searchClient.IndexDocumentsAsync(batch);\n```\n\n## Search Patterns\n\n### Basic Search\n\n```csharp\nvar options = new SearchOptions\n{\n    Filter = \"rating ge 4\",\n    OrderBy = { \"rating desc\" },\n    Select = { \"hotelId\", \"hotelName\", \"rating\" },\n    Size = 10,\n    Skip = 0,\n    IncludeTotalCount = true\n};\n\nSearchResults\u003CHotel> results = await searchClient.SearchAsync\u003CHotel>(\"luxury\", options);\n\nConsole.WriteLine($\"Total: {results.TotalCount}\");\nawait foreach (SearchResult\u003CHotel> result in results.GetResultsAsync())\n{\n    Console.WriteLine($\"{result.Document.HotelName} (Score: {result.Score})\");\n}\n```\n\n### Faceted Search\n\n```csharp\nvar options = new SearchOptions\n{\n    Facets = { \"rating,count:5\", \"category\" }\n};\n\nvar results = await searchClient.SearchAsync\u003CHotel>(\"*\", options);\n\nforeach (var facet in results.Value.Facets[\"rating\"])\n{\n    Console.WriteLine($\"Rating {facet.Value}: {facet.Count}\");\n}\n```\n\n### Autocomplete and Suggestions\n\n```csharp\n\u002F\u002F Autocomplete\nvar autocompleteOptions = new AutocompleteOptions { Mode = AutocompleteMode.OneTermWithContext };\nvar autocomplete = await searchClient.AutocompleteAsync(\"lux\", \"suggester-name\", autocompleteOptions);\n\n\u002F\u002F Suggestions\nvar suggestOptions = new SuggestOptions { UseFuzzyMatching = true };\nvar suggestions = await searchClient.SuggestAsync\u003CHotel>(\"lux\", \"suggester-name\", suggestOptions);\n```\n\n## Vector Search\n\nSee [references\u002Fvector-search.md](references\u002Fvector-search.md) for detailed patterns.\n\n```csharp\nusing Azure.Search.Documents.Models;\n\n\u002F\u002F Pure vector search\nvar vectorQuery = new VectorizedQuery(embedding)\n{\n    KNearestNeighborsCount = 5,\n    Fields = { \"descriptionVector\" }\n};\n\nvar options = new SearchOptions\n{\n    VectorSearch = new VectorSearchOptions\n    {\n        Queries = { vectorQuery }\n    }\n};\n\nvar results = await searchClient.SearchAsync\u003CHotel>(null, options);\n```\n\n## Semantic Search\n\nSee [references\u002Fsemantic-search.md](references\u002Fsemantic-search.md) for detailed patterns.\n\n```csharp\nvar options = new SearchOptions\n{\n    QueryType = SearchQueryType.Semantic,\n    SemanticSearch = new SemanticSearchOptions\n    {\n        SemanticConfigurationName = \"my-semantic-config\",\n        QueryCaption = new QueryCaption(QueryCaptionType.Extractive),\n        QueryAnswer = new QueryAnswer(QueryAnswerType.Extractive)\n    }\n};\n\nvar results = await searchClient.SearchAsync\u003CHotel>(\"best hotel for families\", options);\n\n\u002F\u002F Access semantic answers\nforeach (var answer in results.Value.SemanticSearch.Answers)\n{\n    Console.WriteLine($\"Answer: {answer.Text} (Score: {answer.Score})\");\n}\n\n\u002F\u002F Access captions\nawait foreach (var result in results.Value.GetResultsAsync())\n{\n    var caption = result.SemanticSearch?.Captions?.FirstOrDefault();\n    Console.WriteLine($\"Caption: {caption?.Text}\");\n}\n```\n\n## Hybrid Search (Vector + Keyword + Semantic)\n\n```csharp\nvar vectorQuery = new VectorizedQuery(embedding)\n{\n    KNearestNeighborsCount = 5,\n    Fields = { \"descriptionVector\" }\n};\n\nvar options = new SearchOptions\n{\n    QueryType = SearchQueryType.Semantic,\n    SemanticSearch = new SemanticSearchOptions\n    {\n        SemanticConfigurationName = \"my-semantic-config\"\n    },\n    VectorSearch = new VectorSearchOptions\n    {\n        Queries = { vectorQuery }\n    }\n};\n\n\u002F\u002F Combines keyword search, vector search, and semantic ranking\nvar results = await searchClient.SearchAsync\u003CHotel>(\"luxury beachfront\", options);\n```\n\n## Field Attributes Reference\n\n| Attribute | Purpose |\n|-----------|---------|\n| `SimpleField` | Non-searchable field (filters, sorting, facets) |\n| `SearchableField` | Full-text searchable field |\n| `VectorSearchField` | Vector embedding field |\n| `IsKey = true` | Document key (required, one per index) |\n| `IsFilterable = true` | Enable $filter expressions |\n| `IsSortable = true` | Enable $orderby |\n| `IsFacetable = true` | Enable faceted navigation |\n| `IsHidden = true` | Exclude from results |\n| `AnalyzerName` | Specify text analyzer |\n\n## Error Handling\n\n```csharp\nusing Azure;\n\ntry\n{\n    var results = await searchClient.SearchAsync\u003CHotel>(\"query\");\n}\ncatch (RequestFailedException ex) when (ex.Status == 404)\n{\n    Console.WriteLine(\"Index not found\");\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"Search error: {ex.Status} - {ex.ErrorCode}: {ex.Message}\");\n}\n```\n\n## Best Practices\n\n1. **Use `DefaultAzureCredential`** over API keys for production\n2. **Use `FieldBuilder`** with model attributes for type-safe index definitions\n3. **Use `CreateOrUpdateIndexAsync`** for idempotent index creation\n4. **Batch document operations** for better throughput\n5. **Use `Select`** to return only needed fields\n6. **Configure semantic search** for natural language queries\n7. **Combine vector + keyword + semantic** for best relevance\n\n## Reference Files\n\n| File | Contents |\n|------|----------|\n| [references\u002Fvector-search.md](references\u002Fvector-search.md) | Vector search, hybrid search, vectorizers |\n| [references\u002Fsemantic-search.md](references\u002Fsemantic-search.md) | Semantic ranking, captions, answers |\n","# Azure.Search.Documents (.NET)\n\nBuild search applications with full-text, vector, semantic, and hybrid search capabilities.\n\n## Installation\n\n```bash\ndotnet add package Azure.Search.Documents\ndotnet add package Azure.Identity\n```\n\n**Current Versions**: Stable v11.7.0, Preview v11.8.0-beta.1\n\n## Environment Variables\n\n```bash\nSEARCH_ENDPOINT=https:\u002F\u002F\u003Csearch-service>.search.windows.net\nSEARCH_INDEX_NAME=\u003Cindex-name>\n# For API key auth (not recommended for production)\nSEARCH_API_KEY=\u003Capi-key>\n```\n\n## Authentication\n\n**DefaultAzureCredential (preferred)**:\n```csharp\nusing Azure.Identity;\nusing Azure.Search.Documents;\n\nvar credential = new DefaultAzureCredential();\nvar client = new SearchClient(\n    new Uri(Environment.GetEnvironmentVariable(\"SEARCH_ENDPOINT\")),\n    Environment.GetEnvironmentVariable(\"SEARCH_INDEX_NAME\"),\n    credential);\n```\n\n**API Key**:\n```csharp\nusing Azure;\nusing Azure.Search.Documents;\n\nvar credential = new AzureKeyCredential(\n    Environment.GetEnvironmentVariable(\"SEARCH_API_KEY\"));\nvar client = new SearchClient(\n    new Uri(Environment.GetEnvironmentVariable(\"SEARCH_ENDPOINT\")),\n    Environment.GetEnvironmentVariable(\"SEARCH_INDEX_NAME\"),\n    credential);\n```\n\n## Client Selection\n\n| Client | Purpose |\n|--------|---------|\n| `SearchClient` | Query indexes, upload\u002Fupdate\u002Fdelete documents |\n| `SearchIndexClient` | Create\u002Fmanage indexes, synonym maps |\n| `SearchIndexerClient` | Manage indexers, skillsets, data sources |\n\n## Index Creation\n\n### Using FieldBuilder (Recommended)\n\n```csharp\nusing Azure.Search.Documents.Indexes;\nusing Azure.Search.Documents.Indexes.Models;\n\n\u002F\u002F Define model with attributes\npublic class Hotel\n{\n    [SimpleField(IsKey = true, IsFilterable = true)]\n    public string HotelId { get; set; }\n\n    [SearchableField(IsSortable = true)]\n    public string HotelName { get; set; }\n\n    [SearchableField(AnalyzerName = LexicalAnalyzerName.EnLucene)]\n    public string Description { get; set; }\n\n    [SimpleField(IsFilterable = true, IsSortable = true, IsFacetable = true)]\n    public double? Rating { get; set; }\n\n    [VectorSearchField(VectorSearchDimensions = 1536, VectorSearchProfileName = \"vector-profile\")]\n    public ReadOnlyMemory\u003Cfloat>? DescriptionVector { get; set; }\n}\n\n\u002F\u002F Create index\nvar indexClient = new SearchIndexClient(endpoint, credential);\nvar fieldBuilder = new FieldBuilder();\nvar fields = fieldBuilder.Build(typeof(Hotel));\n\nvar index = new SearchIndex(\"hotels\")\n{\n    Fields = fields,\n    VectorSearch = new VectorSearch\n    {\n        Profiles = { new VectorSearchProfile(\"vector-profile\", \"hnsw-algo\") },\n        Algorithms = { new HnswAlgorithmConfiguration(\"hnsw-algo\") }\n    }\n};\n\nawait indexClient.CreateOrUpdateIndexAsync(index);\n```\n\n### Manual Field Definition\n\n```csharp\nvar index = new SearchIndex(\"hotels\")\n{\n    Fields =\n    {\n        new SimpleField(\"hotelId\", SearchFieldDataType.String) { IsKey = true, IsFilterable = true },\n        new SearchableField(\"hotelName\") { IsSortable = true },\n        new SearchableField(\"description\") { AnalyzerName = LexicalAnalyzerName.EnLucene },\n        new SimpleField(\"rating\", SearchFieldDataType.Double) { IsFilterable = true, IsSortable = true },\n        new SearchField(\"descriptionVector\", SearchFieldDataType.Collection(SearchFieldDataType.Single))\n        {\n            VectorSearchDimensions = 1536,\n            VectorSearchProfileName = \"vector-profile\"\n        }\n    }\n};\n```\n\n## Document Operations\n\n```csharp\nvar searchClient = new SearchClient(endpoint, indexName, credential);\n\n\u002F\u002F Upload (add new)\nvar hotels = new[] { new Hotel { HotelId = \"1\", HotelName = \"Hotel A\" } };\nawait searchClient.UploadDocumentsAsync(hotels);\n\n\u002F\u002F Merge (update existing)\nawait searchClient.MergeDocumentsAsync(hotels);\n\n\u002F\u002F Merge or Upload (upsert)\nawait searchClient.MergeOrUploadDocumentsAsync(hotels);\n\n\u002F\u002F Delete\nawait searchClient.DeleteDocumentsAsync(\"hotelId\", new[] { \"1\", \"2\" });\n\n\u002F\u002F Batch operations\nvar batch = IndexDocumentsBatch.Create(\n    IndexDocumentsAction.Upload(hotel1),\n    IndexDocumentsAction.Merge(hotel2),\n    IndexDocumentsAction.Delete(hotel3));\nawait searchClient.IndexDocumentsAsync(batch);\n```\n\n## Search Patterns\n\n### Basic Search\n\n```csharp\nvar options = new SearchOptions\n{\n    Filter = \"rating ge 4\",\n    OrderBy = { \"rating desc\" },\n    Select = { \"hotelId\", \"hotelName\", \"rating\" },\n    Size = 10,\n    Skip = 0,\n    IncludeTotalCount = true\n};\n\nSearchResults\u003CHotel> results = await searchClient.SearchAsync\u003CHotel>(\"luxury\", options);\n\nConsole.WriteLine($\"Total: {results.TotalCount}\");\nawait foreach (SearchResult\u003CHotel> result in results.GetResultsAsync())\n{\n    Console.WriteLine($\"{result.Document.HotelName} (Score: {result.Score})\");\n}\n```\n\n### Faceted Search\n\n```csharp\nvar options = new SearchOptions\n{\n    Facets = { \"rating,count:5\", \"category\" }\n};\n\nvar results = await searchClient.SearchAsync\u003CHotel>(\"*\", options);\n\nforeach (var facet in results.Value.Facets[\"rating\"])\n{\n    Console.WriteLine($\"Rating {facet.Value}: {facet.Count}\");\n}\n```\n\n### Autocomplete and Suggestions\n\n```csharp\n\u002F\u002F Autocomplete\nvar autocompleteOptions = new AutocompleteOptions { Mode = AutocompleteMode.OneTermWithContext };\nvar autocomplete = await searchClient.AutocompleteAsync(\"lux\", \"suggester-name\", autocompleteOptions);\n\n\u002F\u002F Suggestions\nvar suggestOptions = new SuggestOptions { UseFuzzyMatching = true };\nvar suggestions = await searchClient.SuggestAsync\u003CHotel>(\"lux\", \"suggester-name\", suggestOptions);\n```\n\n## Vector Search\n\nSee [references\u002Fvector-search.md](references\u002Fvector-search.md) for detailed patterns.\n\n```csharp\nusing Azure.Search.Documents.Models;\n\n\u002F\u002F Pure vector search\nvar vectorQuery = new VectorizedQuery(embedding)\n{\n    KNearestNeighborsCount = 5,\n    Fields = { \"descriptionVector\" }\n};\n\nvar options = new SearchOptions\n{\n    VectorSearch = new VectorSearchOptions\n    {\n        Queries = { vectorQuery }\n    }\n};\n\nvar results = await searchClient.SearchAsync\u003CHotel>(null, options);\n```\n\n## Semantic Search\n\nSee [references\u002Fsemantic-search.md](references\u002Fsemantic-search.md) for detailed patterns.\n\n```csharp\nvar options = new SearchOptions\n{\n    QueryType = SearchQueryType.Semantic,\n    SemanticSearch = new SemanticSearchOptions\n    {\n        SemanticConfigurationName = \"my-semantic-config\",\n        QueryCaption = new QueryCaption(QueryCaptionType.Extractive),\n        QueryAnswer = new QueryAnswer(QueryAnswerType.Extractive)\n    }\n};\n\nvar results = await searchClient.SearchAsync\u003CHotel>(\"best hotel for families\", options);\n\n\u002F\u002F Access semantic answers\nforeach (var answer in results.Value.SemanticSearch.Answers)\n{\n    Console.WriteLine($\"Answer: {answer.Text} (Score: {answer.Score})\");\n}\n\n\u002F\u002F Access captions\nawait foreach (var result in results.Value.GetResultsAsync())\n{\n    var caption = result.SemanticSearch?.Captions?.FirstOrDefault();\n    Console.WriteLine($\"Caption: {caption?.Text}\");\n}\n```\n\n## Hybrid Search (Vector + Keyword + Semantic)\n\n```csharp\nvar vectorQuery = new VectorizedQuery(embedding)\n{\n    KNearestNeighborsCount = 5,\n    Fields = { \"descriptionVector\" }\n};\n\nvar options = new SearchOptions\n{\n    QueryType = SearchQueryType.Semantic,\n    SemanticSearch = new SemanticSearchOptions\n    {\n        SemanticConfigurationName = \"my-semantic-config\"\n    },\n    VectorSearch = new VectorSearchOptions\n    {\n        Queries = { vectorQuery }\n    }\n};\n\n\u002F\u002F Combines keyword search, vector search, and semantic ranking\nvar results = await searchClient.SearchAsync\u003CHotel>(\"luxury beachfront\", options);\n```\n\n## Field Attributes Reference\n\n| Attribute | Purpose |\n|-----------|---------|\n| `SimpleField` | Non-searchable field (filters, sorting, facets) |\n| `SearchableField` | Full-text searchable field |\n| `VectorSearchField` | Vector embedding field |\n| `IsKey = true` | Document key (required, one per index) |\n| `IsFilterable = true` | Enable $filter expressions |\n| `IsSortable = true` | Enable $orderby |\n| `IsFacetable = true` | Enable faceted navigation |\n| `IsHidden = true` | Exclude from results |\n| `AnalyzerName` | Specify text analyzer |\n\n## Error Handling\n\n```csharp\nusing Azure;\n\ntry\n{\n    var results = await searchClient.SearchAsync\u003CHotel>(\"query\");\n}\ncatch (RequestFailedException ex) when (ex.Status == 404)\n{\n    Console.WriteLine(\"Index not found\");\n}\ncatch (RequestFailedException ex)\n{\n    Console.WriteLine($\"Search error: {ex.Status} - {ex.ErrorCode}: {ex.Message}\");\n}\n```\n\n## Best Practices\n\n1. **Use `DefaultAzureCredential`** over API keys for production\n2. **Use `FieldBuilder`** with model attributes for type-safe index definitions\n3. **Use `CreateOrUpdateIndexAsync`** for idempotent index creation\n4. **Batch document operations** for better throughput\n5. **Use `Select`** to return only needed fields\n6. **Configure semantic search** for natural language queries\n7. **Combine vector + keyword + semantic** for best relevance\n\n## Reference Files\n\n| File | Contents |\n|------|----------|\n| [references\u002Fvector-search.md](references\u002Fvector-search.md) | Vector search, hybrid search, vectorizers |\n| [references\u002Fsemantic-search.md](references\u002Fsemantic-search.md) | Semantic ranking, captions, answers |\n",{"name":5,"package":44,"description":45},"Azure.Search.Documents","Azure AI Search SDK for .NET (Azure.Search.Documents). Use for building search applications with full-text, vector, semantic, and hybrid search. Covers SearchClient (queries, document CRUD), SearchIndexClient (index management), and SearchIndexerClient (indexers, skillsets). Triggers: \"Azure Search .NET\", \"SearchClient\", \"SearchIndexClient\", \"vector search C#\", \"semantic search .NET\", \"hybrid search\", \"Azure.Search.Documents\".\n","main","def8531e65114c0fca8fb8551c1871ee0eed705c","skills\u002Faiskillstore\u002Fmarketplace\u002Fsickn33\u002Fazure-search-documents-dotnet",24,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub","https:\u002F\u002Fskillshub.wtf","https:\u002F\u002Fgithub.com\u002FComeOnOliver","AI & Blockchain Engineer\r\n","2026-06-24 22:07:19",{"source":8,"skillName":5,"commands":56,"prompt":66,"zipAvailable":67},[57,60,63],{"tool":58,"command":59},"npx","npx skills add ComeOnOliver\u002Fskillshub --skill azure-search-documents-dotnet",{"tool":61,"command":62},"bunx","bunx skills add ComeOnOliver\u002Fskillshub --skill azure-search-documents-dotnet",{"tool":64,"command":65},"pnpm","pnpm dlx skills add ComeOnOliver\u002Fskillshub --skill azure-search-documents-dotnet","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsickn33\u002Fazure-search-documents-dotnet\u002FSKILL.md",true,[69],{"path":70,"resourceType":71,"resourceTypeDesc":72,"sizeBytes":73,"sourceHtmlUrl":74},"skill-report.json","REFERENCE","参考文档",9090,"https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Faiskillstore\u002Fmarketplace\u002Fsickn33\u002Fazure-search-documents-dotnet\u002Fskill-report.json",[76,90,100,108,114,121],{"skillNo":77,"name":78,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":79,"categories":80,"keywords":86,"publishedAt":39},"01M6FKJN13GMG4KY57J3QD8GY5","model-hierarchy-skill","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzscole\u002Fmodel-hierarchy-skill\u002Fmodel-hierarchy-skill\u002FSKILL.md",[81],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[87,88,89],"model","model hierarchy","model hierarchy skill",{"skillNo":91,"name":92,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":96,"publishedAt":39},"01M6FKJJJ6GCAMR4PPPRD12M5X","zoom-mcp","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-mcp\u002FSKILL.md",[95],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},[97,98,99],"MCP","zoom","zoom mcp",{"skillNo":101,"name":102,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":103,"categories":104,"keywords":105,"publishedAt":39},"01M6FKJE3KYT3KPEZMEEHYKA6K","zoom-apps-sdk","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fzoom-apps-sdk\u002FSKILL.md",[],[29,106,107,98],"zoom apps sdk","apps",{"skillNo":109,"name":110,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":111,"categories":112,"keywords":113,"publishedAt":39},"01M6FKJ9EDH9Q5VWDF8HAJRSP0","windows","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwindows\u002FSKILL.md",[],[110],{"skillNo":115,"name":116,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":117,"categories":118,"keywords":120,"publishedAt":39},"01M6FKJ666BEEFC3AE9GJ72Q93","whiteboard","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwhiteboard\u002FSKILL.md",[119],{"categoryNo":82,"categoryName":83,"taxonomyType":84,"taxonomyTypeDesc":85},[116],{"skillNo":122,"name":123,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":124,"categories":125,"keywords":126,"publishedAt":39},"01M6FKJ21WFCDGTJQ2Q91T9DVW","websockets","https:\u002F\u002Fgithub.com\u002FComeOnOliver\u002Fskillshub\u002Fblob\u002Fmain\u002Fskills\u002Fzoom\u002Fskills\u002Fwebsockets\u002FSKILL.md",[],[123]]