Пример #1
0
        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());
        }
Пример #2
0
        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);
        }
Пример #3
0
        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());
        }
Пример #4
0
        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);
        }