in demo-dotnet/DotNetVectorDemo/Program.cs [231:307]
internal static async Task SetupIndexAsync(Configuration configuration, SearchIndexClient indexClient)
{
const string vectorSearchHnswProfile = "my-vector-profile";
const string vectorSearchHnswConfig = "myHnsw";
const string vectorSearchVectorizer = "myOpenAIVectorizer";
const string semanticSearchConfig = "my-semantic-config";
SearchIndex searchIndex = new(configuration.IndexName)
{
VectorSearch = new()
{
Profiles =
{
new VectorSearchProfile(vectorSearchHnswProfile, vectorSearchHnswConfig)
{
VectorizerName = vectorSearchVectorizer
}
},
Algorithms =
{
new HnswAlgorithmConfiguration(vectorSearchHnswConfig)
},
Vectorizers =
{
new AzureOpenAIVectorizer(vectorSearchVectorizer)
{
Parameters = new AzureOpenAIVectorizerParameters
{
ResourceUri = new Uri(configuration.AzureOpenAIEndpoint),
ModelName = configuration.AzureOpenAIEmbeddingModel,
DeploymentName = configuration.AzureOpenAIEmbeddingDeployment
}
}
}
},
SemanticSearch = new()
{
Configurations =
{
new SemanticConfiguration(semanticSearchConfig, new()
{
TitleField = new SemanticField("title"),
ContentFields =
{
new SemanticField("content")
},
KeywordsFields =
{
new SemanticField("category")
}
})
},
},
Fields =
{
new SimpleField("id", SearchFieldDataType.String) { IsKey = true, IsFilterable = true, IsSortable = true, IsFacetable = true },
new SearchableField("title") { IsFilterable = true, IsSortable = true },
new SearchableField("content") { IsFilterable = true },
new SearchField("titleVector", SearchFieldDataType.Collection(SearchFieldDataType.Single))
{
IsSearchable = true,
VectorSearchDimensions = int.Parse(configuration.AzureOpenAIEmbeddingDimensions),
VectorSearchProfileName = vectorSearchHnswProfile
},
new SearchField("contentVector", SearchFieldDataType.Collection(SearchFieldDataType.Single))
{
IsSearchable = true,
VectorSearchDimensions = int.Parse(configuration.AzureOpenAIEmbeddingDimensions),
VectorSearchProfileName = vectorSearchHnswProfile
},
new SearchableField("category") { IsFilterable = true, IsSortable = true, IsFacetable = true }
}
};
await indexClient.CreateOrUpdateIndexAsync(searchIndex);
}