async function createSearchIndex()

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);
}