Exemple #1
0
        private ResultHeadwordListContract SearchHeadwordByCriteria(List <SearchCriteriaContract> listSearchCriteriaContracts,
                                                                    int start, int count)
        {
            var client = GetBookClient();
            // Search headwords
            var newRequest = new HeadwordSearchRequestContract
            {
                ConditionConjunction = listSearchCriteriaContracts,
                Start = start,
                Count = count,
            };
            var resultHeadwords = client.SearchHeadword(newRequest, GetDefaultProjectType());

            // Load info about dictionaries/books
            var bookListDictionary = new Dictionary <long, BookContract>();

            foreach (var projectId in resultHeadwords.Select(x => x.ProjectId).Distinct())
            {
                var bookInfo = client.GetBookInfo(projectId);
                bookListDictionary.Add(projectId, bookInfo);
            }

            // Create response
            var result = new ResultHeadwordListContract
            {
                HeadwordList = MapHeadwordsToGroupedList(resultHeadwords),
                BookList     = bookListDictionary
            };

            return(result);
        }
Exemple #2
0
        public ActionResult <long> SearchHeadwordResultCount([FromBody] HeadwordSearchRequestContract request, [FromQuery] ProjectTypeContract?projectType)
        {
            if (projectType == null)
            {
                return(Error($"Required parameter {nameof(projectType)} is not specified"));
            }

            var result = m_bookSearchManager.SearchHeadwordByCriteriaCount(request, projectType.Value);

            return(result);
        }
Exemple #3
0
        public List <HeadwordContract> SearchHeadwordByCriteria(HeadwordSearchRequestContract request, ProjectTypeContract projectType)
        {
            m_authorizationManager.AddAuthorizationCriteria(request.ConditionConjunction);

            var processedCriterias   = m_metadataSearchCriteriaProcessor.ProcessSearchCriterias(request.ConditionConjunction);
            var nonMetadataCriterias = processedCriterias.NonMetadataCriterias;
            var projectTypeEnum      = m_mapper.Map <ProjectTypeEnum>(projectType);

            var queryCreator = new SearchCriteriaQueryCreator(processedCriterias.ConjunctionQuery, processedCriterias.MetadataParameters, projectTypeEnum)
            {
                Start = PagingHelper.GetStart(request.Start),
                Count = PagingHelper.GetCount(request.Count)
            };

            if (processedCriterias.NonMetadataCriterias.Count > 0)
            {
                // Search in fulltext DB

                // 1) search in metadata
                var projectIdentificatorList = m_bookRepository.InvokeUnitOfWork(x => x.SearchProjectIdByCriteriaQuery(queryCreator));
                if (projectIdentificatorList.Count == 0)
                {
                    return(new List <HeadwordContract>());
                }

                // 2) search in fulltext
                var fulltextStorage          = m_fulltextStorageProvider.GetFulltextStorage(projectType);
                var fulltextSearchResultData = fulltextStorage.SearchHeadwordByCriteria(queryCreator.GetStart(), queryCreator.GetCount(), nonMetadataCriterias, projectIdentificatorList);

                // 3) load paged result
                switch (fulltextSearchResultData.SearchResultType)
                {
                case FulltextSearchResultType.ProjectId:
                    return(m_headwordSearchManager.GetHeadwordSearchResultByStandardIds(fulltextSearchResultData.List));

                case FulltextSearchResultType.ProjectExternalId:
                    return(m_headwordSearchManager.GetHeadwordSearchResultByExternalIds(fulltextSearchResultData.List, projectTypeEnum));

                default:
                    throw new ArgumentOutOfRangeException();
                }
            }
            else
            {
                // Search in relational DB

                var searchByCriteriaWork = new SearchHeadwordByCriteriaWork(m_resourceRepository, m_bookRepository, queryCreator);
                var dbResult             = searchByCriteriaWork.Execute();

                var resultList = m_mapper.Map <List <HeadwordContract> >(dbResult);
                return(resultList);
            }
        }
Exemple #4
0
        public ActionResult SearchCriteriaResultsCount([FromBody] DictionarySearchCriteriaCountRequest request)
        {
            var listSearchCriteriaContracts = DeserializeJsonSearchCriteria(request.Json);

            AddCategoryCriteria(listSearchCriteriaContracts, request.SelectedBookIds, request.SelectedCategoryIds);

            var newRequest = new HeadwordSearchRequestContract
            {
                ConditionConjunction = listSearchCriteriaContracts,
            };
            var client      = GetBookClient();
            var resultCount = client.SearchHeadwordCount(newRequest, GetDefaultProjectType());

            return(Json(resultCount));
        }
Exemple #5
0
        public ActionResult SearchBasicFulltextResultsCount(string text, IList <long> selectedBookIds, IList <int> selectedCategoryIds)
        {
            var searchContractFulltext = CreateTextCriteriaList(CriteriaKey.HeadwordDescription, text);

            AddCategoryCriteria(searchContractFulltext, selectedBookIds, selectedCategoryIds);

            var newRequest = new HeadwordSearchRequestContract
            {
                ConditionConjunction = searchContractFulltext,
            };
            var client      = GetBookClient();
            var resultCount = client.SearchHeadwordCount(newRequest, GetDefaultProjectType());

            return(Json(resultCount));
        }
Exemple #6
0
        public ActionResult GetHeadwordCount(IList <int> selectedCategoryIds, IList <long> selectedBookIds)
        {
            var listSearchCriteriaContracts = new List <SearchCriteriaContract>();

            AddCategoryCriteria(listSearchCriteriaContracts, selectedBookIds, selectedCategoryIds);

            var newRequest = new HeadwordSearchRequestContract
            {
                ConditionConjunction = listSearchCriteriaContracts,
            };

            var client      = GetBookClient();
            var resultCount = client.SearchHeadwordCount(newRequest, GetDefaultProjectType());

            return(Json(resultCount));
        }
        public List <HeadwordContract> SearchHeadword(HeadwordSearchRequestContract request, ProjectTypeContract projectType)
        {
            try
            {
                var result = m_client.Post <List <HeadwordContract> >($"headword/search?projectType={projectType}", request);
                return(result);
            }
            catch (HttpRequestException e)
            {
                if (m_logger.IsErrorEnabled())
                {
                    m_logger.LogError("{0} failed with {1}", m_client.GetCurrentMethod(), e);
                }

                throw;
            }
        }
Exemple #8
0
        public long SearchHeadwordByCriteriaCount(HeadwordSearchRequestContract request, ProjectTypeContract projectType)
        {
            m_authorizationManager.AddAuthorizationCriteria(request.ConditionConjunction);

            var processedCriterias = m_metadataSearchCriteriaProcessor.ProcessSearchCriterias(request.ConditionConjunction);
            var projectTypeEnum    = m_mapper.Map <ProjectTypeEnum>(projectType);

            var queryCreator = new SearchCriteriaQueryCreator(processedCriterias.ConjunctionQuery, processedCriterias.MetadataParameters, projectTypeEnum)
            {
                Start = PagingHelper.GetStart(request.Start),
                Count = PagingHelper.GetCount(request.Count)
            };

            if (processedCriterias.NonMetadataCriterias.Count > 0)
            {
                // Search in fulltext DB

                // 1) search in metadata
                var projectIdentificatorList = m_bookRepository.InvokeUnitOfWork(x => x.SearchProjectIdByCriteriaQuery(queryCreator));
                if (projectIdentificatorList.Count == 0)
                {
                    return(0);
                }

                // 2) search in fulltext
                var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(projectType);
                var result          = fulltextStorage.SearchHeadwordByCriteriaCount(processedCriterias.NonMetadataCriterias, projectIdentificatorList);
                return(result);
            }
            else
            {
                // Search in relational DB

                var result = m_bookRepository.InvokeUnitOfWork(x => x.SearchHeadwordByCriteriaQueryCount(queryCreator));
                return(result);
            }
        }