예제 #1
0
        public CorpusSearchSnapshotsResultContract BasicSearchGetResultSnapshotListPageOfIdsWithResultNumbers(
            [FromBody] CorpusListGetPageContractBasic searchQuery)
        {
            var text = searchQuery.Text;

            if (string.IsNullOrEmpty(text))
            {
                throw new ArgumentException("text can't be null in fulltext search");
            }

            var listSearchCriteriaContracts = CreateTextCriteriaList(CriteriaKey.Fulltext, text);

            var selectedBookIds     = searchQuery.SelectedBookIds;
            var selectedCategoryIds = searchQuery.SelectedCategoryIds;

            AddCategoryCriteria(listSearchCriteriaContracts, selectedBookIds, selectedCategoryIds);

            var sortBooksBy   = searchQuery.SortBooksBy;
            var sortDirection = searchQuery.SortDirection;
            var start         = searchQuery.Start;
            var count         = searchQuery.Count;

            return(GetCorpusSearchResultSnapshotList(new BookPagedCorpusSearchRequestContract
            {
                Start = start,
                Count = count,
                ConditionConjunction = listSearchCriteriaContracts,
                Sort = sortBooksBy,
                SortDirection = sortDirection,
                FetchNumberOfResults = true
            }));
        }
예제 #2
0
        public ActionResult BasicSearchGetPagePositionInAllResultPages(int hitResultTotalStart, int compositionsPerPage,
                                                                       CorpusListLookupBasicSearchParams searchParams)
        {
            var bookId = 0L;

            var compositionListStart       = 0;
            var currentResultsUpToThisBook = 0L;

            long LoadCompositionPage()
            {
                while (true)
                {
                    var query = new CorpusListGetPageContractBasic
                    {
                        Start               = compositionListStart,
                        Count               = compositionsPerPage,
                        SortBooksBy         = searchParams.SortBooksBy,
                        SortDirection       = searchParams.SortDirection,
                        Text                = searchParams.Text,
                        SelectedBookIds     = searchParams.SelectedBookIds,
                        SelectedCategoryIds = searchParams.SelectedCategoryIds
                    };
                    var numberOfResultsArray = BasicSearchGetResultSnapshotListPageOfIdsWithResultNumbers(query);

                    var compositionResultNumbers = numberOfResultsArray.SnapshotList;
                    foreach (var composition in compositionResultNumbers)
                    {
                        currentResultsUpToThisBook += composition.ResultCount;
                        if (hitResultTotalStart >= currentResultsUpToThisBook)
                        {
                            continue;
                        }
                        bookId = composition.SnapshotId;
                        return(currentResultsUpToThisBook - composition.ResultCount);
                    }

                    compositionListStart += compositionsPerPage;
                }
            }

            var resultsUpToThisCompositionStart = LoadCompositionPage();

            return(Json(new
            {
                compositionListStart = compositionListStart,
                bookId = bookId,
                hitResultStart = (hitResultTotalStart - resultsUpToThisCompositionStart)
            }));
        }