{"id":"456e6307-c6f8-4c02-9fe3-0ffb6e42eea7","shortId":"G4EmcS","kind":"skill","title":"azure-search-documents-dotnet","tagline":"Azure AI Search SDK for .NET (Azure.Search.Documents). Use for building search applications with full-text, vector, semantic, and hybrid search.","description":"# 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://<search-service>.search.windows.net\nSEARCH_INDEX_NAME=<index-name>\n# For API key auth (not recommended for production)\nSEARCH_API_KEY=<api-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/update/delete documents |\n| `SearchIndexClient` | Create/manage 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// 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<float>? DescriptionVector { get; set; }\n}\n\n// 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// Upload (add new)\nvar hotels = new[] { new Hotel { HotelId = \"1\", HotelName = \"Hotel A\" } };\nawait searchClient.UploadDocumentsAsync(hotels);\n\n// Merge (update existing)\nawait searchClient.MergeDocumentsAsync(hotels);\n\n// Merge or Upload (upsert)\nawait searchClient.MergeOrUploadDocumentsAsync(hotels);\n\n// Delete\nawait searchClient.DeleteDocumentsAsync(\"hotelId\", new[] { \"1\", \"2\" });\n\n// 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<Hotel> results = await searchClient.SearchAsync<Hotel>(\"luxury\", options);\n\nConsole.WriteLine($\"Total: {results.TotalCount}\");\nawait foreach (SearchResult<Hotel> 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<Hotel>(\"*\", 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// Autocomplete\nvar autocompleteOptions = new AutocompleteOptions { Mode = AutocompleteMode.OneTermWithContext };\nvar autocomplete = await searchClient.AutocompleteAsync(\"lux\", \"suggester-name\", autocompleteOptions);\n\n// Suggestions\nvar suggestOptions = new SuggestOptions { UseFuzzyMatching = true };\nvar suggestions = await searchClient.SuggestAsync<Hotel>(\"lux\", \"suggester-name\", suggestOptions);\n```\n\n## Vector Search\n\nSee references/vector-search.md for detailed patterns.\n\n```csharp\nusing Azure.Search.Documents.Models;\n\n// 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<Hotel>(null, options);\n```\n\n## Semantic Search\n\nSee references/semantic-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<Hotel>(\"best hotel for families\", options);\n\n// Access semantic answers\nforeach (var answer in results.Value.SemanticSearch.Answers)\n{\n    Console.WriteLine($\"Answer: {answer.Text} (Score: {answer.Score})\");\n}\n\n// 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// Combines keyword search, vector search, and semantic ranking\nvar results = await searchClient.SearchAsync<Hotel>(\"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<Hotel>(\"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/vector-search.md | Vector search, hybrid search, vectorizers |\n| references/semantic-search.md | Semantic ranking, captions, answers |\n\n## When to Use\nThis skill is applicable to execute the workflow or actions described in the overview.\n\n## Limitations\n- Use this skill only when the task clearly matches the scope described above.\n- Do not treat the output as a substitute for environment-specific validation, testing, or expert review.\n- Stop and ask for clarification if required inputs, permissions, safety boundaries, or success criteria are missing.","tags":["azure","search","documents","dotnet","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents"],"capabilities":["skill","source-sickn33","skill-azure-search-documents-dotnet","topic-agent-skills","topic-agentic-skills","topic-ai-agent-skills","topic-ai-agents","topic-ai-coding","topic-ai-workflows","topic-antigravity","topic-antigravity-skills","topic-claude-code","topic-claude-code-skills","topic-codex-cli","topic-codex-skills"],"categories":["antigravity-awesome-skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-search-documents-dotnet","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add sickn33/antigravity-awesome-skills","source_repo":"https://github.com/sickn33/antigravity-awesome-skills","install_from":"skills.sh"}},"qualityScore":"0.700","qualityRationale":"deterministic score 0.70 from registry signals: · indexed on github topic:agent-skills · 34928 github stars · SKILL.md body (9,431 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-04-24T18:50:33.573Z","embedding":null,"createdAt":"2026-04-18T21:33:02.702Z","updatedAt":"2026-04-24T18:50:33.573Z","lastSeenAt":"2026-04-24T18:50:33.573Z","tsv":"'0':395 '1':331,356,721 '10':393 '1536':210,307 '2':357,729 '3':741 '4':384,748 '404':705 '5':427,499,598,755 '6':763 '7':771 'access':556,569 'action':806 'add':45,49,323 'ai':7 'algo':255,261 'algorithm':256 'analyz':688 'analyzernam':189,291,685 'answer':558,561,565,793 'answer.score':568 'answer.text':566 'api':68,76,104,117,725 'applic':17,31,800 'ask':844 'attribut':166,636,638,734 'auth':70 'authent':78 'autocomplet':444,448,456 'autocompletemode.onetermwithcontext':454 'autocompleteopt':450,452,463 'await':262,335,341,348,352,369,400,407,431,457,473,513,549,571,630,697 'azur':2,6,108,693 'azure-search-documents-dotnet':1 'azure.identity':51,83 'azure.search.documents':12,27,47,85,110 'azure.search.documents.indexes':160 'azure.search.documents.indexes.models':162 'azure.search.documents.models':489 'azurekeycredenti':114 'bash':43,60 'basic':374 'batch':358,361,371,749 'beachfront':633 'best':551,719,777 'better':753 'boundari':852 'build':15,29 'capabl':41 'caption':570,578,580,583,584,792 'catch':700,710 'categori':428 'clarif':846 'class':168 'clear':819 'client':91,120,133,135 'combin':620,772 'config':538,614 'configur':764 'console.writeline':404,413,440,564,582,706,713 'content':782 'count':426 'creat':220 'create/manage':143 'createorupdateindexasync':743 'creation':154,747 'credenti':87,103,112,132,227,321 'criteria':855 'csharp':81,106,158,268,314,376,419,447,487,524,591,691 'current':52 'data':151 'defaultazurecredenti':79,89,723 'defin':163 'definit':267,740 'delet':351 'desc':387 'describ':807,823 'descript':193,290 'descriptionvector':217,303,501,600 'detail':485,522 'document':4,141,312,660,750 'dotnet':5,44,48 'doubl':204 'embed':497,596,656 'enabl':668,673,677 'endpoint':62,98,127,226,319 'environ':58,835 'environment-specif':834 'environment.getenvironmentvariable':96,99,115,125,128 'error':689,715 'ex':702,712 'ex.errorcode':717 'ex.message':718 'ex.status':704,716 'exclud':682 'execut':802 'exist':340 'expert':840 'express':670 'facet':417,424,436,647,678 'facet.count':443 'facet.value':442 'famili':554 'field':233,242,243,266,274,500,599,635,644,653,657,762 'fieldbuild':156,229,231,731 'fieldbuilder.build':234 'file':780,781 'filter':381,645,669 'firstordefault':581 'foreach':408,434,559,572 'found':709 'full':20,34,650 'full-text':19,33,649 'ge':383 'get':178,186,194,206,218 'handl':690 'hnsw':254,260 'hnsw-algo':253,259 'hnswalgorithmconfigur':258 'hotel':169,236,241,273,326,329,333,337,343,350,552 'hotel1':364 'hotel2':366 'hotel3':368 'hotelid':177,277,330,354,389 'hotelnam':185,285,332,390 'hybrid':25,39,586,786 'idempot':745 'includetotalcount':396 'index':65,101,130,139,144,149,153,221,238,264,270,665,707,739,746 'indexcli':223 'indexclient.createorupdateindexasync':263 'indexdocumentsaction.delete':367 'indexdocumentsaction.merge':365 'indexdocumentsaction.upload':363 'indexdocumentsbatch.create':362 'indexnam':320 'input':849 'instal':42 'isfacet':201,675 'isfilter':173,197,281,297,666 'ishidden':680 'iskey':171,279,658 'issort':181,199,286,299,671 'key':69,77,105,118,661,726 'keyword':589,621,774 'knearestneighborscount':498,597 'languag':769 'lexicalanalyzername.enlucene':190,292 'limit':811 'lux':459,475 'luxuri':402,632 'manag':148 'manual':265 'map':146 'match':820 'merg':338,344 'miss':857 'mode':453 'model':164,733 'my-semantic-config':535,611 'name':66,102,131,462,478 'natur':768 'navig':679 'need':761 'net':11,28 'new':88,92,94,113,121,123,224,230,239,245,248,257,271,275,283,288,293,301,317,324,327,328,355,379,422,451,467,495,504,507,527,532,540,544,594,603,608,616 'non':642 'non-search':641 'null':515 'one':663 'oper':313,359,751 'option':378,403,421,433,503,516,526,555,602,634 'orderbi':385,674 'output':829 'overview':810 'packag':46,50 'pattern':373,486,523 'per':664 'permiss':850 'practic':720 'prefer':80 'preview':56 'product':74,728 'profil':214,247,252,311 'public':167,175,183,191,203,215 'pure':490 'purpos':136,639 'queri':138,509,618,699,770 'queryansw':543,545 'queryanswertype.extractive':546 'querycapt':539,541 'querycaptiontype.extractive':542 'querytyp':529,605 'rank':627,791 'rate':205,295,382,386,391,425,439,441 'readonlymemori':216 'recommend':72,157 'refer':637,779 'references/semantic-search.md':520,789 'references/vector-search.md':483,783 'relev':778 'requestfailedexcept':701,711 'requir':662,848 'result':399,410,430,512,548,574,629,684,696 'result.document.hotelname':414 'result.score':416 'result.semanticsearch':579 'results.getresultsasync':412 'results.totalcount':406 'results.value.facets':438 'results.value.getresultsasync':576 'results.value.semanticsearch.answers':563 'return':759 'review':841 'safe':738 'safeti':851 'scope':822 'score':415,567 'sdk':9 'search':3,8,16,26,30,40,61,64,75,97,100,116,126,129,372,375,418,481,492,518,587,622,624,714,766,785,787 'search.windows.net':63 'searchabl':643,652 'searchablefield':180,188,284,289,648 'searchclient':93,122,137,316,318 'searchclient.autocompleteasync':458 'searchclient.deletedocumentsasync':353 'searchclient.indexdocumentsasync':370 'searchclient.mergedocumentsasync':342 'searchclient.mergeoruploaddocumentsasync':349 'searchclient.searchasync':401,432,514,550,631,698 'searchclient.suggestasync':474 'searchclient.uploaddocumentsasync':336 'searchfield':302 'searchfielddatatype.collection':304 'searchfielddatatype.double':296 'searchfielddatatype.single':305 'searchfielddatatype.string':278 'searchindex':240,272 'searchindexcli':142,225 'searchindexercli':147 'searchopt':380,423,505,528,604 'searchquerytype.semantic':530,606 'searchresult':398,409 'see':482,519 'select':134,388,757 'semant':23,37,517,537,557,590,613,626,765,775,790 'semanticconfigurationnam':534,610 'semanticsearch':531,607 'semanticsearchopt':533,609 'set':179,187,195,207,219 'simplefield':170,196,276,294,640 'size':392 'skill':798,814 'skill-azure-search-documents-dotnet' 'skillset':150 'skip':394 'sort':646 'sourc':152 'source-sickn33' 'specif':836 'specifi':686 'stabl':54 'stop':842 'string':176,184,192 'substitut':832 'success':854 'suggest':446,461,464,472,477 'suggester-nam':460,476 'suggestopt':466,468,479 'synonym':145 'task':818 'test':838 'text':21,35,585,651,687 'throughput':754 'topic-agent-skills' 'topic-agentic-skills' 'topic-ai-agent-skills' 'topic-ai-agents' 'topic-ai-coding' 'topic-ai-workflows' 'topic-antigravity' 'topic-antigravity-skills' 'topic-claude-code' 'topic-claude-code-skills' 'topic-codex-cli' 'topic-codex-skills' 'total':405 'treat':827 'tri':694 'true':172,174,182,198,200,202,280,282,287,298,300,397,470,659,667,672,676,681 'type':737 'type-saf':736 'typeof':235 'updat':339 'upload':322,346 'upload/update/delete':140 'upsert':347 'uri':95,124 'use':13,82,84,107,109,155,159,161,488,692,722,730,742,756,796,812 'usefuzzymatch':469 'v11.7.0':55 'v11.8.0-beta.1':57 'valid':837 'var':86,90,111,119,222,228,232,237,269,315,325,360,377,420,429,435,449,455,465,471,493,502,511,525,547,560,573,577,592,601,628,695 'variabl':59 'vector':22,36,213,251,310,480,491,588,623,655,773,784,788 'vector-profil':212,250,309 'vectorizedqueri':496,595 'vectorqueri':494,510,593,619 'vectorsearch':244,246,506,615 'vectorsearchdimens':209,306 'vectorsearchfield':208,654 'vectorsearchopt':508,617 'vectorsearchprofil':249 'vectorsearchprofilenam':211,308 'version':53 'workflow':804","prices":[{"id":"d093cf5a-c8fc-49e6-9e13-21526b781a42","listingId":"456e6307-c6f8-4c02-9fe3-0ffb6e42eea7","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"sickn33","category":"antigravity-awesome-skills","install_from":"skills.sh"},"createdAt":"2026-04-18T21:33:02.702Z"}],"sources":[{"listingId":"456e6307-c6f8-4c02-9fe3-0ffb6e42eea7","source":"github","sourceId":"sickn33/antigravity-awesome-skills/azure-search-documents-dotnet","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-search-documents-dotnet","isPrimary":false,"firstSeenAt":"2026-04-18T21:33:02.702Z","lastSeenAt":"2026-04-24T18:50:33.573Z"}],"details":{"listingId":"456e6307-c6f8-4c02-9fe3-0ffb6e42eea7","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"azure-search-documents-dotnet","github":{"repo":"sickn33/antigravity-awesome-skills","stars":34928,"topics":["agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding","ai-workflows","antigravity","antigravity-skills","claude-code","claude-code-skills","codex-cli","codex-skills","cursor","cursor-skills","developer-tools","gemini-cli","gemini-skills","kiro","mcp","skill-library"],"license":"mit","html_url":"https://github.com/sickn33/antigravity-awesome-skills","pushed_at":"2026-04-24T06:41:17Z","description":"Installable GitHub library of 1,400+ agentic skills for Claude Code, Cursor, Codex CLI, Gemini CLI, Antigravity, and more. Includes installer CLI, bundles, workflows, and official/community skill collections.","skill_md_sha":"4d4e5b5b7cae4aef424e801fb599de25644d4601","skill_md_path":"skills/azure-search-documents-dotnet/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-search-documents-dotnet"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"azure-search-documents-dotnet","description":"Azure AI Search SDK for .NET (Azure.Search.Documents). Use for building search applications with full-text, vector, semantic, and hybrid search."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-search-documents-dotnet"},"updatedAt":"2026-04-24T18:50:33.573Z"}}