public PageSearchResultContract SearchPageByCriteria(long snapshotId, SearchPageRequestContract searchRequest) { var pageIdList = GetPageIds(snapshotId); var client = m_communicationProvider.GetElasticClient(); var queriesBuilder = m_queriesBuilderFactory.Create(IndexType.Page); var filterQuery = queriesBuilder.GetFilterByIdSearchQuery(pageIdList); var mustQuery = queriesBuilder.GetSearchQuery(searchRequest.ConditionConjunction, PageTextField); var pageResponse = client.Search <TextResourceContract>(s => s .Index(PageIndex) .Type(PageType) .Source(sf => sf.Excludes(i => i.Field(f => f.PageText))) .Query(q => q .Bool(b => b .Filter(filterQuery) .Must(mustQuery) ) ) .Size(DefaultSize) //WORKAROUND we need all pages which have any hits, so specify big enough number ); return(m_searchResultProcessor.ProcessSearchPageResult(pageResponse)); }
public ActionResult GetHeadwordDescriptionFromSearch(string criteria, bool isCriteriaJson, long headwordId) { List <SearchCriteriaContract> listSearchCriteriaContracts; if (isCriteriaJson) { listSearchCriteriaContracts = DeserializeJsonSearchCriteria(criteria); } else { listSearchCriteriaContracts = new List <SearchCriteriaContract> { CreateWordListContract(CriteriaKey.HeadwordDescription, criteria) }; } var client = GetBookClient(); var request = new SearchPageRequestContract { ConditionConjunction = listSearchCriteriaContracts }; var result = client.GetHeadwordTextFromSearch(headwordId, TextFormatEnumContract.Html, request); return(Json(result)); }
public long SearchHitsResultCount(long snapshotId, SearchPageRequestContract searchRequest) { var pageIdList = GetPageIds(snapshotId); var client = m_communicationProvider.GetElasticClient(); var queriesBuilder = m_queriesBuilderFactory.Create(IndexType.Page); var filterQuery = queriesBuilder.GetFilterByIdSearchQuery(pageIdList); var mustQuery = queriesBuilder.GetSearchQuery(searchRequest.ConditionConjunction, PageTextField); var pageResponse = client.Search <TextResourceContract>(s => s .Index(PageIndex) .Type(PageType) .Source(sf => sf.Excludes(i => i.Field(f => f.PageText))) .Query(q => q .Bool(b => b .Filter(filterQuery) .Must(mustQuery) ) ) .Highlight(h => h .PreTags(HighlightTag) .PostTags(HighlightTag) .Fields(f => f .Field(PageTextField) .NumberOfFragments(FragmentsCount) .FragmentSize(FragmentSize) .Type(HighlighterType) ) ) .Size(DefaultSize) //WORKAROUND we need get all hits to sum total hit count, so specify big enough number ); return(m_searchResultProcessor.ProcessSearchPageResultCount(pageResponse, HighlightTag)); }
public TextResourceContract SearchOnPageByCriteria(string textResourceId, SearchPageRequestContract searchRequest) { var queriesBuilder = m_queriesBuilderFactory.Create(IndexType.Page); var filterQuery = queriesBuilder.GetFilterByIdSearchQuery(textResourceId); var mustQuery = queriesBuilder.GetSearchQuery(searchRequest.ConditionConjunction, PageTextField); var client = m_communicationProvider.GetElasticClient(); var response = client.Search <TextResourceContract>(s => s .Index(PageIndex) .Type(PageType) .Source(sf => sf.Excludes(e => e.Field(f => f.PageText))) .Query(q => q .Bool(b => b .Filter(filterQuery) .Must(mustQuery) ) ) .Highlight(h => h .PreTags(OpeningEmphTag) .PostTags(ClosingEmphTag) .Fields(f => f .Field(PageTextField) .NumberOfFragments(0) .Type(HighlighterType) ) ) ); return(m_searchResultProcessor.ProcessSearchPageByCriteria(response)); }
public string GetPageTextFromSearch(TextResource textResource, TextFormatEnumContract format, SearchPageRequestContract searchRequest) { var fulltextServiceClient = m_communicationProvider.GetFulltextServiceClient(); var result = fulltextServiceClient.GetTextResourceFromSearch(textResource.ExternalId, format, searchRequest); return(result.PageText); }
public ActionResult <long> SearchHitsResultCount(long snapshotId, [FromBody] SearchPageRequestContract criteria) { if (ContainsAnyUnsupportedCriteria(criteria)) { return(BadRequest("Request contains unsupported criteria")); } var result = m_searchManager.SearchHitsResultCount(snapshotId, criteria); return(result); }
public string GetHeadwordTextFromSearch(HeadwordResource headwordResource, TextFormatEnumContract format, SearchPageRequestContract searchRequest) { var transformation = GetTransformationOrDefault(format, BookTypeEnum.Dictionary); using (var ssc = m_communicationProvider.GetSearchServiceClient()) { var project = headwordResource.Resource.Project; var bookVersion = headwordResource.BookVersion; var result = ssc.GetDictionaryEntryFromSearch(searchRequest.ConditionConjunction, project.ExternalId, bookVersion.ExternalId, headwordResource.ExternalId, transformation.Name, transformation.OutputFormat, transformation.ResourceLevel); return(result); } }
public ActionResult TextSearchInBookPagesWithMatchHit(string text, long projectId, long?snapshotId) { var listSearchCriteriaContracts = CreateTextCriteriaList(CriteriaKey.Fulltext, text); var client = GetBookClient(); var request = new SearchPageRequestContract { ConditionConjunction = listSearchCriteriaContracts }; var result = client.SearchPage(projectId, request); return(Json(new { pages = result })); }
public ActionResult AdvancedSearchInBookPagesWithMatchHit(string json, long projectId, long?snapshotId) { var deserialized = JsonConvert.DeserializeObject <IList <ConditionCriteriaDescriptionBase> >(json, new ConditionCriteriaDescriptionConverter()); var listSearchCriteriaContracts = Mapper.Map <List <SearchCriteriaContract> >(deserialized); var client = GetBookClient(); var request = new SearchPageRequestContract { ConditionConjunction = listSearchCriteriaContracts }; var result = client.SearchPage(projectId, request); return(Json(new { pages = result })); }
public IActionResult SearchPage(long projectId, [FromBody] SearchPageRequestContract request) { try { var result = m_bookHitSearchManager.SearchPage(projectId, request); return(Ok(result)); } catch (ArgumentException exception) { return(BadRequest(exception.Message)); } catch (HttpErrorCodeException exception) { return(StatusCode((int)exception.StatusCode, exception.Message)); } }
public List <PageContract> SearchPage(long projectId, SearchPageRequestContract request) { try { var result = m_client.Post <List <PageContract> >($"book/{projectId}/page/search", request); return(result); } catch (HttpRequestException e) { if (m_logger.IsErrorEnabled()) { m_logger.LogError("{0} failed with {1}", m_client.GetCurrentMethod(), e); } throw; } }
public string GetHeadwordTextFromSearch(long headwordId, TextFormatEnumContract format, SearchPageRequestContract request) { try { var result = m_client.PostReturnString($"book/headword/{headwordId}/text/search?format={format}", request); return(result); } catch (HttpRequestException e) { if (m_logger.IsErrorEnabled()) { m_logger.LogError("{0} failed with {1}", m_client.GetCurrentMethod(), e); } throw; } }
public IActionResult GetHeadwordTextFromSearch(long headwordId, [FromQuery] TextFormatEnumContract?format, [FromBody] SearchPageRequestContract request) { try { var formatValue = format ?? TextFormatEnumContract.Html; var result = m_bookManager.GetHeadwordText(headwordId, formatValue, request); if (result == null) { return(NotFound()); } return(Content(result)); } catch (ArgumentException exception) { return(BadRequest(exception.Message)); } catch (HttpErrorCodeException exception) { return(StatusCode((int)exception.StatusCode, exception.Message)); } }
public ActionResult GetBookSearchPageByXmlId(string query, bool isQueryJson, long?snapshotId, long pageId) { List <SearchCriteriaContract> listSearchCriteriaContracts; if (isQueryJson) { var deserialized = JsonConvert.DeserializeObject <IList <ConditionCriteriaDescriptionBase> >(query, new ConditionCriteriaDescriptionConverter()); listSearchCriteriaContracts = Mapper.Map <List <SearchCriteriaContract> >(deserialized); } else { listSearchCriteriaContracts = CreateQueryCriteriaContract(CriteriaKey.Fulltext, query); } var request = new SearchPageRequestContract { ConditionConjunction = listSearchCriteriaContracts }; var client = GetBookClient(); var text = client.GetPageTextFromSearch(pageId, TextFormatEnumContract.Html, request); return(Json(new { pageText = text }, GetJsonSerializerSettings())); }
public string GetHeadwordTextFromSearch(HeadwordResource headwordResource, TextFormatEnumContract format, SearchPageRequestContract searchRequest) { throw new NotSupportedException("Headwords/dictionaries are not supported in ElasticSearch storage."); }
public ActionResult <TextResourceContract> GetSearchTextResource(string textResourceId, [FromQuery] TextFormatEnumContract formatValue, [FromBody] SearchPageRequestContract searchPageRequestContract) { if (ContainsAnyUnsupportedCriteria(searchPageRequestContract)) { return(BadRequest("Request contains unsupported criteria")); } var textResource = m_searchManager.SearchOnPageByCriteria(textResourceId, searchPageRequestContract); textResource.PageText = m_textConverter.Convert(textResource.PageText, formatValue); textResource.PageText = m_pageWithHtmlTagsCreator.CreatePage(textResource.PageText, formatValue); return(textResource); }
public string GetHeadwordText(long headwordId, TextFormatEnumContract format, SearchPageRequestContract request = null) { m_authorizationManager.AuthorizeResource(headwordId); var headwordResource = m_bookRepository.InvokeUnitOfWork(x => x.GetHeadwordResource(headwordId, false)); if (headwordResource == null) { return(null); } var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(headwordResource.Resource.Project.ProjectType); var result = request == null ? fulltextStorage.GetHeadwordText(headwordResource, format) : fulltextStorage.GetHeadwordTextFromSearch(headwordResource, format, request); return(result); }
public string GetPageText(long resourcePageId, TextFormatEnumContract format, SearchPageRequestContract searchRequest = null) { m_authorizationManager.AuthorizeResource(resourcePageId); var textResourceList = m_bookRepository.InvokeUnitOfWork(x => x.GetPageText(resourcePageId)); var textResource = textResourceList.FirstOrDefault(); if (textResource == null) { return(null); } var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(textResource.Resource.Project.ProjectType); var result = searchRequest == null ? fulltextStorage.GetPageText(textResource, format) : fulltextStorage.GetPageTextFromSearch(textResource, format, searchRequest); return(result); }
public TextResourceContract GetTextResourceFromSearch(string resourceId, TextFormatEnumContract format, SearchPageRequestContract searchRequest) { try { var result = m_client.Post <TextResourceContract>($"text/{resourceId}/search?formatValue={format}", searchRequest); return(result); } catch (HttpRequestException e) { if (m_logger.IsErrorEnabled()) { m_logger.LogError("{0} failed with {1}", m_client.GetCurrentMethod(), e); } throw; } }
protected bool ContainsAnyUnsupportedCriteria(SearchPageRequestContract request) { return(ContainsAnyUnsupportedCriteria(request.ConditionConjunction)); }
public List <PageContract> SearchPage(long projectId, SearchPageRequestContract request) { m_authorizationManager.AuthorizeBook(projectId, PermissionFlag.ShowPublished); var termConditions = new List <SearchCriteriaContract>(); var fulltextConditions = new List <SearchCriteriaContract>(); foreach (var searchCriteriaContract in request.ConditionConjunction) { if (searchCriteriaContract.Key == CriteriaKey.Term) { termConditions.Add(searchCriteriaContract); } else if (m_supportedSearchPageCriteria.Contains(searchCriteriaContract.Key)) { fulltextConditions.Add(searchCriteriaContract); } else { throw new MainServiceException(MainServiceErrorCode.NotSupportedCriteriaKey, $"Not supported criteria key: {searchCriteriaContract.Key}", HttpStatusCode.BadRequest, new object[] { searchCriteriaContract.Key } ); } } IList <PageResource> pagesByMetadata = null; if (termConditions.Count > 0) { var termConditionCreator = new TermCriteriaPageConditionCreator(); termConditionCreator.AddCriteria(termConditions); termConditionCreator.SetProjectIds(new[] { projectId }); pagesByMetadata = m_bookRepository.InvokeUnitOfWork(x => x.GetPagesWithTerms(termConditionCreator)); } IList <PageResource> pagesByFulltext = null; if (fulltextConditions.Count > 0) { var projectIdentification = m_bookRepository.InvokeUnitOfWork(x => x.GetProjectIdentification(projectId)); var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(projectIdentification.ProjectType); var fulltextResult = fulltextStorage.SearchPageByCriteria(fulltextConditions, projectIdentification); switch (fulltextResult.SearchResultType) { case PageSearchResultType.TextId: pagesByFulltext = m_bookRepository.InvokeUnitOfWork(x => x.GetPagesByTextVersionId(fulltextResult.LongList)); break; case PageSearchResultType.TextExternalId: pagesByFulltext = m_bookRepository.InvokeUnitOfWork(x => x.GetPagesByTextExternalId(fulltextResult.StringList, projectId)); break; default: throw new ArgumentOutOfRangeException(); } } IList <PageResource> resultPages; if (pagesByMetadata != null && pagesByFulltext != null) { resultPages = pagesByMetadata.Intersect(pagesByFulltext) .OrderBy(x => x.Position) .ToList(); } else if (pagesByFulltext != null) { resultPages = pagesByFulltext; } else if (pagesByMetadata != null) { resultPages = pagesByMetadata; } else { throw new MainServiceException(MainServiceErrorCode.NoSupportedSearch, "No supported search criteria was specified" ); } var result = m_mapper.Map <List <PageContract> >(resultPages); return(result); }