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); }
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); }
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); } }
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)); }
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)); }
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; } }
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); } }