Agent Skills › microsoft/skills › azure-search-documents-ts

azure-search-documents-ts

GitHub

基于 Azure AI Search SDK 构建搜索应用,支持向量、混合及语义搜索。涵盖索引管理、文档索引、认证配置及 Agentic 检索场景。

.github/plugins/azure-sdk-typescript/skills/azure-search-documents-ts/SKILL.md microsoft/skills

Trigger Scenarios

需要实现全文或向量搜索功能 管理 Azure AI Search 索引结构 集成语义排名或混合搜索

Install

npx skills add microsoft/skills --skill azure-search-documents-ts -g -y
More Options

Non-standard path

npx skills add https://github.com/microsoft/skills/tree/main/.github/plugins/azure-sdk-typescript/skills/azure-search-documents-ts -g -y

Use without installing

npx skills use microsoft/skills@azure-search-documents-ts

指定 Agent (Claude Code)

npx skills add microsoft/skills --skill azure-search-documents-ts -a claude-code -g -y

安装 repo 全部 skill

npx skills add microsoft/skills --all -g -y

预览 repo 内 skill

npx skills add microsoft/skills --list

SKILL.md

Frontmatter
{
    "name": "azure-search-documents-ts",
    "license": "MIT",
    "metadata": {
        "author": "Microsoft",
        "package": "@azure\/search-documents",
        "version": "1.0.0"
    },
    "description": "Build search applications using Azure AI Search SDK for JavaScript (@azure\/search-documents). Use when creating\/managing indexes, implementing vector\/hybrid search, semantic ranking, or building agentic retrieval with knowledge bases."
}

Azure AI Search SDK for TypeScript

Build search applications with vector, hybrid, and semantic search capabilities.

Installation

npm install @azure/search-documents @azure/identity

Environment Variables

AZURE_SEARCH_ENDPOINT=https://<service-name>.search.windows.net
AZURE_SEARCH_INDEX_NAME=my-index
AZURE_SEARCH_ADMIN_KEY=<admin-key>  # Optional if using Entra ID
AZURE_TOKEN_CREDENTIALS=prod # Required only if DefaultAzureCredential is used in production

Authentication

import { SearchClient, SearchIndexClient } from "@azure/search-documents";
import { DefaultAzureCredential, ManagedIdentityCredential } from "@azure/identity";

const endpoint = process.env.AZURE_SEARCH_ENDPOINT!;
const indexName = process.env.AZURE_SEARCH_INDEX_NAME!;
// Local dev: DefaultAzureCredential. Production: set AZURE_TOKEN_CREDENTIALS=prod or AZURE_TOKEN_CREDENTIALS=<specific_credential>
const credential = new DefaultAzureCredential({requiredEnvVars: ["AZURE_TOKEN_CREDENTIALS"]});
// Or use a specific credential directly in production:
// See https://learn.microsoft.com/javascript/api/overview/azure/identity-readme?view=azure-node-latest#credential-classes
// const credential = new ManagedIdentityCredential();

// For searching
const searchClient = new SearchClient(endpoint, indexName, credential);

// For index management
const indexClient = new SearchIndexClient(endpoint, credential);

Core Workflow

Create Index with Vector Field

import { SearchIndex, SearchField, VectorSearch } from "@azure/search-documents";

const index: SearchIndex = {
  name: "products",
  fields: [
    { name: "id", type: "Edm.String", key: true },
    { name: "title", type: "Edm.String", searchable: true },
    { name: "description", type: "Edm.String", searchable: true },
    { name: "category", type: "Edm.String", filterable: true, facetable: true },
    {
      name: "embedding",
      type: "Collection(Edm.Single)",
      searchable: true,
      vectorSearchDimensions: 1536,
      vectorSearchProfileName: "vector-profile",
    },
  ],
  vectorSearch: {
    algorithms: [
      { name: "hnsw-algorithm", kind: "hnsw" },
    ],
    profiles: [
      { name: "vector-profile", algorithmConfigurationName: "hnsw-algorithm" },
    ],
  },
};

await indexClient.createOrUpdateIndex(index);

Index Documents

const documents = [
  { id: "1", title: "Widget", description: "A useful widget", category: "Tools", embedding: [...] },
  { id: "2", title: "Gadget", description: "A cool gadget", category: "Electronics", embedding: [...] },
];

const result = await searchClient.uploadDocuments(documents);
console.log(`Indexed ${result.results.length} documents`);

Full-Text Search

const results = await searchClient.search("widget", {
  select: ["id", "title", "description"],
  filter: "category eq 'Tools'",
  orderBy: ["title asc"],
  top: 10,
});

for await (const result of results.results) {
  console.log(`${result.document.title}: ${result.score}`);
}

Vector Search

const queryVector = await getEmbedding("useful tool"); // Your embedding function

const results = await searchClient.search("*", {
  vectorSearchOptions: {
    queries: [
      {
        kind: "vector",
        vector: queryVector,
        fields: ["embedding"],
        kNearestNeighborsCount: 10,
      },
    ],
  },
  select: ["id", "title", "description"],
});

for await (const result of results.results) {
  console.log(`${result.document.title}: ${result.score}`);
}

Hybrid Search (Text + Vector)

const queryVector = await getEmbedding("useful tool");

const results = await searchClient.search("tool", {
  vectorSearchOptions: {
    queries: [
      {
        kind: "vector",
        vector: queryVector,
        fields: ["embedding"],
        kNearestNeighborsCount: 50,
      },
    ],
  },
  select: ["id", "title", "description"],
  top: 10,
});

Semantic Search

// Index must have semantic configuration
const index: SearchIndex = {
  name: "products",
  fields: [...],
  semanticSearch: {
    configurations: [
      {
        name: "semantic-config",
        prioritizedFields: {
          titleField: { name: "title" },
          contentFields: [{ name: "description" }],
        },
      },
    ],
  },
};

// Search with semantic ranking
const results = await searchClient.search("best tool for the job", {
  queryType: "semantic",
  semanticSearchOptions: {
    configurationName: "semantic-config",
    captions: { captionType: "extractive" },
    answers: { answerType: "extractive", count: 3 },
  },
  select: ["id", "title", "description"],
});

for await (const result of results.results) {
  console.log(`${result.document.title}`);
  console.log(`  Caption: ${result.captions?.[0]?.text}`);
  console.log(`  Reranker Score: ${result.rerankerScore}`);
}

Filtering and Facets

// Filter syntax
const results = await searchClient.search("*", {
  filter: "category eq 'Electronics' and price lt 100",
  facets: ["category,count:10", "brand"],
});

// Access facets
for (const [facetName, facetResults] of Object.entries(results.facets || {})) {
  console.log(`${facetName}:`);
  for (const facet of facetResults) {
    console.log(`  ${facet.value}: ${facet.count}`);
  }
}

Autocomplete and Suggestions

// Create suggester in index
const index: SearchIndex = {
  name: "products",
  fields: [...],
  suggesters: [
    { name: "sg", sourceFields: ["title", "description"] },
  ],
};

// Autocomplete
const autocomplete = await searchClient.autocomplete("wid", "sg", {
  mode: "twoTerms",
  top: 5,
});

// Suggestions
const suggestions = await searchClient.suggest("wid", "sg", {
  select: ["title"],
  top: 5,
});

Batch Operations

// Batch upload, merge, delete
const batch = [
  { upload: { id: "1", title: "New Item" } },
  { merge: { id: "2", title: "Updated Title" } },
  { delete: { id: "3" } },
];

const result = await searchClient.indexDocuments({ actions: batch });

Key Types

import {
  SearchClient,
  SearchIndexClient,
  SearchIndexerClient,
  SearchIndex,
  SearchField,
  SearchOptions,
  VectorSearch,
  SemanticSearch,
  SearchIterator,
} from "@azure/search-documents";

Best Practices

  1. Use hybrid search - Combine vector + text for best results
  2. Enable semantic ranking - Improves relevance for natural language queries
  3. Batch document uploads - Use uploadDocuments with arrays, not single docs
  4. Use filters for security - Implement document-level security with filters
  5. Index incrementally - Use mergeOrUploadDocuments for updates
  6. Monitor query performance - Use includeTotalCount: true sparingly in production

Version History

  • 4f1db7e Current 2026-07-25 06:31

Same Skill Collection

.github/plugins/azure-cost/skills/cost-analysis/SKILL.md
.github/plugins/azure-cost/skills/cost-estimation/SKILL.md
.github/plugins/azure-cost/skills/cost-governance/SKILL.md
.github/plugins/azure-cost/skills/cost-optimization/SKILL.md
.github/plugins/azure-kusto-graph-skills/skills/azure-kusto-irql/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-ai-agents-persistent-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-ai-document-intelligence-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-ai-openai-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-ai-projects-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-ai-voicelive-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-eventgrid-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-eventhub-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-identity-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-maps-search-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-mgmt-apicenter-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-mgmt-apimanagement-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-mgmt-applicationinsights-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-mgmt-arizeaiobservabilityeval-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-mgmt-botservice-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-mgmt-fabric-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-mgmt-mongodbatlas-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-mgmt-weightsandbiases-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-cosmosdb-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-durabletask-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-mysql-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-postgresql-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-redis-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-resource-manager-sql-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-search-documents-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-security-keyvault-keys-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/azure-servicebus-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/m365-agents-dotnet/SKILL.md
.github/plugins/azure-sdk-dotnet/skills/microsoft-azure-webjobs-extensions-authentication-events-dotnet/SKILL.md
.github/plugins/azure-sdk-java/skills/azure-ai-agents-persistent-java/SKILL.md
.github/plugins/azure-sdk-java/skills/azure-ai-anomalydetector-java/SKILL.md
.github/plugins/azure-sdk-java/skills/azure-ai-contentsafety-java/SKILL.md
.github/plugins/azure-sdk-java/skills/azure-ai-formrecognizer-java/SKILL.md
.github/plugins/azure-sdk-java/skills/azure-ai-projects-java/SKILL.md
.github/plugins/azure-sdk-java/skills/azure-ai-vision-imageanalysis-java/SKILL.md
.github/plugins/azure-sdk-java/skills/azure-ai-voicelive-java/SKILL.md
.github/plugins/azure-sdk-java/skills/azure-appconfiguration-java/SKILL.md
.github/plugins/azure-sdk-java/skills/azure-communication-callautomation-java/SKILL.md
.github/plugins/azure-sdk-java/skills/azure-communication-callingserver-java/SKILL.md
.github/plugins/azure-sdk-java/skills/azure-communication-chat-java/SKILL.md
.github/plugins/azure-sdk-java/skills/azure-communication-common-java/SKILL.md
.github/plugins/azure-sdk-java/skills/azure-communication-sms-java/SKILL.md
.github/plugins/azure-sdk-java/skills/azure-compute-batch-java/SKILL.md
.github/plugins/azure-sdk-java/skills/azure-cosmos-java/SKILL.md
.github/plugins/azure-sdk-java/skills/azure-data-tables-java/SKILL.md
.github/plugins/azure-sdk-java/skills/azure-eventgrid-java/SKILL.md

Metadata

Files
0
Version
23d0dac
Hash
b6a0a3f6
Indexed
2026-07-25 06:31

ホーム - Wiki
Copyright © 2011-2026 iteam. Current version is 2.155.2. UTC+08:00, 2026-10-03 13:31
浙ICP备14020137号-1