public void SimpleHashCharTest() { var minH = new MinHasher<int>(hashSeeds.Take(1).ToArray()); var mhs = minH.GetMinHashSignature(new string[] { "a", "s","d","f" }); var mhs2 = minH.GetMinHashSignature("ASDF"); Assert.AreEqual(mhs, mhs2); }
public void SimpleHashTest() { var minH = new MinHasher<int>(hashSeeds.Take(10).ToArray()); var mhs = minH.GetMinHashSignature("ASDF"); var mhs2 = minH.GetMinHashSignature("asdf"); Assert.AreEqual(mhs, mhs2); }
private async Task <List <SearchResult> > Search(string searchString, int maxResults, double minSim) { var hashSeed = await apiClient.GetHashSeed(); var minHasher = new MinHasher <Guid>(hashSeed); var hashedSearchString = minHasher.GetMinHashSignature(searchString); var hashedResults = (await apiClient.HashedSearch(new HashedSearchQuery() { MaxResults = maxResults, MinimumSimilarity = minSim, SearchTerm = hashedSearchString }))?.ToList(); var groupedResults = hashedResults.GroupBy(r => r.Store); var tasks = new List <Task <IEnumerable <ProductBase> > >(); foreach (var storeResults in groupedResults) { tasks.Add(apiClient.GetProducts(storeResults.Key, storeResults.Select(r => r.Product.Id).ToList())); } await Task.WhenAll(tasks); foreach (var task in tasks.Where(t => !t.IsFaulted)) { foreach (var product in task.Result) { var idx = hashedResults.ToList().FindIndex(h => h.Product.Id == product.Id); hashedResults[idx].Product = product; } } return(hashedResults); }
public void SearchTest() { var searchString = new string[] { "Samsungs", "C24F390FHU" }; var searchStringHash = searchString.Select(s => minHasher.GetMinHashSignature(s)).ToList(); var brandFilteredProducts = lshSearcher.GetClosest(productList.ToDictionary(p=>p.Key,p=>p.Value[0]), searchString[0], 50); var result = lshSearcher.GetClosest(brandFilteredProducts.ToDictionary(p=>p.Id, p=>productList[p.Id][1]), searchString[1], 1); Assert.IsNotEmpty(result); Assert.IsNotNull(result); Assert.AreEqual(result.Count, 1); Assert.AreEqual(result.First().Similarity, 1); Assert.AreEqual(result.First().Id, 0); }
public void Register(List <Product> products) { try { var hashSeed = TryRegister(); var minHasher = new MinHasher <Guid>(hashSeed); var hashedProducts = new List <HashedProductBase>(); foreach (var product in products) { var id = product.Id; var hashedProduct = new HashedProductBase() { Id = id }; var weightsL = new List <double>(); var hashL = new List <int[]>(); var toHash = product.GetWeightedStringsToHash(); foreach (var sth in toHash) { var weight = sth.Item2; var str = sth.Item1; var hash = minHasher.GetMinHashSignature(str); weightsL.Add(weight); hashL.Add(hash); hashedProduct.Hashes = hashL.ToArray(); hashedProduct.Weights = weightsL.ToArray(); } hashedProducts.Add(hashedProduct); } var req = new RestRequest($"/api/stores/Register/{storeObj.Id}"); req.AddJsonBody(hashedProducts); var res = _client.Post(req); if (res.StatusCode == System.Net.HttpStatusCode.OK) { return; } else { throw new Exception(res.StatusDescription); } } catch { throw; } }