Esempio n. 1
0
        public async Task <IActionResult> Index(string Query)
        {
            var model  = new SearchIndexViewModel();
            var userId = User.FindFirstValue(ClaimTypes.NameIdentifier);

            if (!string.IsNullOrWhiteSpace(userId))
            {
                var userInventory = await _DataAccess.UserInventoryDataAccess.GetUserInventoryByUserAsync(userId);

                var decks = await _DataAccess.DeckDataAccess.GetDecksByUserAsync(userInventory.Id);

                model.Decks = decks;
            }
            if (!string.IsNullOrWhiteSpace(Query))
            {
                model.Query   = Query;
                model.Results = await _YGOProDeckAccess.SearchCardsAsync(Query);
            }
            else
            {
                model.Query   = string.Empty;
                model.Results = new List <Card>();
            }
            return(View(model));
        }
Esempio n. 2
0
        // GET: Search
        public ActionResult Index(int?id, string search)
        {
            var pageNum = id;

            if (pageNum == null)
            {
                pageNum = 1;
            }

            var pageMax = _challengeRepository.CountSearchPages(search);

            if (id < 1 || id > pageMax)
            {
                return(new HttpNotFoundResult());
            }
            var challenges = _challengeRepository.GetSearchList(search, (int)pageNum);


            var viewModel = new SearchIndexViewModel()
            {
                Search     = search,
                Challenges = challenges,
                PageNum    = (int)pageNum,
                PageMax    = pageMax
            };

            return(View(viewModel));
        }
Esempio n. 3
0
        // GET: Search
        public ActionResult Index()
        {
            var vm     = new SearchIndexViewModel();
            var input  = new Models.Search.FetchAllTableInfoInput();
            var output = fetchTableInfoRepository.FetchAllTableInfo(input);
            var list   = new List <SearchIndexDetail>();

            foreach (var item in output.FetchTableDetails)
            {
                var i = new SearchIndexDetail();
                i.TableId          = item.TableId;
                i.TableDisplayName = item.TableDisplayName;
                list.Add(i);
            }
            vm.Details = list;

            var saveOutput = saveSearchSettingRepository.FetchAllSetting();
            var saveList   = new List <SaveSearchSettingDetail>();

            foreach (var item in saveOutput.Details)
            {
                var i = new SaveSearchSettingDetail()
                {
                    SearchSettingId   = item.SearchSettingId,
                    SearchSettingName = item.SearchSettingName,
                    TableId           = item.TableId
                };
                saveList.Add(i);
            }
            vm.SaveDetails = saveList;
            return(View(vm));
        }
        public ActionResult Index(int?page)
        {
            List <Movie> Moviez  = SearchCriteria.Movies;
            int          perpage = SearchCriteria.PerPage;

            if (perpage == 0)
            {
                perpage = 6;
            }
            if (!page.HasValue)
            {
                page = 1;
            }
            if (Moviez == null)
            {
                Moviez = mm.Read().ToList();
            }
            //Pager
            Pager pager = new Pager(Moviez.Count, page, perpage);
            SearchIndexViewModel viewModel = new SearchIndexViewModel()
            {
                Movies = Moviez.Skip((pager.CurrentPage - 1) * pager.PageSize).Take(pager.PageSize).ToList(),
                Pager  = pager,
                LastSelectedMoviesPerPage = SearchCriteria.PerPage,
                LastSelectedGenre         = SearchCriteria.GenreBy,
                LastSelectedOrderBy       = SearchCriteria.OrderByStatic
            };

            return(View(viewModel));
        }
Esempio n. 5
0
        public ActionResult Index(SearchIndexViewModel viewModel)
        {
            if (viewModel == null)
            {
                viewModel = new SearchIndexViewModel();
            }

            var filter = viewModel.Filter;

            filter = !string.IsNullOrEmpty(filter) ? filter.Trim() : string.Empty;

            if (viewModel.AllowRedirect && !string.IsNullOrEmpty(filter))
            {
                var redirectResult = TryRedirect(filter, viewModel.SearchType);

                if (redirectResult != null)
                {
                    return(redirectResult);
                }
            }

            if (!string.IsNullOrEmpty(viewModel.Tag))
            {
                viewModel.TagId = new[] { tagQueries.GetTagIdByName(viewModel.Tag) };
            }

            viewModel.Filter = filter;

            SetSearchEntryType(viewModel.SearchType);

            return(View("Index", viewModel));
        }
        public async Task <SearchIndexViewModel> UsePagination(string PageUrl)
        {
            if (String.IsNullOrEmpty(PageUrl))
            {
                return(null);
            }

            var client = new HttpClient();

            client.DefaultRequestHeaders.Add("user-agent", "Collective");

            var response = await client.GetAsync(PageUrl);

            if (response.IsSuccessStatusCode)
            {
                var responseContent = await response.Content.ReadAsAsync <DiscogsPageResponse>();

                if (responseContent != null)
                {
                    var recordList = responseContent.Results.ToList();

                    var viewModel = new SearchIndexViewModel()
                    {
                        Records    = recordList,
                        Pagination = responseContent.Pagination
                    };

                    return(viewModel);
                }

                return(null);
            }

            return(null);
        }
Esempio n. 7
0
        public async Task <IActionResult> GetSearchResultPage(string[] org, string[] repo, string query, bool isRegex, [FromQuery] Dictionary <string, List <string> > filters = null)
        {
            void CheckArgs()
            {
                if (org == null)
                {
                    throw new ArgumentNullException(nameof(org));
                }
                if (repo == null)
                {
                    throw new ArgumentNullException(nameof(repo));
                }
            }

            CheckArgs();
            if (org.Length != repo.Length)
            {
                this.TempData["Error"] = $"Number of org parameters does not match the number of repo parameters. Orgs: {string.Join(", ", org)}. Repos: {string.Join(", ", repo)}";
                return(this.RedirectToAction("Error", "Home"));
            }
            SearchIndexViewModel model = new SearchIndexViewModel
            {
                Repositories = await this.GetRepositoriesSelectList().ConfigureAwait(false),
                Query        = query,
                IsRegex      = isRegex
            };
            IReadOnlyCollection <RepositoryQueryParameter> parameters = RepositoryQueryParameter.ConvertFromArrays(org, repo);

            ManifestQueryResultViewModel queryResultViewModel = await this.GetQueryResultViewModel(parameters, query, isRegex, filters).ConfigureAwait(false);

            model.Result = queryResultViewModel;
            return(this.View("Index", model));
        }
Esempio n. 8
0
        public IActionResult List(SearchIndexViewModel input)
        {
            var viewModel = new GeneralView()
            {
                People = this.profilesService.GetAllSearch <GeneralAllPeopleView>(input),
            };

            return(this.View(viewModel));
        }
Esempio n. 9
0
        public IEnumerable <T> GetAllSearch <T>(SearchIndexViewModel model)
        {
            var people =
                this.usersRepository
                .All()
                .Where(x => x.Gender == model.Gender && x.City == model.City && x.WhatAreYouSearchingFor == model.SearchingFor && model.MinimumAge <= DateTime.UtcNow.Year - x.Date.Year && DateTime.UtcNow.Year - x.Date.Year <= model.MaximumAge);

            return(people.To <T>().Take(GlobalConstants.CountOfPeopleOnCategories).ToList());
        }
        public IActionResult Index()
        {
            var viewModel = new SearchIndexViewModel
            {
                Ingredients = this.ingredientsService.GetAllPopular <IngredientNameIdViewModel>(),
            };

            return(this.View(viewModel));
        }
        public IActionResult Index()
        {
            var viewModel = new SearchIndexViewModel
            {
                Characteristics = this.characteristicsService.GetAll <CharacteristicNameIdViewModel>(),
            };

            return(this.View(viewModel));
        }
Esempio n. 12
0
        public IActionResult Index()
        {
            //list of all categories
            var viewModel = new SearchIndexViewModel
            {
                Categories = this.CategoriesService.GetAll <CategoryNameIdViewModel>(),
            };

            return(View(viewModel));
        }
Esempio n. 13
0
        public ActionResult Index(string query = "", int page = 0)
        {
            var model = new SearchIndexViewModel()
            {
                Query = query,
                Page  = page
            };

            return(View(model));
        }
Esempio n. 14
0
        public ActionResult Search(SearchIndexViewModel searchIndexViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(View("Index"));
            }
            Stopwatch stopwatch = new Stopwatch();

            stopwatch.Start();

            HtmlWordParser parser = new HtmlWordParser();

            string[] searchedWords = parser.ParseToList(searchIndexViewModel.Expression);

            CalculateIndexRank calcBody  = new CalculateIndexRank(MvcApplication.BodyIndex);
            CalculateIndexRank calcTitle = new CalculateIndexRank(MvcApplication.TitleIndex);

            var titleBestResults = calcTitle.GetBestResults(searchedWords);
            var bodyBestResults  = calcBody.GetBestResults(searchedWords);

            CalculateFinalRank calculateFinalRank = new CalculateFinalRank();
            var results = calculateFinalRank.CalculateRank(titleBestResults, bodyBestResults);

            List <SearchResult> searchResults = new List <SearchResult>();

            foreach (KeyValuePair <int, double> keyValuePair in results)
            {
                var siteinfo = MvcApplication.UrlSiteMapper[keyValuePair.Key];
                searchResults.Add(new SearchResult()
                {
                    Title       = siteinfo.Title,
                    Description = siteinfo.Abstract,
                    Url         = siteinfo.Url,
                    Rank        = keyValuePair.Value,
                });
            }
            List <SearchResult> SortedList = searchResults.OrderByDescending(o => o.Rank).ToList();

            stopwatch.Stop();

            ViewBag.Search      = true;
            ViewBag.ElapsedTime = stopwatch.Elapsed.Milliseconds;
            ViewBag.SearchCount = SortedList.Count;

            const int pagecount = 20;

            previous = searchIndexViewModel.Expression;
            return(View("Index", new SearchIndexViewModel
            {
                SearchResults = SortedList.Skip(searchIndexViewModel.PageNo * pagecount).Take(pagecount).ToList(),
                PageNo = searchIndexViewModel.PageNo,
                PageCount = SortedList.Count / pagecount,
                Expression = searchIndexViewModel.Expression
            }));
        }
Esempio n. 15
0
        public async Task <IActionResult> Index()
        {
            SearchIndexViewModel model = new SearchIndexViewModel();

#pragma warning disable S125 // Sections of code should not be commented out - remember to implement it... someday:)
            //   Task<IEnumerable<SearchKeywordData>> searchStatsTask = this.statisticsService.GetFlattened();
            //  await searchStatsTask.ConfigureAwait(false);
            // model.TopSearchedTags = searchStatsTask.Result.ToList();
#pragma warning restore S125 // Sections of code should not be commented out

            model.Repositories = await this.GetRepositoriesSelectList().ConfigureAwait(false);


            return(this.View(model));
        }
Esempio n. 16
0
        public ActionResult SearchUsers()
        {
            SearchIndexViewModel model = new SearchIndexViewModel();

            try
            {
                model.Pattern   = "";
                model.ShowUsers = true;
            }
            catch (Exception e)
            {
                Logger.GenerateError(e, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType);
            }
            return(View("~/Views/Search/Index.cshtml", model));
        }
Esempio n. 17
0
        private void ShowSearchResult(SearchIndexViewModel index)
        {
            if (index.TotalDocumentsFound == 0)
            {
                return;
            }

            var form         = _formManager.Get <SearchResultForm>(mdi: MdiParent, multipleInstance: true);
            var searchResult = _searchService.ExecuteSearch(
                terms: searchTermTextBox.Text.Split(' '),
                indexes: index.IndexName
                ).SingleOrDefault();

            form.SearchResult = searchResult;
            form.Show();
        }
Esempio n. 18
0
        public ActionResult Index(string pattern = "")
        {
            SearchIndexViewModel model = new SearchIndexViewModel();

            try
            {
                ViewBag.Title   = "[[[Search]]]";
                model.Pattern   = pattern;
                model.ShowUsers = true;
                model.ShowPages = true;
            }
            catch (Exception e)
            {
                Logger.GenerateError(e, System.Reflection.MethodBase.GetCurrentMethod().DeclaringType, "pattern = " + pattern);
            }
            return(View(model));
        }
Esempio n. 19
0
        private SearchIndexViewModel GetRepositoriesSelectList(string org, string repo)
        {
            var model = new SearchIndexViewModel();
            List <SelectListItem> items = new List <SelectListItem>();

            SelectListGroup group = new SelectListGroup()
            {
                Name = org
            };

            SelectListItem item = new SelectListItem()
            {
                Text = repo, Value = $"{org}:{repo}", Group = group
            };

            items.Add(item);
            model.Repositories = items;

            return(model);
        }
Esempio n. 20
0
        // GET: Search
        public async Task <IActionResult> Index(string searchString)
        {
            if (String.IsNullOrEmpty(searchString))
            {
                return(View());
            }

            var discogsResponse = await GetRequestFromDiscogs(searchString);

            if (discogsResponse != null)
            {
                var recordList = discogsResponse.Results.ToList();

                var viewModel = new SearchIndexViewModel()
                {
                    Records    = recordList,
                    Pagination = discogsResponse.Pagination
                };


                return(View(viewModel));
            }
            return(View());
        }
Esempio n. 21
0
        public async Task <IActionResult> Index(string id, string q, PagerParameters pagerParameters)
        {
            var siteSettings = await _siteService.GetSiteSettingsAsync();

            Pager pager = new Pager(pagerParameters, siteSettings.PageSize);

            var indexName = "Search";

            if (!String.IsNullOrWhiteSpace(id))
            {
                indexName = id;
            }

            if (!_luceneIndexProvider.Exists(indexName))
            {
                return(NotFound());
            }

            if (String.IsNullOrWhiteSpace(q))
            {
                return(View(new SearchIndexViewModel
                {
                    Pager = pager,
                    IndexName = id,
                    ContentItems = Enumerable.Empty <ContentItem>()
                }));
            }

            var queryParser = new MultiFieldQueryParser(_luceneSettings.GetVersion(), _luceneSettings.GetSearchFields(), _luceneSettings.GetAnalyzer());
            var query       = queryParser.Parse(QueryParser.Escape(q));

            List <int> contentItemIds = new List <int>();

            _luceneIndexProvider.Search(indexName, searcher =>
            {
                // Fetch one more result than PageSize to generate "More" links
                TopScoreDocCollector collector = TopScoreDocCollector.Create(pager.PageSize + 1, true);

                searcher.Search(query, collector);
                TopDocs hits = collector.TopDocs(pager.GetStartIndex(), pager.PageSize + 1);

                foreach (var hit in hits.ScoreDocs)
                {
                    var d = searcher.Doc(hit.Doc, IdSet);
                    contentItemIds.Add(Convert.ToInt32(d.GetField("ContentItemId").StringValue));
                }
            });

            var contentItems = new List <ContentItem>();

            foreach (var contentItemId in contentItemIds.Take(pager.PageSize))
            {
                var contentItem = await _contentManager.GetAsync(contentItemId);

                if (contentItem != null)
                {
                    contentItems.Add(contentItem);
                }
            }

            var model = new SearchIndexViewModel
            {
                HasMoreResults = contentItemIds.Count > pager.PageSize,
                Query          = q,
                Pager          = pager,
                IndexName      = id,
                ContentItems   = contentItems
            };

            return(View(model));
        }
Esempio n. 22
0
        public async Task <IActionResult> Index(string id, string q)
        {
            //  var siteSettings = await _siteService.GetSiteSettingsAsync();
            //  var pager = new Pager(pagerParameters, siteSettings.PageSize);

            var indexName = "dev_testIndex1";

            if (!string.IsNullOrWhiteSpace(id))
            {
                indexName = id;
            }

//            if (!_algoliaIndexProvider.Exists(indexName))
//            {
//                return NotFound();
//            }

//            if (string.IsNullOrWhiteSpace(q))
//            {
//                return View(new SearchIndexViewModel
//                {
//                    Pager = pager,
//                    IndexName = id,
//                    ContentItems = Enumerable.Empty<ContentItem>()
//                });
//            }
            var algoliaSearchSettings = await _algoliaIndexManager.GetAlgoliaSearchSettingsAsync();



            if (algoliaSearchSettings == null || algoliaSearchSettings?.SearchOnlyApiKey == null)
//            if (algoliaSearchSettings == null || algoliaSearchSettings?.DefaultSearchFields == null)
            {
                Logger.LogInformation("Couldn't execute search. No Algolia Search settings  was defined.");

                return(View(new SearchIndexViewModel
                {
                    Settings = algoliaSearchSettings
//                    HasMoreResults = false,
//                    Query = q,
//                    Pager = pager,
//                    IndexName = id,
//                    ContentItems = Enumerable.Empty<ContentItem>()
                }));
            }

//            var queryParser = new MultiFieldQueryParser(LuceneSettings.DefaultVersion, luceneSettings.DefaultSearchFields, new StandardAnalyzer(LuceneSettings.DefaultVersion));
//            var query = queryParser.Parse(QueryParser.Escape(q));
//
//            int start = pager.GetStartIndex(), size = pager.PageSize, end = size + 1;// Fetch one more result than PageSize to generate "More" links
//            var contentItemIds = await _searchQueryService.ExecuteQueryAsync(query, indexName, start, end);
//
//            var contentItems = new List<ContentItem>();
//            foreach (var contentItemId in contentItemIds.Take(size))
//            {
//                var contentItem = await _contentManager.GetAsync(contentItemId);
//                if (contentItem != null)
//                {
//                    contentItems.Add(contentItem);
//                }
//            }

            var model = new SearchIndexViewModel
            {
                Settings = algoliaSearchSettings

//                HasMoreResults = contentItemIds.Count > size,
//                Query = q,
//                Pager = pager,
//                IndexName = id,
//                ContentItems = contentItems
            };

            return(View(model));
        }
Esempio n. 23
0
        public async Task <IActionResult> Search(string id, string q)
        {
            var indexName = "dev_testIndex1";

            if (!string.IsNullOrWhiteSpace(id))
            {
                indexName = id;
            }


            var algoliaSearchSettings = await _algoliaIndexManager.GetAlgoliaSearchSettingsAsync();

            if (algoliaSearchSettings == null || algoliaSearchSettings?.SearchOnlyApiKey == null)
//            if (algoliaSearchSettings == null || algoliaSearchSettings?.DefaultSearchFields == null)
            {
                Logger.LogInformation("Couldn't execute search. No Algolia Search settings  was defined.");

                return(View(new SearchIndexViewModel
                {
                    Settings = algoliaSearchSettings
//                    HasMoreResults = false,
//                    Query = q,
//                    Pager = pager,
//                    IndexName = id,
//                    ContentItems = Enumerable.Empty<ContentItem>()
                }));
            }
            var model = new SearchIndexViewModel
            {
                Settings = algoliaSearchSettings

//                HasMoreResults = contentItemIds.Count > size,
//                Query = q,
//                Pager = pager,
//                IndexName = id,
//                ContentItems = contentItems
            };

            return(View(model));



//
//
//
//
//
//
//
// var siteSettings = await _siteService.GetSiteSettingsAsync();

//            var searchContext = new AdminSearchContext
//            {
//                Index = _adminSearchSettings.AdminSearchIndex,
//                ContentTypes = _contentDefinitionManager.ListTypeDefinitions().Select(c => c.Name).ToArray(), // TODO: Once content types have a setting for which indexes they use, this should be updated to obey that
//                IndexFieldsToSearch = _adminSearchSettings.AdminSearchFields,
//                PageSize = pagerParameters.PageSize ?? siteSettings.PageSize,
//                PageNumber = pagerParameters.Page ?? 1,
//                Filters = filters,
//                SearchTerm = searchTerm
//            };
//
//            var searchResults = new AdminSearchResult();
//
//            if (filters.Any() || !string.IsNullOrWhiteSpace(searchTerm))
//            {
//                searchResults = await _searchService.SearchContent(searchContext);
//            }
//
//            var model = new AdminSearchViewModel
//            {
//                SearchFilters = await _adminSearchFilters.InvokeAsync(x => x.GetFilter(searchContext.ContentTypes), null),
//                SearchTerm = searchContext.SearchTerm,
//                ContentItems = searchResults.ContentItems,
//                TotalRecordCount = searchResults.TotalRecordCount,
//                PageSize = searchContext.PageSize,
//                PageNumber = searchContext.PageNumber,
//                Filters = searchContext.Filters
//            };
//
//            var pager = new Pager(pagerParameters, siteSettings.PageSize);
//            var pagerShape = (await New.Pager(pager))
//                .TotalItemCount(searchResults.TotalRecordCount)
//                .ShowNext(searchResults.TotalRecordCount > searchContext.PageSize * (searchContext.PageNumber + 1));
//
//            model.Pager = pagerShape;

            //  return View();
        }
Esempio n. 24
0
        public async Task <IActionResult> Index(string id, string q, PagerParameters pagerParameters)
        {
            var siteSettings = await _siteService.GetSiteSettingsAsync();

            var pager = new Pager(pagerParameters, siteSettings.PageSize);

            var indexName = "Search";

            if (!string.IsNullOrWhiteSpace(id))
            {
                indexName = id;
            }

            if (!_luceneIndexProvider.Exists(indexName))
            {
                return(NotFound());
            }

            if (string.IsNullOrWhiteSpace(q))
            {
                return(View(new SearchIndexViewModel
                {
                    Pager = pager,
                    IndexName = id,
                    ContentItems = Enumerable.Empty <ContentItem>()
                }));
            }

            var luceneSettings = await _luceneIndexingService.GetLuceneSettingsAsync();

            if (luceneSettings == null || luceneSettings?.DefaultSearchFields == null)
            {
                Logger.LogInformation("Couldn't execute search. No Lucene settings was defined.");

                return(View(new SearchIndexViewModel
                {
                    HasMoreResults = false,
                    Query = q,
                    Pager = pager,
                    IndexName = id,
                    ContentItems = Enumerable.Empty <ContentItem>()
                }));
            }

            var queryParser = new MultiFieldQueryParser(LuceneSettings.DefaultVersion, luceneSettings.DefaultSearchFields, new StandardAnalyzer(LuceneSettings.DefaultVersion));
            var query       = queryParser.Parse(QueryParser.Escape(q));

            int start = pager.GetStartIndex(), size = pager.PageSize, end = size + 1;// Fetch one more result than PageSize to generate "More" links
            var contentItemIds = await _searchQueryService.ExecuteQueryAsync(query, indexName, start, end);

            var contentItems = new List <ContentItem>();

            foreach (var contentItemId in contentItemIds.Take(size))
            {
                var contentItem = await _contentManager.GetAsync(contentItemId);

                if (contentItem != null)
                {
                    contentItems.Add(contentItem);
                }
            }

            var model = new SearchIndexViewModel
            {
                HasMoreResults = contentItemIds.Count > size,
                Query          = q,
                Pager          = pager,
                IndexName      = id,
                ContentItems   = contentItems
            };

            return(View(model));
        }
Esempio n. 25
0
 // GET: Search
 public ActionResult Index()
 {
     var model = new SearchIndexViewModel();
     return View(model);
 }
Esempio n. 26
0
        public async Task <IActionResult> Search(SearchIndexViewModel viewModel, PagerSlimParameters pagerParameters)
        {
            var permissionsProvider = _permissionProviders.FirstOrDefault(x => x.GetType().FullName == "OrchardCore.Lucene.Permissions");
            var permissions         = await permissionsProvider.GetPermissionsAsync();

            var siteSettings = await _siteService.GetSiteSettingsAsync();

            var searchSettings = siteSettings.As <LuceneSettings>();

            if (permissions.FirstOrDefault(x => x.Name == "QueryLucene" + searchSettings.SearchIndex + "Index") != null)
            {
                if (!await _authorizationService.AuthorizeAsync(User, permissions.FirstOrDefault(x => x.Name == "QueryLucene" + searchSettings.SearchIndex + "Index")))
                {
                    return(this.ChallengeOrForbid());
                }
            }
            else
            {
                _logger.LogInformation("Couldn't execute search. The search index doesn't exist.");
                return(BadRequest("Search is not configured."));
            }

            if (searchSettings.SearchIndex != null && !_luceneIndexProvider.Exists(searchSettings.SearchIndex))
            {
                _logger.LogInformation("Couldn't execute search. The search index doesn't exist.");
                return(BadRequest("Search is not configured."));
            }

            var luceneSettings = await _luceneIndexingService.GetLuceneSettingsAsync();

            if (luceneSettings == null || luceneSettings?.DefaultSearchFields == null)
            {
                _logger.LogInformation("Couldn't execute search. No Lucene settings was defined.");
                return(BadRequest("Search is not configured."));
            }

            var luceneIndexSettings = await _luceneIndexSettingsService.GetSettingsAsync(searchSettings.SearchIndex);

            if (luceneIndexSettings == null)
            {
                _logger.LogInformation($"Couldn't execute search. No Lucene index settings was defined for ({searchSettings.SearchIndex}) index.");
                return(BadRequest($"Search index ({searchSettings.SearchIndex}) is not configured."));
            }

            if (string.IsNullOrWhiteSpace(viewModel.Terms))
            {
                return(View(new SearchIndexViewModel
                {
                    SearchForm = new SearchFormViewModel("Search__Form")
                    {
                    },
                }));
            }

            var pager = new PagerSlim(pagerParameters, siteSettings.PageSize);

            // We Query Lucene index
            var analyzer    = _luceneAnalyzerManager.CreateAnalyzer(await _luceneIndexSettingsService.GetIndexAnalyzerAsync(luceneIndexSettings.IndexName));
            var queryParser = new MultiFieldQueryParser(LuceneSettings.DefaultVersion, luceneSettings.DefaultSearchFields, analyzer);
            var query       = queryParser.Parse(QueryParser.Escape(viewModel.Terms));

            // Fetch one more result than PageSize to generate "More" links
            var start = 0;
            var end   = pager.PageSize + 1;

            if (pagerParameters.Before != null)
            {
                start = Convert.ToInt32(pagerParameters.Before) - pager.PageSize - 1;
                end   = Convert.ToInt32(pagerParameters.Before);
            }
            else if (pagerParameters.After != null)
            {
                start = Convert.ToInt32(pagerParameters.After);
                end   = Convert.ToInt32(pagerParameters.After) + pager.PageSize + 1;
            }

            var contentItemIds = await _searchQueryService.ExecuteQueryAsync(query, searchSettings.SearchIndex, start, end);

            // We Query database to retrieve content items.
            IQuery <ContentItem> queryDb;

            if (luceneIndexSettings.IndexLatest)
            {
                queryDb = _session.Query <ContentItem, ContentItemIndex>()
                          .Where(x => x.ContentItemId.IsIn(contentItemIds) && x.Latest == true)
                          .Take(pager.PageSize + 1);
            }
            else
            {
                queryDb = _session.Query <ContentItem, ContentItemIndex>()
                          .Where(x => x.ContentItemId.IsIn(contentItemIds) && x.Published == true)
                          .Take(pager.PageSize + 1);
            }

            var containedItems = await queryDb.ListAsync();

            // We set the PagerSlim before and after links
            if (pagerParameters.After != null || pagerParameters.Before != null)
            {
                if (start + 1 > 1)
                {
                    pager.Before = (start + 1).ToString();
                }
                else
                {
                    pager.Before = null;
                }
            }

            if (containedItems.Count() == pager.PageSize + 1)
            {
                pager.After = (end - 1).ToString();
            }
            else
            {
                pager.After = null;
            }

            var model = new SearchIndexViewModel
            {
                Terms      = viewModel.Terms,
                SearchForm = new SearchFormViewModel("Search__Form")
                {
                    Terms = viewModel.Terms
                },
                SearchResults = new SearchResultsViewModel("Search__Results")
                {
                    ContentItems = containedItems.Take(pager.PageSize)
                },
                Pager = (await New.PagerSlim(pager)).UrlParams(new Dictionary <string, string>()
                {
                    { "Terms", viewModel.Terms }
                })
            };

            return(View(model));
        }
Esempio n. 27
0
        public async Task <IActionResult> Index(string id, string q, PagerParameters pagerParameters)
        {
            var siteSettings = await _siteService.GetSiteSettingsAsync();

            var pager = new Pager(pagerParameters, siteSettings.PageSize);

            var indexName = "Search";

            if (!string.IsNullOrWhiteSpace(id))
            {
                indexName = id;
            }

            if (!_luceneIndexProvider.Exists(indexName))
            {
                return(NotFound());
            }

            if (string.IsNullOrWhiteSpace(q))
            {
                return(View(new SearchIndexViewModel
                {
                    Pager = pager,
                    IndexName = id,
                    ContentItems = Enumerable.Empty <ContentItem>()
                }));
            }

            var luceneSettings = await _luceneIndexingService.GetLuceneSettingsAsync();

            if (luceneSettings == null)
            {
                Logger.LogInformation("Couldn't execute search. No Lucene settings was defined.");

                return(View(new SearchIndexViewModel
                {
                    HasMoreResults = false,
                    Query = q,
                    Pager = pager,
                    IndexName = id,
                    ContentItems = Enumerable.Empty <ContentItem>()
                }));
            }

            var queryParser = new MultiFieldQueryParser(LuceneSettings.DefaultVersion, luceneSettings.DefaultSearchFields, new StandardAnalyzer(LuceneSettings.DefaultVersion));
            var query       = queryParser.Parse(QueryParser.Escape(q));

            var contentItemIds = new List <string>();

            await _luceneIndexProvider.SearchAsync(indexName, searcher =>
            {
                // Fetch one more result than PageSize to generate "More" links
                var collector = TopScoreDocCollector.Create(pager.PageSize + 1, true);

                searcher.Search(query, collector);
                var hits = collector.GetTopDocs(pager.GetStartIndex(), pager.PageSize + 1);

                foreach (var hit in hits.ScoreDocs)
                {
                    var d = searcher.Doc(hit.Doc, IdSet);
                    contentItemIds.Add(d.GetField("ContentItemId").GetStringValue());
                }

                return(Task.CompletedTask);
            });

            var contentItems = new List <ContentItem>();

            foreach (var contentItemId in contentItemIds.Take(pager.PageSize))
            {
                var contentItem = await _contentManager.GetAsync(contentItemId);

                if (contentItem != null)
                {
                    contentItems.Add(contentItem);
                }
            }

            var model = new SearchIndexViewModel
            {
                HasMoreResults = contentItemIds.Count > pager.PageSize,
                Query          = q,
                Pager          = pager,
                IndexName      = id,
                ContentItems   = contentItems
            };

            return(View(model));
        }
        public async Task <IActionResult> Search(SearchIndexViewModel viewModel, PagerParameters pagerParameters)
        {
            var permissionsProvider = _permissionProviders.FirstOrDefault(x => x.GetType().FullName == "OrchardCore.Lucene.Permissions");
            var permissions         = await permissionsProvider.GetPermissionsAsync();

            var siteSettings = await _siteService.GetSiteSettingsAsync();

            var searchSettings = siteSettings.As <LuceneSettings>();

            if (permissions.FirstOrDefault(x => x.Name == "QueryLucene" + searchSettings.SearchIndex + "Index") != null)
            {
                if (!await _authorizationService.AuthorizeAsync(User, permissions.FirstOrDefault(x => x.Name == "QueryLucene" + searchSettings.SearchIndex + "Index")))
                {
                    return(this.ChallengeOrForbid());
                }
            }
            else
            {
                _logger.LogInformation("Couldn't execute search. The search index doesn't exist.");
                return(BadRequest("Search is not configured."));
            }

            if (searchSettings.SearchIndex != null && !_luceneIndexProvider.Exists(searchSettings.SearchIndex))
            {
                _logger.LogInformation("Couldn't execute search. The search index doesn't exist.");
                return(BadRequest("Search is not configured."));
            }

            var luceneSettings = await _luceneIndexingService.GetLuceneSettingsAsync();

            if (luceneSettings == null || luceneSettings?.DefaultSearchFields == null)
            {
                _logger.LogInformation("Couldn't execute search. No Lucene settings was defined.");
                return(BadRequest("Search is not configured."));
            }

            var luceneIndexSettings = await _luceneIndexSettingsService.GetSettingsAsync(searchSettings.SearchIndex);

            if (luceneIndexSettings == null)
            {
                _logger.LogInformation($"Couldn't execute search. No Lucene index settings was defined for ({searchSettings.SearchIndex}) index.");
                return(BadRequest($"Search index ({searchSettings.SearchIndex}) is not configured."));
            }

            //if (string.IsNullOrWhiteSpace(viewModel.Terms))
            //{
            //    return View(new SearchIndexViewModel
            //    {
            //        SearchForm = new SearchFormViewModel("Search__Form") { },
            //    });
            //}

            var pager = new Pager(pagerParameters, siteSettings.PageSize);

            // We Query Lucene index
            var analyzer    = _luceneAnalyzerManager.CreateAnalyzer(await _luceneIndexSettingsService.GetIndexAnalyzerAsync(luceneIndexSettings.IndexName));
            var queryParser = new MultiFieldQueryParser(LuceneSettings.DefaultVersion, luceneSettings.DefaultSearchFields, analyzer);
            var query       = string.IsNullOrWhiteSpace(viewModel.Terms)
                ? new MatchAllDocsQuery()
                : queryParser.Parse(QueryParser.Escape(viewModel.Terms));

            // Fetch one more result than PageSize to generate "More" links
            var start = Math.Max(0, (pager.Page - 1) * pager.PageSize);
            var end   = Math.Max(start, start + pager.PageSize);

            var queryContentItems = (await _searchQueryService.ExecuteQueryAsync(query, searchSettings.SearchIndex, start, end));

            // We Query database to retrieve content items.
            IQuery <ContentItem> queryDb;

            if (luceneIndexSettings.IndexLatest)
            {
                queryDb = _session.Query <ContentItem, ContentItemIndex>()
                          .Where(x => x.ContentItemId.IsIn(queryContentItems.Item1) && x.Latest == true)
                          .Take(pager.PageSize);
            }
            else
            {
                queryDb = _session.Query <ContentItem, ContentItemIndex>()
                          .Where(x => x.ContentItemId.IsIn(queryContentItems.Item1) && x.Published == true)
                          .Take(pager.PageSize);
            }

            // Sort the content items by their rank in the search results returned by Lucene.
            var containedItems = (await queryDb.ListAsync()).OrderBy(x => queryContentItems.Item1.IndexOf(x.ContentItemId));

            var model = new SearchIndexViewModel
            {
                Terms      = viewModel.Terms,
                SearchForm = new SearchFormViewModel("Search__Form")
                {
                    Terms = viewModel.Terms
                },
                SearchResults = new SearchResultsViewModel("Search__Results")
                {
                    ContentItems = containedItems.Take(pager.PageSize)
                },
                Pager = (await New.Pager(pager)).TotalItemCount(queryContentItems.Item2).UrlParams(new Dictionary <string, string>()
                {
                    { "Terms", viewModel.Terms }
                })
            };

            return(View(model));
        }
Esempio n. 29
0
        public ActionResult Index(string search, int?subjectID, int?grade, string sortBy, int?page)
        {
            SearchIndexViewModel viewModel = new SearchIndexViewModel();
            var projects = db.Projects.Include(p => p.Subject);
            var ikt      = db.Ikts.AsQueryable();

            ViewBag.SubjectID = new SelectList(db.Subjects.OrderBy(s => s.Name), "ID", "Name");

            if (!string.IsNullOrEmpty(search))
            {
                projects =
                    from p in db.Projects
                    join s in db.ProjectStaffs on p.ID equals s.ProjectID into ps
                    from s in ps.DefaultIfEmpty()
                    join c in db.ProjectClasses on p.ID equals c.ProjectID into pc
                    from c in pc.DefaultIfEmpty()
                    where
                    p.Name.Contains(search) ||
                    p.Subject.Name.Contains(search) ||
                    s.Staff.FirstName.Contains(search) ||
                    s.Staff.LastName.Contains(search) ||
                    s.Staff.Username.Contains(search) ||
                    c.Class.Name.Contains(search)
                    select p;

                projects = projects.Distinct();

                ikt =
                    from i in db.Ikts
                    join s in db.IktStaffs on i.ID equals s.IktID into st
                    from s in st.DefaultIfEmpty()
                    join c in db.IktClasses on i.ID equals c.IktID into cl
                    from c in cl.DefaultIfEmpty()
                    where
                    s.Staff.FirstName.Contains(search) ||
                    s.Staff.LastName.Contains(search) ||
                    s.Staff.Username.Contains(search) ||
                    c.Class.Name.Contains(search) ||
                    i.Name.Contains(search)
                    select i;

                ikt = ikt.Distinct();


                viewModel.Search = search;
            }

            if (subjectID.HasValue)
            {
                projects = projects.Where(p => p.SubjectID == subjectID);
                ikt      = ikt.Where(i => i.Name == "");
            }

            if (grade.HasValue)
            {
                projects = projects.Where(p => p.Grade == grade);
                ikt      = ikt.Where(i => i.Name == "");
            }

            if (page > ((projects.Count() + ikt.Count()) / Constants.ItemsPerPage))
            {
                page = (int)Math.Ceiling((projects.Count() + ikt.Count()) / (float)Constants.ItemsPerPage);
            }
            int currentPage = (page ?? 1);

            List <Project> pList = projects.ToList();
            List <Ikt>     iList = ikt.ToList();

            List <SearchItem> searchItems = new List <SearchItem>();

            for (int i = 0; i < pList.Count; i++)
            {
                searchItems.Add(new SearchItem {
                    ItemID      = pList[i].ID,
                    Name        = pList[i].Name,
                    Grade       = pList[i].Grade,
                    Subject     = pList[i].Subject.Name,
                    Description = pList[i].Description,
                    CreatedDate = pList[i].CreatedDate,
                    Type        = "Project"
                });
            }
            for (int i = 0; i < iList.Count; i++)
            {
                searchItems.Add(new SearchItem
                {
                    ItemID      = iList[i].ID,
                    Name        = iList[i].Name,
                    Description = iList[i].Description,
                    Comment     = iList[i].Comment,
                    CreatedDate = iList[i].CreatedDate,
                    Type        = "Ikt"
                });
            }

            switch (sortBy)
            {
            case "nameAZ":
                searchItems = searchItems.OrderBy(s => s.Name).ToList();
                break;

            case "nameZA":
                searchItems = searchItems.OrderByDescending(s => s.Name).ToList();
                break;

            case "dateNew":
                searchItems = searchItems.OrderByDescending(s => s.CreatedDate).ToList();
                break;

            case "dateOld":
                searchItems = searchItems.OrderBy(s => s.CreatedDate).ToList();
                break;
            }

            viewModel.Grade     = grade;
            viewModel.GradeList = new Dictionary <string, int>
            {
                { "Årskurs 1", 1 },
                { "Årskurs 2", 2 },
                { "Årskurs 3", 3 },
                { "Årskurs 4", 4 },
            };
            viewModel.SubjectID = subjectID;


            viewModel.SortBy = sortBy;
            viewModel.Sort   = new Dictionary <string, string>
            {
                { "Namn: A-Ö", "nameAZ" },
                { "Namn: Ö-A", "nameZA" },
                { "Datum skapat: Nyast först", "dateNew" },
                { "Datum skapat: Äldst först", "dateOld" },
            };

            viewModel.SearchResult = searchItems.ToPagedList(currentPage, Constants.ItemsPerPage);

            return(View(viewModel));
        }