Appearance
Configuring a SimilarProducts recommendation
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.
Relewise has a .NET SDK which, among other things, will make implementing recommendations very easy.
It is available via NuGet.
Before going any further, make sure you have read the following:
- Read about how to authenticate against our API here.
- 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);