{"id":"72ecd83e-f43f-4f19-9dcd-cb319b97aadf","shortId":"BSDaaA","kind":"skill","title":"azure-search-documents-ts","tagline":"Build search applications with vector, hybrid, and semantic search capabilities.","description":"# Azure AI Search SDK for TypeScript\n\nBuild search applications with vector, hybrid, and semantic search capabilities.\n\n## Installation\n\n```bash\nnpm install @azure/search-documents @azure/identity\n```\n\n## Environment Variables\n\n```bash\nAZURE_SEARCH_ENDPOINT=https://<service-name>.search.windows.net\nAZURE_SEARCH_INDEX_NAME=my-index\nAZURE_SEARCH_ADMIN_KEY=<admin-key>  # Optional if using Entra ID\n```\n\n## Authentication\n\n```typescript\nimport { SearchClient, SearchIndexClient } from \"@azure/search-documents\";\nimport { DefaultAzureCredential } from \"@azure/identity\";\n\nconst endpoint = process.env.AZURE_SEARCH_ENDPOINT!;\nconst indexName = process.env.AZURE_SEARCH_INDEX_NAME!;\nconst credential = new DefaultAzureCredential();\n\n// For searching\nconst searchClient = new SearchClient(endpoint, indexName, credential);\n\n// For index management\nconst indexClient = new SearchIndexClient(endpoint, credential);\n```\n\n## Core Workflow\n\n### Create Index with Vector Field\n\n```typescript\nimport { SearchIndex, SearchField, VectorSearch } from \"@azure/search-documents\";\n\nconst index: SearchIndex = {\n  name: \"products\",\n  fields: [\n    { name: \"id\", type: \"Edm.String\", key: true },\n    { name: \"title\", type: \"Edm.String\", searchable: true },\n    { name: \"description\", type: \"Edm.String\", searchable: true },\n    { name: \"category\", type: \"Edm.String\", filterable: true, facetable: true },\n    {\n      name: \"embedding\",\n      type: \"Collection(Edm.Single)\",\n      searchable: true,\n      vectorSearchDimensions: 1536,\n      vectorSearchProfileName: \"vector-profile\",\n    },\n  ],\n  vectorSearch: {\n    algorithms: [\n      { name: \"hnsw-algorithm\", kind: \"hnsw\" },\n    ],\n    profiles: [\n      { name: \"vector-profile\", algorithmConfigurationName: \"hnsw-algorithm\" },\n    ],\n  },\n};\n\nawait indexClient.createOrUpdateIndex(index);\n```\n\n### Index Documents\n\n```typescript\nconst documents = [\n  { id: \"1\", title: \"Widget\", description: \"A useful widget\", category: \"Tools\", embedding: [...] },\n  { id: \"2\", title: \"Gadget\", description: \"A cool gadget\", category: \"Electronics\", embedding: [...] },\n];\n\nconst result = await searchClient.uploadDocuments(documents);\nconsole.log(`Indexed ${result.results.length} documents`);\n```\n\n### Full-Text Search\n\n```typescript\nconst results = await searchClient.search(\"widget\", {\n  select: [\"id\", \"title\", \"description\"],\n  filter: \"category eq 'Tools'\",\n  orderBy: [\"title asc\"],\n  top: 10,\n});\n\nfor await (const result of results.results) {\n  console.log(`${result.document.title}: ${result.score}`);\n}\n```\n\n### Vector Search\n\n```typescript\nconst queryVector = await getEmbedding(\"useful tool\"); // Your embedding function\n\nconst results = await searchClient.search(\"*\", {\n  vectorSearchOptions: {\n    queries: [\n      {\n        kind: \"vector\",\n        vector: queryVector,\n        fields: [\"embedding\"],\n        kNearestNeighborsCount: 10,\n      },\n    ],\n  },\n  select: [\"id\", \"title\", \"description\"],\n});\n\nfor await (const result of results.results) {\n  console.log(`${result.document.title}: ${result.score}`);\n}\n```\n\n### Hybrid Search (Text + Vector)\n\n```typescript\nconst queryVector = await getEmbedding(\"useful tool\");\n\nconst results = await searchClient.search(\"tool\", {\n  vectorSearchOptions: {\n    queries: [\n      {\n        kind: \"vector\",\n        vector: queryVector,\n        fields: [\"embedding\"],\n        kNearestNeighborsCount: 50,\n      },\n    ],\n  },\n  select: [\"id\", \"title\", \"description\"],\n  top: 10,\n});\n```\n\n### Semantic Search\n\n```typescript\n// Index must have semantic configuration\nconst index: SearchIndex = {\n  name: \"products\",\n  fields: [...],\n  semanticSearch: {\n    configurations: [\n      {\n        name: \"semantic-config\",\n        prioritizedFields: {\n          titleField: { name: \"title\" },\n          contentFields: [{ name: \"description\" }],\n        },\n      },\n    ],\n  },\n};\n\n// Search with semantic ranking\nconst results = await searchClient.search(\"best tool for the job\", {\n  queryType: \"semantic\",\n  semanticSearchOptions: {\n    configurationName: \"semantic-config\",\n    captions: { captionType: \"extractive\" },\n    answers: { answerType: \"extractive\", count: 3 },\n  },\n  select: [\"id\", \"title\", \"description\"],\n});\n\nfor await (const result of results.results) {\n  console.log(`${result.document.title}`);\n  console.log(`  Caption: ${result.captions?.[0]?.text}`);\n  console.log(`  Reranker Score: ${result.rerankerScore}`);\n}\n```\n\n## Filtering and Facets\n\n```typescript\n// Filter syntax\nconst results = await searchClient.search(\"*\", {\n  filter: \"category eq 'Electronics' and price lt 100\",\n  facets: [\"category,count:10\", \"brand\"],\n});\n\n// Access facets\nfor (const [facetName, facetResults] of Object.entries(results.facets || {})) {\n  console.log(`${facetName}:`);\n  for (const facet of facetResults) {\n    console.log(`  ${facet.value}: ${facet.count}`);\n  }\n}\n```\n\n## Autocomplete and Suggestions\n\n```typescript\n// Create suggester in index\nconst index: SearchIndex = {\n  name: \"products\",\n  fields: [...],\n  suggesters: [\n    { name: \"sg\", sourceFields: [\"title\", \"description\"] },\n  ],\n};\n\n// Autocomplete\nconst autocomplete = await searchClient.autocomplete(\"wid\", \"sg\", {\n  mode: \"twoTerms\",\n  top: 5,\n});\n\n// Suggestions\nconst suggestions = await searchClient.suggest(\"wid\", \"sg\", {\n  select: [\"title\"],\n  top: 5,\n});\n```\n\n## Batch Operations\n\n```typescript\n// Batch upload, merge, delete\nconst batch = [\n  { upload: { id: \"1\", title: \"New Item\" } },\n  { merge: { id: \"2\", title: \"Updated Title\" } },\n  { delete: { id: \"3\" } },\n];\n\nconst result = await searchClient.indexDocuments({ actions: batch });\n```\n\n## Key Types\n\n```typescript\nimport {\n  SearchClient,\n  SearchIndexClient,\n  SearchIndexerClient,\n  SearchIndex,\n  SearchField,\n  SearchOptions,\n  VectorSearch,\n  SemanticSearch,\n  SearchIterator,\n} from \"@azure/search-documents\";\n```\n\n## Best Practices\n\n1. **Use hybrid search** - Combine vector + text for best results\n2. **Enable semantic ranking** - Improves relevance for natural language queries\n3. **Batch document uploads** - Use `uploadDocuments` with arrays, not single docs\n4. **Use filters for security** - Implement document-level security with filters\n5. **Index incrementally** - Use `mergeOrUploadDocuments` for updates\n6. **Monitor query performance** - Use `includeTotalCount: true` sparingly in production\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","antigravity","awesome","skills","sickn33","agent-skills","agentic-skills","ai-agent-skills","ai-agents","ai-coding"],"capabilities":["skill","source-sickn33","skill-azure-search-documents-ts","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-ts","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 (6,737 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.710Z","embedding":null,"createdAt":"2026-04-18T21:33:04.238Z","updatedAt":"2026-04-24T18:50:33.710Z","lastSeenAt":"2026-04-24T18:50:33.710Z","tsv":"'0':393 '1':190,494,530 '10':242,277,322,420 '100':416 '1536':159 '2':201,500,540 '3':377,506,550 '4':561 '5':471,482,573 '50':316 '6':580 'access':422 'action':511,602 'admin':54 'ai':17 'algorithm':165,169,180 'algorithmconfigurationnam':177 'answer':373 'answertyp':374 'applic':8,24,596 'array':557 'asc':240 'ask':640 'authent':61 'autocomplet':441,461,463 'await':181,213,227,244,257,266,283,298,304,356,383,407,464,475,509 'azur':2,16,41,45,52 'azure-search-documents-t':1 'azure/identity':37,71 'azure/search-documents':36,67,118,527 'bash':33,40 'batch':483,486,491,512,551 'best':358,528,538 'boundari':648 'brand':421 'build':6,22 'capabl':15,31 'caption':370,391 'captiontyp':371 'categori':144,197,208,235,410,418 'clarif':642 'clear':615 'collect':154 'combin':534 'config':342,369 'configur':330,338 'configurationnam':366 'console.log':216,249,288,388,390,395,431,438 'const':72,77,83,89,99,119,187,211,225,245,255,264,284,296,302,331,354,384,405,425,434,449,462,473,490,507 'contentfield':347 'cool':206 'core':105 'count':376,419 'creat':107,445 'credenti':84,95,104 'criteria':651 'defaultazurecredenti':69,86 'delet':489,504 'describ':603,619 'descript':138,193,204,233,281,320,349,381,460 'doc':560 'document':4,185,188,215,219,552,568 'document-level':567 'edm.single':155 'edm.string':128,134,140,146 'electron':209,412 'embed':152,199,210,262,275,314 'enabl':541 'endpoint':43,73,76,93,103 'entra':59 'environ':38,631 'environment-specif':630 'eq':236,411 'execut':598 'expert':636 'extract':372,375 'facet':149,401,417,423,435 'facet.count':440 'facet.value':439 'facetnam':426,432 'facetresult':427,437 'field':111,124,274,313,336,454 'filter':147,234,399,403,409,563,572 'full':221 'full-text':220 'function':263 'gadget':203,207 'getembed':258,299 'hnsw':168,171,179 'hnsw-algorithm':167,178 'hybrid':11,27,291,532 'id':60,126,189,200,231,279,318,379,493,499,505 'implement':566 'import':63,68,113,516 'improv':544 'includetotalcount':585 'increment':575 'index':47,51,81,97,108,120,183,184,217,326,332,448,450,574 'indexcli':100 'indexclient.createorupdateindex':182 'indexnam':78,94 'input':645 'instal':32,35 'item':497 'job':362 'key':55,129,513 'kind':170,270,309 'knearestneighborscount':276,315 'languag':548 'level':569 'limit':607 'lt':415 'manag':98 'match':616 'merg':488,498 'mergeoruploaddocu':577 'miss':653 'mode':468 'monitor':581 'must':327 'my-index':49 'name':48,82,122,125,131,137,143,151,166,173,334,339,345,348,452,456 'natur':547 'new':85,91,101,496 'npm':34 'object.entries':429 'oper':484 'option':56 'orderbi':238 'output':625 'overview':606 'perform':583 'permiss':646 'practic':529 'price':414 'prioritizedfield':343 'process.env.azure':74,79 'product':123,335,453,589 'profil':163,172,176 'queri':269,308,549,582 'querytyp':363 'queryvector':256,273,297,312 'rank':353,543 'relev':545 'requir':644 'rerank':396 'result':212,226,246,265,285,303,355,385,406,508,539 'result.captions':392 'result.document.title':250,289,389 'result.rerankerscore':398 'result.results.length':218 'result.score':251,290 'results.facets':430 'results.results':248,287,387 'review':637 'safeti':647 'scope':618 'score':397 'sdk':19 'search':3,7,14,18,23,30,42,46,53,75,80,88,223,253,292,324,350,533 'search.windows.net':44 'searchabl':135,141,156 'searchclient':64,90,92,517 'searchclient.autocomplete':465 'searchclient.indexdocuments':510 'searchclient.search':228,267,305,357,408 'searchclient.suggest':476 'searchclient.uploaddocuments':214 'searchfield':115,521 'searchindex':114,121,333,451,520 'searchindexcli':65,102,518 'searchindexercli':519 'searchiter':525 'searchopt':522 'secur':565,570 'select':230,278,317,378,479 'semant':13,29,323,329,341,352,364,368,542 'semantic-config':340,367 'semanticsearch':337,524 'semanticsearchopt':365 'sg':457,467,478 'singl':559 'skill':594,610 'skill-azure-search-documents-ts' 'source-sickn33' 'sourcefield':458 'spare':587 'specif':632 'stop':638 'substitut':628 'success':650 'suggest':443,446,455,472,474 'syntax':404 'task':614 'test':634 'text':222,293,394,536 'titl':132,191,202,232,239,280,319,346,380,459,480,495,501,503 'titlefield':344 'tool':198,237,260,301,306,359 'top':241,321,470,481 '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' 'treat':623 'true':130,136,142,148,150,157,586 'ts':5 'twoterm':469 'type':127,133,139,145,153,514 'typescript':21,62,112,186,224,254,295,325,402,444,485,515 'updat':502,579 'upload':487,492,553 'uploaddocu':555 'use':58,195,259,300,531,554,562,576,584,592,608 'valid':633 'variabl':39 'vector':10,26,110,162,175,252,271,272,294,310,311,535 'vector-profil':161,174 'vectorsearch':116,164,523 'vectorsearchdimens':158 'vectorsearchopt':268,307 'vectorsearchprofilenam':160 'wid':466,477 'widget':192,196,229 'workflow':106,600","prices":[{"id":"6df42d57-3309-4f55-a1be-55092c35bdba","listingId":"72ecd83e-f43f-4f19-9dcd-cb319b97aadf","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:04.238Z"}],"sources":[{"listingId":"72ecd83e-f43f-4f19-9dcd-cb319b97aadf","source":"github","sourceId":"sickn33/antigravity-awesome-skills/azure-search-documents-ts","sourceUrl":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-search-documents-ts","isPrimary":false,"firstSeenAt":"2026-04-18T21:33:04.238Z","lastSeenAt":"2026-04-24T18:50:33.710Z"}],"details":{"listingId":"72ecd83e-f43f-4f19-9dcd-cb319b97aadf","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"sickn33","slug":"azure-search-documents-ts","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":"dc461714cb60234d62b21611fbfd4763e3b23f33","skill_md_path":"skills/azure-search-documents-ts/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/sickn33/antigravity-awesome-skills/tree/main/skills/azure-search-documents-ts"},"layout":"multi","source":"github","category":"antigravity-awesome-skills","frontmatter":{"name":"azure-search-documents-ts","description":"Build search applications with vector, hybrid, and semantic search capabilities."},"skills_sh_url":"https://skills.sh/sickn33/antigravity-awesome-skills/azure-search-documents-ts"},"updatedAt":"2026-04-24T18:50:33.710Z"}}