private static void ApplyDecay(IInferenceRecipient recipient, long currentTimeWindowNumber, long timeWindowNumberAtLastRun)
        {
            if (recipient.RawRecipientWeight == 0.0)
            {
                Util.ThrowOnConditionFailed(recipient.RecipientRank == int.MaxValue, "Unexpected rank for unused recipient");
                return;
            }
            Util.ThrowOnConditionFailed(recipient.LastUsedInTimeWindow > 0L && recipient.LastUsedInTimeWindow <= currentTimeWindowNumber, string.Format("Unexpected LastUsedInTimeWindow value: {0}. CurrentTimeWindowNumber: {1}.", recipient.LastUsedInTimeWindow, currentTimeWindowNumber));
            long num  = currentTimeWindowNumber - recipient.LastUsedInTimeWindow;
            long num2 = timeWindowNumberAtLastRun - recipient.LastUsedInTimeWindow;

            foreach (PeopleRelevanceClassifier.Decay decay in PeopleRelevanceClassifier.DecayConfig)
            {
                if (num >= decay.TimeWindowTreshold && num2 < decay.TimeWindowTreshold)
                {
                    double val  = Math.Max(recipient.RawRecipientWeight * decay.PercentDecay, (double)decay.MinDecay);
                    double num3 = Math.Min(recipient.RawRecipientWeight, val);
                    recipient.RawRecipientWeight -= num3;
                }
                if (recipient.RawRecipientWeight == 0.0)
                {
                    recipient.RecipientRank = int.MaxValue;
                    return;
                }
            }
        }
        private void DetermineCaptureFlag(IInferenceRecipient recipient, DocumentProcessingContext processingContext)
        {
            int relevanceCategory = recipient.RelevanceCategory;
            int captureFlag       = recipient.CaptureFlag;
            int num = 0;

            if (relevanceCategory == 2147483647)
            {
                if (recipient.RelevanceCategoryAtLastCapture != 2147483647)
                {
                    num = 4;
                }
            }
            else if (recipient.RelevanceCategoryAtLastCapture == 2147483647)
            {
                num = 1;
            }
            else if (relevanceCategory != recipient.RelevanceCategoryAtLastCapture)
            {
                num = 2;
            }
            recipient.CaptureFlag = num;
            if (captureFlag != num)
            {
                this.DiagnosticsSession.LogDiagnosticsInfo(DiagnosticsLoggingTag.Informational, string.Format("U={0} - Recipient cache entry {1} capture flag change: CF={2} CFB={3} R={4} W={5} RCC={6}", new object[]
                {
                    (processingContext != null) ? processingContext.Session.MailboxOwner.MailboxInfo.PrimarySmtpAddress.ToString() : string.Empty,
                    recipient.SmtpAddress,
                    num,
                    captureFlag,
                    recipient.RecipientRank,
                    recipient.RawRecipientWeight,
                    recipient.RelevanceCategoryAtLastCapture
                }), new object[0]);
            }
        }
예제 #3
0
 internal static int GetRelevanceCategoryForRecipient(IInferenceRecipient recipient)
 {
     return(InferenceRecipient.GetRelevanceCategoryForRank(recipient.RecipientRank));
 }