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)); }
// 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)); }
// 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)); }
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); }
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)); }
public IActionResult List(SearchIndexViewModel input) { var viewModel = new GeneralView() { People = this.profilesService.GetAllSearch <GeneralAllPeopleView>(input), }; return(this.View(viewModel)); }
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)); }
public IActionResult Index() { //list of all categories var viewModel = new SearchIndexViewModel { Categories = this.CategoriesService.GetAll <CategoryNameIdViewModel>(), }; return(View(viewModel)); }
public ActionResult Index(string query = "", int page = 0) { var model = new SearchIndexViewModel() { Query = query, Page = page }; return(View(model)); }
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 })); }
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)); }
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)); }
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(); }
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)); }
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); }
// 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()); }
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)); }
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)); }
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(); }
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)); }
// GET: Search public ActionResult Index() { var model = new SearchIndexViewModel(); return View(model); }
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)); }
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)); }
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)); }