コード例 #1
0
        public CorpusSearchSnapshotsResultContract SearchCorpusGetSnapshotList(BookPagedCorpusSearchRequestContract request, ProjectTypeContract projectType)
        {
            try
            {
                var result = m_client.Post <CorpusSearchSnapshotsResultContract>($"bookpagedcorpus/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;
            }
        }
コード例 #2
0
        public CorpusSearchSnapshotsResultContract SearchCorpusGetSnapshotListByCriteria(int start, int count, SortTypeEnumContract?sort, SortDirectionEnumContract?sortDirection, List <SearchCriteriaContract> searchCriterias, bool fetchNumberOfResults)
        {
            var searchRequest = new BookPagedCorpusSearchRequestContract {
                Start = start, Count = count, ConditionConjunction = searchCriterias, FetchNumberOfResults = fetchNumberOfResults, Sort = sort, SortDirection = sortDirection
            };

            try
            {
                var result = m_client.Post <CorpusSearchSnapshotsResultContract>("bookpagedcorpus/search", searchRequest);
                return(result);
            }
            catch (HttpRequestException e)
            {
                if (m_logger.IsErrorEnabled())
                {
                    m_logger.LogError("{0} failed with {1}", m_client.GetCurrentMethod(), e);
                }

                throw;
            }
        }
コード例 #3
0
        public IActionResult SearchCorpusGetSnapshotListResult([FromBody] BookPagedCorpusSearchRequestContract request, [FromQuery] ProjectTypeContract?projectType)
        {
            if (projectType == null)
            {
                return(Error($"Required parameter {nameof(projectType)} is not specified"));
            }

            try
            {
                var result = m_bookSearchManager.SearchCorpusGetSnapshotListByCriteria(request, projectType.Value);
                return(Ok(result));
            }
            catch (ArgumentException exception)
            {
                return(BadRequest(exception.Message));
            }
            catch (HttpErrorCodeException exception)
            {
                return(StatusCode((int)exception.StatusCode, exception.Message));
            }
        }
コード例 #4
0
ファイル: BookSearchManager.cs プロジェクト: RIDICS/ITJakub
        public CorpusSearchSnapshotsResultContract SearchCorpusGetSnapshotListByCriteria(BookPagedCorpusSearchRequestContract request,
                                                                                         ProjectTypeContract projectType)
        {
            var processedCriterias   = GetAuthorizatedProcessedCriterias(request.ConditionConjunction);
            var nonMetadataCriterias = processedCriterias.NonMetadataCriterias;

            var projectIdentificatorList = GetProjectIdentificatorList(processedCriterias.ConjunctionQuery, processedCriterias.MetadataParameters, projectType);

            if (projectIdentificatorList.Count == 0)
            {
                return(new CorpusSearchSnapshotsResultContract
                {
                    TotalCount = 0,
                    SnapshotList = new List <CorpusSearchSnapshotContract>(),
                });
            }

            // Search in fulltext DB
            var fulltextStorage = m_fulltextStorageProvider.GetFulltextStorage(projectType);
            var start           = m_corpusSearchManager.GetCorpusStart(request.Start);
            var count           = m_corpusSearchManager.GetCorpusCount(request.Count);

            var result = fulltextStorage.SearchCorpusGetSnapshotListByCriteria(start, count, request.Sort, request.SortDirection, nonMetadataCriterias, projectIdentificatorList, request.FetchNumberOfResults);

            return(result);
        }
コード例 #5
0
        public ActionResult <CorpusSearchSnapshotsResultContract> SearchCorpusSnapshots([FromBody] BookPagedCorpusSearchRequestContract searchRequest)
        {
            if (ContainsAnyUnsupportedCriteria(searchRequest))
            {
                return(BadRequest("Request contains unsupported criteria"));
            }

            var result = m_searchManager.SearchCorpusSnapshotsByCriteria(searchRequest);

            return(result);
        }
コード例 #6
0
        private CorpusSearchSnapshotsResultContract GetCorpusSearchResultSnapshotList(BookPagedCorpusSearchRequestContract request)
        {
            var client = GetBookClient();
            var result = client.SearchCorpusGetSnapshotList(request, GetDefaultProjectType());

            return(result);
        }
コード例 #7
0
ファイル: SearchManager.cs プロジェクト: RIDICS/ITJakub
        public CorpusSearchSnapshotsResultContract SearchCorpusSnapshotsByCriteria(BookPagedCorpusSearchRequestContract 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();

            if (searchRequest.FetchNumberOfResults)
            {
                var response = client.Search <SnapshotResourceContract>(s => s
                                                                        .Index(SnapshotIndex)
                                                                        .Type(SnapshotType)
                                                                        .Source(sf => sf.Includes(i => i.Field(f => f.SnapshotId)))
                                                                        .Query(q => q
                                                                               .Bool(b => b
                                                                                     .Filter(filterQuery)
                                                                                     .Must(mustQuery)
                                                                                     )
                                                                               )
                                                                        .From(searchRequest.Start ?? DefaultStart)
                                                                        .Size(searchRequest.Count ?? DefaultSize)
                                                                        .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)));
                })
                                                                        .Highlight(h => h
                                                                                   .PreTags(HighlightTag)
                                                                                   .PostTags(HighlightTag)
                                                                                   .Fields(f => f
                                                                                           .Field(SnapshotTextField)
                                                                                           .NumberOfFragments(FragmentsCount)
                                                                                           .FragmentSize(FragmentSize)
                                                                                           .Type(HighlighterType)
                                                                                           )
                                                                                   )
                                                                        );

                return(m_searchResultProcessor.ProcessSearchCorpusSnapshotsByCriteriaFetchResultCount(response, HighlightTag));
            }
            else
            {
                var response = client.Search <SnapshotResourceContract>(s => s
                                                                        .Index(SnapshotIndex)
                                                                        .Type(SnapshotType)
                                                                        .Source(sf => sf.Includes(i => i.Field(f => f.SnapshotId)))
                                                                        .Query(q => q
                                                                               .Bool(b => b
                                                                                     .Filter(filterQuery)
                                                                                     .Must(mustQuery)
                                                                                     )
                                                                               )
                                                                        .From(searchRequest.Start ?? DefaultStart)
                                                                        .Size(searchRequest.Count ?? DefaultSize)
                                                                        .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.ProcessSearchCorpusSnapshotsByCriteria(response));
            }
        }