public async Task <IEnumerable <SearchFacetItem> > GetGroupedCitiesAsync( CancellationToken cancellationToken) { IEnumerable <BsonDocument> docs = await _mediaStoreContext.ExecuteAggregation( CollectionNames.Media, "Media_GroupByCity", cancellationToken); var result = new List <SearchFacetItem>(); foreach (BsonDocument doc in docs) { var item = new SearchFacetItem(); item.Count = doc["count"].AsInt32; if (doc["_id"].IsString) { item.Text = doc["_id"].AsString; item.Value = doc["_id"].AsString; result.Add(item); } } return(result.OrderByDescending(x => x.Count)); }
public async Task <IEnumerable <SearchFacetItem> > GetGroupedAIObjectsAsync( CancellationToken cancellationToken) { IEnumerable <BsonDocument> docs = await _mediaStoreContext.ExecuteAggregation( CollectionNames.MediaAI, "MediaAI_GroupByObject", cancellationToken); var result = new List <SearchFacetItem>(); foreach (BsonDocument doc in docs) { var item = new SearchFacetItem(); item.Count = doc["count"].AsInt32; if (doc["_id"].IsString) { item.Value = doc["_id"].AsString; item.Text = TitleCase(item.Value.Replace("_", " ")); result.Add(item); } } return(result); }
public FacetItemInIndexViewModel( SearchFacetItem searchFacetItem, string filterText, bool displayFacetItemsWithLinks) { Type = searchFacetItem.Name; Count = searchFacetItem.Count; FilterText = filterText; DisplayWithLink = displayFacetItemsWithLinks; }
public PersonSearchResult SearchPersonNames( string searchText, string filterText) { if (string.IsNullOrWhiteSpace(searchText)) { return(new PersonSearchResult()); } using (var indexClient = new SearchIndexClient( _serviceSettings.Value.SearchServiceName, _serviceSettings.Value.SearchIndexClientName, new SearchCredentials( _serviceSettings.Value.PrimaryAdminKeyInAzurePortal))) { // // Search query // SearchParameters parameters; DocumentSearchResult <PersonIndexModel> search; parameters = new SearchParameters { Facets = new[] { "gender" }, //Select = new[] { "names" }, //HighlightFields = new[] { "names" }, //Filter = "gender eq 'Male'", IncludeTotalResultCount = true }; // Filter if (!string.IsNullOrWhiteSpace(filterText)) { parameters.Filter = filterText; } search = indexClient.Documents.Search <PersonIndexModel>(searchText, parameters); // // Map and return results // var mappedSearchResult = new PersonSearchResult(); if (search.Count != null) { mappedSearchResult.NumberOfItemsInSearchResult = (int)search.Count; } mappedSearchResult.NumberOfItemsOnThisPage = search.Results.Count; // Get persons foreach (var result in search.Results) { var personDocument = new PersonDocument { PersonGuid = result.Document.PersonGuid, Gender = result.Document.Gender, YearOfBirth = result.Document.YearOfBirth, YearOfDeath = result.Document.YearOfDeath, Age = result.Document.Age }; // Get names and create highlights if possible try { foreach (var name in result.Document.Names) { var nameWithHighlight = Regex.Replace( name, searchText, match => "<em>" + match.Value + "</em>", RegexOptions.Compiled | RegexOptions.IgnoreCase); personDocument.Names.Add(nameWithHighlight); } } catch (ArgumentException) { // If user input contains * then Regex fails. // Then display names without highlights. personDocument.Names = result.Document.Names.ToList(); } mappedSearchResult.PersonDocuments.Add(personDocument); } // Get facets if (search.Facets != null && search.Facets.ContainsKey("gender")) { foreach (var facet in search.Facets["gender"]) { var newFacet = new SearchFacetItem { Name = facet.Value.ToString() }; if (facet.Count != null) { newFacet.Count = (int)facet.Count; } mappedSearchResult .SearchFacetItems .Add(newFacet); } } return(mappedSearchResult); } }