示例#1
0
        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));
        }
示例#2
0
        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);
        }
示例#3
0
 public FacetItemInIndexViewModel(
     SearchFacetItem searchFacetItem,
     string filterText,
     bool displayFacetItemsWithLinks)
 {
     Type            = searchFacetItem.Name;
     Count           = searchFacetItem.Count;
     FilterText      = filterText;
     DisplayWithLink = displayFacetItemsWithLinks;
 }
示例#4
0
        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);
            }
        }