in Elastic.SemanticKernel.Connectors.Elasticsearch/ElasticsearchVectorStoreCollectionCreateMapping.cs [106:124]
private static DenseVectorSimilarity GetSimilarityFunction(VectorStoreRecordVectorProperty vectorProperty)
{
const string maxInnerProductSimilarity = "max_inner_product";
if (vectorProperty.DistanceFunction is null)
{
return DenseVectorSimilarity.Cosine;
}
return vectorProperty.DistanceFunction switch
{
DistanceFunction.CosineSimilarity => DenseVectorSimilarity.Cosine,
DistanceFunction.DotProductSimilarity => DenseVectorSimilarity.DotProduct,
DistanceFunction.EuclideanDistance => DenseVectorSimilarity.L2Norm,
maxInnerProductSimilarity => DenseVectorSimilarity.MaxInnerProduct,
_ => throw new InvalidOperationException(
$"Distance function '{vectorProperty.DistanceFunction}' for {nameof(VectorStoreRecordVectorProperty)} '{vectorProperty.DataModelPropertyName}' is not supported by the Elasticsearch VectorStore.")
};
}