public async Task <List <DocumentModel> > ExecuteSearch(IndexModel indexModel, SearchModel searchModel) { var docs = await DatabaseService.GetAll(indexModel); var result = new List <DocumentModel>(); foreach (var doc in docs) { var value = JsonCommand.GetValueForKey(doc.Value, searchModel.Key)?.ToString(); if (value is null) { continue; } var data = await _analyzer.Anal(value); var tokens = await _analyzer.Anal(searchModel.Term); var flag = new List <bool>(); foreach (var dat in data) { foreach (var token in tokens) { flag.Add(token == dat); } } if (flag.Contains(true)) { continue; } result.Add(doc); } return(result.Distinct().ToList()); }
public async Task <List <DocumentModel> > ExecuteSearch(IndexModel indexModel, SearchModel searchModel) { //var all = new List<List<Guid>>(); var ids = new List <Guid>(); var tokens = await _analyzer.Anal(searchModel.Term); //var docs = await _getOperations.GetDocuments(indexModel); //var data = await _indexingOperations.GetIndexesAllKeys(indexModel, searchModel.Key); var idxs = await DatabaseService.GetIndexes(indexModel, searchModel.Key); foreach (var dict in idxs) { var intersect = dict.Keys.Intersect(tokens); if (intersect.Count() >= tokens.Count) { foreach (var key in intersect) { ids.Add(dict[key]); } } } var result = new List <DocumentModel>(); foreach (var id in ids.Distinct()) { result.Add(await DatabaseService.FindById(indexModel, id)); } return(result); }
public async Task <List <DocumentModel> > ExecuteSearch(IndexModel indexModel, SearchModel searchModel) { var ids = new List <Guid>(); var tokens = await _analyzer.Anal(searchModel.Term); var idxs = await DatabaseService.GetIndexes(indexModel, searchModel.Key); //var docs = await _getOperations.GetDocuments(indexModel); //var data = await _indexingOperations.GetIndexesAllKeys(indexModel, searchModel.Key); foreach (var dict in idxs) { foreach (var(k, val) in dict) { var items = tokens.Where(token => token == k).Select(_ => val); ids.AddRange(items); } } var result = new List <DocumentModel>(); foreach (var id in ids.Distinct()) { result.Add(await DatabaseService.FindById(indexModel, id)); } return(result.Distinct().ToList()); }
public async Task <List <DocumentModel> > ExecuteSearch(IndexModel indexModel, SearchModel searchModel) { var ids = new List <Guid>(); var tokens = await _analyzer.Anal(searchModel.Term); var keys = new List <string>(); var idxs = await DatabaseService.GetIndexes(indexModel, searchModel.Key); foreach (var dict in idxs) { var keys1 = dict.Keys.Where(x => tokens .Any(y => DamerauLevenshteinDistance .GetDistance(x, y) < 2)) .ToList(); foreach (var k in keys1) { if (!keys.Contains(k)) { keys.Add(k); } } } foreach (var dict in idxs) { if (dict.Keys.Count(x => keys.Contains(x)) >= keys.Count - 2) { foreach (var key in keys) { if (dict.ContainsKey(key)) { ids.Add(dict[key]); } } } } var result = new List <DocumentModel>(); foreach (var id in ids.Distinct()) { result.Add(await DatabaseService.FindById(indexModel, id)); } return(result); }