Example #1
0
        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);
        }
Example #2
0
        public static void ChangeBehaviorWeights(string instance, IDictionary <string, float> weights)
        {
            var providers = RelatedItemsProviders.GetProviders(instance);

            foreach (var provider in providers)
            {
                var matrix = ((ItemToItemRelatedItemsProvider)provider.UnderlyingProvider).SimilarityMatrix as SqlceSimilarityMatrix;
                provider.Weight = weights[matrix.BehaviorType];
            }
        }
Example #3
0
        public static void Dispose(string instance)
        {
            RecommendationEngines.RemoveEngines(instance);

            Schedulers.Stop(instance);
            BehaviorReceivers.Remove(instance);
            BehaviorStores.Remove(instance);
            SimilarityMatrixes.Remove(instance);
            RelatedItemsProviders.RemoveProviders(instance);
        }
Example #4
0
        public static IDictionary <string, float> GetBehaviorWeights(string instance)
        {
            var weights   = new Dictionary <string, float>();
            var providers = RelatedItemsProviders.GetProviders(instance);

            foreach (var provider in providers)
            {
                var matrix = ((ItemToItemRelatedItemsProvider)provider.UnderlyingProvider).SimilarityMatrix as SqlceSimilarityMatrix;
                weights.Add(matrix.BehaviorType, provider.Weight);
            }

            return(weights);
        }
Example #5
0
        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);
        }
Example #6
0
        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));
            }
        }