Appearance
Configuring a SimilarProducts recommendation
Looking for setup prerequisites, authentication details, and package references? Start with the .NET SDK landing page.
Unlike most other recommendation types, SimilarProducts requires a bit of setup to be optimally useful.
This page contains an example of a SimilarProducts recommendation request with emphasis on the various data types and comparers that are available.
For more information about the types of data and comparers that go into setting up the recommendation, click here.
Before going any further, read about handling different types of users here.
csharp
IRecommender recommender = new Recommender(new Guid("DATA_SET_ID"), "API_KEY", "SERVER_URL");
// Setup for language, currency, location, and user context
Language language = new("en-gb");
Currency currency = new("GBP");
string displayedAtLocation = "Product Details";
User user = User.Anonymous();
// Product reference to compare with
ProductAndVariantId productAndVariantId = new("product-id", "variant-id");
// Initialize the evaluation settings for determining similarity
SimilarProductsEvaluationSettings evaluationSettings = new()
{
// DisplayName similarities
SignificanceOfSimilaritiesInDisplayName = 1.0,
// Brand similarities
SignificanceOfSimilarBrand = 0.5,
// Price similarities
SignificanceOfSimilarListPrice = 0.5,
SignificanceOfSimilarSalesPrice = 0.5,
// Category similarities
SignificanceOfCommonImmediateParentCategories = 1.0, // High impact if same immediate parent
SignificanceOfCommonParentsParentCategories = 0.5, // Medium impact if grandparent is the same
SignificanceOfCommonAncestorCategories = 0.25, // Low impact for distant shared ancestors
// Common Data Keys
SignificanceOfCommonProductDataKeys = 0.0,
// Identical product data values
SignificanceOfIdenticalProductDataValues = 1.0,
// Add specific rules for important product data fields
SignificantProductDataFields = [
// Exact string match
new SignificantDataValue(
key: "StringValueDataKey_1",
comparer: SignificantDataValueComparer.Equals,
significance: 1.0
),
// String similarity
new SignificantDataValue(
key: "StringValueDataKey_2",
comparer: SignificantDataValueComparer.StringSimilarity,
significance: 1.0
),
// Numeric exact match
new SignificantDataValue(
key: "NumberValueDataKey_1",
comparer: SignificantDataValueComparer.Equals,
significance: 1.0
),
// Numeric percent difference
new SignificantDataValue(
key: "NumberValueDataKey_2",
comparer: SignificantDataValueComparer.NumericPercentDifference,
significance: 1.0
),
// Overlap in collection-type data (e.g., tags, features)
new SignificantDataValue(
key: "CollectionValueDataKey_1",
comparer: SignificantDataValueComparer.CollectionOverlap,
significance: 1.0
),
// Presence of key
new SignificantDataValue(
key: "AnyDataKey",
comparer: SignificantDataValueComparer.KeyExists,
significance: 1.0
),
]
};
SimilarProductsRequest request = new(
language,
currency,
displayedAtLocation,
user,
productAndVariantId)
{
EvaluationSettings = evaluationSettings
};
ProductRecommendationResponse recommendations = await recommender.RecommendAsync(request, CancellationToken.None);