in demo-javascript/code/azure-search-vector-sample.js [123:200]
async function createSearchIndex(defaultCredential) {
const searchServiceEndpoint = process.env.AZURE_SEARCH_SERVICE_ENDPOINT;
const searchServiceApiKey = process.env.AZURE_SEARCH_ADMIN_KEY;
const searchIndexName = process.env.AZURE_SEARCH_INDEX;
const embeddingDimensions = parseInt(process.env.AZURE_OPENAI_EMBEDDING_DIMENSIONS);
let vectorSearchDimensions = isNaN(embeddingDimensions) || embeddingDimensions <= 0 ?
1536 : embeddingDimensions;
let credential = !searchServiceApiKey || searchServiceApiKey.trim() === '' ?
defaultCredential : new AzureKeyCredential(searchServiceApiKey);
const indexClient = new SearchIndexClient(
searchServiceEndpoint,
credential
);
const index = {
name: searchIndexName,
fields: [
{
name: "id",
type: "Edm.String",
key: true,
sortable: true,
filterable: true,
facetable: true,
},
{ name: "title", type: "Edm.String", searchable: true },
{ name: "content", type: "Edm.String", searchable: true },
{
name: "category",
type: "Edm.String",
filterable: true,
searchable: true,
},
{
name: "titleVector",
type: "Collection(Edm.Single)",
searchable: true,
vectorSearchDimensions: vectorSearchDimensions,
vectorSearchProfileName: "myHnswProfile",
},
{
name: "contentVector",
type: "Collection(Edm.Single)",
searchable: true,
vectorSearchDimensions: vectorSearchDimensions,
vectorSearchProfileName: "myHnswProfile",
},
],
vectorSearch: {
algorithms: [{ name: "myHnswAlgorithm", kind: "hnsw" }],
profiles: [
{
name: "myHnswProfile",
algorithmConfigurationName: "myHnswAlgorithm",
},
],
},
semanticSearch: {
configurations: [
{
name: "my-semantic-config",
prioritizedFields: {
contentFields: [{ name: "content" }],
keywordsFields: [{ name: "category" }],
titleField: {
name: "title",
},
},
},
],
},
};
console.log("Creating index...");
await indexClient.createOrUpdateIndex(index);
}