public ActionResult AdvancedSearchPaged(string json, int start, int count, short sortingEnum, bool sortAsc, IList <long> selectedBookIds, IList <int> selectedCategoryIds) { var deserialized = JsonConvert.DeserializeObject <IList <ConditionCriteriaDescriptionBase> >(json, new ConditionCriteriaDescriptionConverter()); var listSearchCriteriaContracts = Mapper.Map <List <SearchCriteriaContract> >(deserialized); AddCategoryCriteria(listSearchCriteriaContracts, selectedBookIds, selectedCategoryIds); var request = new SearchRequestContract { ConditionConjunction = listSearchCriteriaContracts, Start = start, Count = count, Sort = (SortTypeEnumContract)sortingEnum, SortDirection = sortAsc ? SortDirectionEnumContract.Asc : SortDirectionEnumContract.Desc, }; var client = GetBookClient(); var results = client.SearchAudioBook(request, GetDefaultProjectType()); var resultContracts = Mapper.Map <List <AudioBookSearchResultExtendedContract> >(results); return(Json(new { books = resultContracts }, GetJsonSerializerSettingsForBiblModule())); }
public IActionResult SearchBookResultCount([FromBody] SearchRequestContract request, [FromQuery] ProjectTypeContract?projectType) { if (projectType == null) { return(Error($"Required parameter {nameof(projectType)} is not specified")); } try { var advancedRequest = new AdvancedSearchRequestContract { ConditionConjunction = request.ConditionConjunction, Start = request.Start, Count = request.Count, Sort = request.Sort, SortDirection = request.SortDirection, FetchTerms = request.FetchTerms, Parameters = null, }; var result = m_bookSearchManager.SearchByCriteriaCount(advancedRequest, projectType.Value); return(Ok(result)); } catch (ArgumentException exception) { return(BadRequest(exception.Message)); } catch (HttpErrorCodeException exception) { return(StatusCode((int)exception.StatusCode, exception.Message)); } }
public ActionResult <FulltextSearchResultContract> SearchByCriteria([FromBody] SearchRequestContract searchRequest) { if (ContainsAnyUnsupportedCriteria(searchRequest)) { return(BadRequest("Request contains unsupported criteria")); } var result = m_searchManager.SearchProjectsByCriteria(searchRequest); return(result); }
private TermCriteriaPageConditionCreator CreateTermConditionCreatorOrDefault(SearchRequestContract request, FilteredCriterias processedCriterias) { TermCriteriaPageConditionCreator termCriteria = null; if (request.FetchTerms && request.ConditionConjunction.Any(x => x.Key == CriteriaKey.Term)) { termCriteria = new TermCriteriaPageConditionCreator(); termCriteria.AddCriteria(processedCriterias.MetadataCriterias); } return(termCriteria); }
public FulltextSearchResultContract SearchByCriteria(SearchRequestContract searchRequestContract) { try { var result = m_client.Post <FulltextSearchResultContract>("snapshot/search", searchRequestContract); return(result); } catch (HttpRequestException e) { if (m_logger.IsErrorEnabled()) { m_logger.LogError("{0} failed with {1}", m_client.GetCurrentMethod(), e); } throw; } }
public List <AudioBookSearchResultContract> SearchAudioBook(SearchRequestContract request, ProjectTypeContract projectType) { try { var result = m_client.Post <List <AudioBookSearchResultContract> >($"audiobook/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 FulltextSearchResultContract SearchProjectsByCriteria(SearchRequestContract searchRequest) { var queriesBuilder = m_queriesBuilderFactory.Create(IndexType.Snapshot); var filterQuery = queriesBuilder.GetFilterSearchQuery(searchRequest.ConditionConjunction, SnapshotIdField); var mustQuery = queriesBuilder.GetSearchQuery(searchRequest.ConditionConjunction, SnapshotTextField); var client = m_communicationProvider.GetElasticClient(); var response = client.Search <SnapshotResourceContract>(s => s .Index(SnapshotIndex) .Type(SnapshotType) .From(searchRequest.Start ?? DefaultStart) .Size(searchRequest.Count ?? DefaultSize) .Source(sf => sf .Includes(i => i .Fields( f => f.ProjectId ) ) ) .Query(q => q .Bool(b => b .Filter(filterQuery) .Must(mustQuery) ) ) .Sort(so => { if (searchRequest.SortDirection.HasValue && searchRequest.Sort.HasValue) { if (searchRequest.SortDirection.Value == SortDirectionEnumContract.Asc) { return(so.Ascending(GetElasticFieldName(searchRequest.Sort.Value))); } return(so.Descending(GetElasticFieldName(searchRequest.Sort.Value))); } return(so.Ascending(GetElasticFieldName(SortTypeEnumContract.Title))); }) ); return(m_searchResultProcessor.ProcessSearchByCriteria(response)); }
public IActionResult SearchBook([FromBody] SearchRequestContract request, [FromQuery] ProjectTypeContract?projectType) { if (projectType == null) { return(Error($"Required parameter {nameof(projectType)} is not specified")); } try { var result = m_bookSearchManager.SearchAudioByCriteria(request, projectType.Value); return(Ok(result)); } catch (ArgumentException exception) { return(BadRequest(exception.Message)); } catch (HttpErrorCodeException exception) { return(StatusCode((int)exception.StatusCode, exception.Message)); } }
public List <AudioBookSearchResultContract> SearchAudioByCriteria(SearchRequestContract 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) { Sort = request.Sort, SortDirection = request.SortDirection, Start = PagingHelper.GetStart(request.Start), Count = PagingHelper.GetCountForProject(request.Count) }; // Search only in relational DB var searchByCriteriaWork = new SearchAudioByCriteriaWork(m_metadataRepository, m_bookRepository, queryCreator); var dbResult = searchByCriteriaWork.Execute(); //var resultList = MapToSearchResult(dbResult, searchByCriteriaWork.PageCounts); var resultList = new List <AudioBookSearchResultContract>(dbResult.Count); foreach (var dbMetadata in dbResult) { var resultItem = m_mapper.Map <AudioBookSearchResultContract>(dbMetadata); resultList.Add(resultItem); if (searchByCriteriaWork.FullBookRecordingsByProjectId.TryGetValue(dbMetadata.Resource.Project.Id, out var audioList)) { resultItem.FullBookRecordings = m_mapper.Map <List <AudioContract> >(audioList); } else { resultItem.FullBookRecordings = new List <AudioContract>(); } } return(resultList); }
public ActionResult TextSearchPaged(string text, int start, int count, short sortingEnum, bool sortAsc, IList <long> selectedBookIds, IList <int> selectedCategoryIds) { var listSearchCriteriaContracts = CreateTextCriteriaList(CriteriaKey.Title, text); AddCategoryCriteria(listSearchCriteriaContracts, selectedBookIds, selectedCategoryIds); var request = new SearchRequestContract { ConditionConjunction = listSearchCriteriaContracts, Start = start, Count = count, Sort = (SortTypeEnumContract)sortingEnum, SortDirection = sortAsc ? SortDirectionEnumContract.Asc : SortDirectionEnumContract.Desc, }; var client = GetBookClient(); var results = client.SearchAudioBook(request, GetDefaultProjectType()); var resultContracts = Mapper.Map <List <AudioBookSearchResultExtendedContract> >(results); return(Json(new { books = resultContracts }, GetJsonSerializerSettingsForBiblModule())); }
public FulltextSearchResultData SearchProjectIdByCriteria(int start, int count, SortTypeEnumContract?sort, SortDirectionEnumContract?sortDirection, List <SearchCriteriaContract> criteria, IList <ProjectIdentificationResult> projects) { UpdateCriteriaWithSnapshotRestriction(criteria, projects); var fulltextServiceClient = m_communicationProvider.GetFulltextServiceClient(); var searchRequest = new SearchRequestContract { Start = start, Count = count, Sort = sort, SortDirection = sortDirection, ConditionConjunction = criteria, }; var result = fulltextServiceClient.SearchByCriteria(searchRequest); return(new FulltextSearchResultData { LongList = result.ProjectIds, SearchResultType = FulltextSearchResultType.ProjectId }); }