Skip to content

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

Don't know us? Don't worry - you can find more information about us, by visiting our main page www.relewise.com