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; })); }
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); }
public void ShouldFilterExactMatches1() { bool result = QueryMath.IsCandidatePassingThresholdVotes(new[] { 1, 2, 3, 4, 5 }, new[] { 1, 2, 4, 7, 8 }, 3); Assert.IsFalse(result); }