Пример #1
0
        private GroupedQueryResults GetSimilaritiesUsingBatchedStrategy(Hashes queryHashes, QueryConfiguration configuration, IModelService modelService)
        {
            var matchedSubFingerprints = modelService.Query(queryHashes, configuration);

            return(queryHashes
                   .AsParallel()
                   .Aggregate(new GroupedQueryResults(queryHashes.DurationInSeconds, queryHashes.RelativeTo), (seed, queryFingerprint) =>
            {
                var matched = matchedSubFingerprints.Where(queryResult => QueryMath.IsCandidatePassingThresholdVotes(queryFingerprint.HashBins, queryResult.Hashes, configuration.ThresholdVotes));
                foreach (var subFingerprint in matched)
                {
                    double score = scoreAlgorithm.GetScore(queryFingerprint, subFingerprint, configuration);
                    seed.Add(queryFingerprint, subFingerprint, score);
                }

                return seed;
            }));
        }
Пример #2
0
        private GroupedQueryResults GetSimilaritiesUsingBatchedStrategy(IEnumerable <HashedFingerprint> queryFingerprints, QueryConfiguration configuration, DateTime relativeTo, IModelService modelService)
        {
            var    hashedFingerprints = queryFingerprints as List <HashedFingerprint> ?? queryFingerprints.ToList();
            var    result             = modelService.Query(hashedFingerprints.Select(hashedFingerprint => hashedFingerprint.HashBins), configuration);
            double queryLength        = hashedFingerprints.QueryLength(configuration.FingerprintConfiguration);
            var    groupedResults     = new GroupedQueryResults(queryLength, relativeTo);

            Parallel.ForEach(hashedFingerprints, queryFingerprint =>
            {
                var subFingerprints = result.Where(queryResult => QueryMath.IsCandidatePassingThresholdVotes(queryFingerprint.HashBins, queryResult.Hashes, configuration.ThresholdVotes));
                foreach (var subFingerprint in subFingerprints)
                {
                    double score = scoreAlgorithm.GetScore(queryFingerprint, subFingerprint, configuration);
                    groupedResults.Add(queryFingerprint, subFingerprint, score);
                }
            });

            return(groupedResults);
        }
Пример #3
0
        public void ShouldFilterExactMatches1()
        {
            bool result = QueryMath.IsCandidatePassingThresholdVotes(new[] { 1, 2, 3, 4, 5 }, new[] { 1, 2, 4, 7, 8 }, 3);

            Assert.IsFalse(result);
        }