public static void Initialize(string instance) { var defaultBehaviorWeights = new Dictionary <string, float> { { BehaviorTypes.View, .5f }, { BehaviorTypes.AddToCart, .7f }, { BehaviorTypes.Purchase, 1f } }; foreach (var behaviorType in BehaviorTypes.All()) { BehaviorStores.Register(instance, behaviorType, new SqlceBehaviorStore(instance, behaviorType)); float weight = defaultBehaviorWeights[behaviorType]; var config = BehaviorConfig.Load(instance, behaviorType); if (config != null) { weight = config.Weight; } var matrix = new SqlceSimilarityMatrix(instance, behaviorType, "Similarity_" + behaviorType); SimilarityMatrixes.Register(instance, behaviorType, matrix); RelatedItemsProviders.Register(instance, new ItemToItemRelatedItemsProvider(matrix), weight); } BehaviorReceivers.Set(instance, new BufferedBehaviorReceiver(new BehaviorReceiver(instance), 1000, TimeSpan.FromSeconds(5))); RecommendationEngines.Register(instance, CreateRecommendationEngines(instance)); Schedulers.Start(instance); ScheduleJobs(instance); }
private IRecommendationEngine GetRecommendationEngine(CommerceDataSourceContext context, ParsedGenericCommerceDataSourceSettings settings, out ISet <string> toIgnoreItems) { var filter = settings.Filters.Find(f => f.Name == "ByProduct"); if (filter != null) { var productId = (int)filter.GetParameterValue("ProductId"); toIgnoreItems = new HashSet <string> { productId.ToString() }; return(new FeatureBasedRecommendationEngine(new[] { new Feature(productId.ToString()) }, RelatedItemsProviders.GetProviders(context.Instance))); } else { toIgnoreItems = new HashSet <string>(); foreach (var behaviorType in BehaviorTypes.All()) { var store = BehaviorStores.Get(context.Instance, behaviorType); foreach (var itemId in store.GetItemsUserHadBehaviorsOn(context.HttpContext.EnsureVisitorUniqueId(), 10000)) { toIgnoreItems.Add(itemId); } } return(RecommendationEngines.GetEngines(context.Instance)); } }
public static void Dispose(string instance) { RecommendationEngines.RemoveEngines(instance); Schedulers.Stop(instance); BehaviorReceivers.Remove(instance); BehaviorStores.Remove(instance); SimilarityMatrixes.Remove(instance); RelatedItemsProviders.RemoveProviders(instance); }
public void Execute(JobContext context) { var instance = context.Instance; var behaviorType = context.JobData["BehaviorType"]; var matrix = SimilarityMatrixes.Get(instance, behaviorType); var newMatrix = matrix.PrepareRecomputation(); Recompute(newMatrix, BehaviorStores.Get(instance, behaviorType)); matrix.ReplaceWith(newMatrix); }
static WeightedRecommendationEngineCollection CreateRecommendationEngines(string instance) { var engines = new WeightedRecommendationEngineCollection(); foreach (var behaviorType in BehaviorTypes.All()) { var featureBuilder = new BehaviorBasedFeatureBuilder(() => { var store = BehaviorStores.Get(instance, behaviorType); return(store.GetRecentBehaviors(50)); }); var engine = new FeatureBasedRecommendationEngine(featureBuilder, RelatedItemsProviders.GetProviders(instance)); engines.Add(engine, 1f); } return(engines); }