private Sitecore.ContentSearch.Linq.FacetResults ExecuteGetFacets(AzureQuery query)
        {
            var query1       = query;
            var list         = new List <FacetQuery>(query.FacetQueries);
            var facetQueries = GetFacetsPipeline.Run(pipeline, new GetFacetsArgs(null, query.FacetQueries, context.Index.Configuration.VirtualFields, context.Index.FieldNameTranslator)).FacetQueries;
            var facets       = new Dictionary <string, ICollection <KeyValuePair <string, int> > >();

            foreach (var facetQuery in facetQueries)
            {
                foreach (var keyValuePair in GetFacets(query1, facetQuery.FieldNames, new int?(1), Enumerable.Cast <string>(facetQuery.FilterValues), new bool?(), null, facetQuery.MinimumResultCount))
                {
                    facets[facetQuery.CategoryName] = keyValuePair.Value;
                }
            }
            var dictionary = ProcessFacetsPipeline.Run(pipeline, new ProcessFacetsArgs(facets, query.FacetQueries, list, context.Index.Configuration.VirtualFields, context.Index.FieldNameTranslator));

            foreach (var facetQuery in list)
            {
                var originalQuery = facetQuery;
                if (originalQuery.FilterValues != null && Enumerable.Any(originalQuery.FilterValues) && dictionary.ContainsKey(originalQuery.CategoryName))
                {
                    var collection = dictionary[originalQuery.CategoryName];
                    dictionary[originalQuery.CategoryName] = Enumerable.ToList(Enumerable.Where(collection, (cv => Enumerable.Contains(originalQuery.FilterValues, cv.Key))));
                }
            }
            var facetResults = new Sitecore.ContentSearch.Linq.FacetResults();

            foreach (var keyValuePair in dictionary)
            {
                IEnumerable <FacetValue> values = Enumerable.Select(keyValuePair.Value, v => new FacetValue(v.Key, v.Value));
                facetResults.Categories.Add(new FacetCategory(keyValuePair.Key, values));
            }
            return(facetResults);
        }
        private FacetResults FormatFacetResults(Dictionary <string, ICollection <KeyValuePair <string, int> > > facetResults, List <FacetQuery> facetQueries)
        {
            var fieldTranslator = this.context.Index.FieldNameTranslator as SolrFieldNameTranslator;
            var processedFacets = ProcessFacetsPipeline.Run(this.pipeline, new ProcessFacetsArgs(facetResults, facetQueries, facetQueries, this.context.Index.Configuration.VirtualFieldProcessors, fieldTranslator));

            foreach (var originalQuery in facetQueries)
            {
                if (originalQuery.FilterValues == null || !originalQuery.FilterValues.Any())
                {
                    continue;
                }

                if (!processedFacets.ContainsKey(originalQuery.CategoryName))
                {
                    continue;
                }

                var categoryValues = processedFacets[originalQuery.CategoryName];
                processedFacets[originalQuery.CategoryName] = categoryValues.Where(cv => originalQuery.FilterValues.Contains(cv.Key)).ToList();
            }

            var facetFormattedResults = new FacetResults();

            foreach (var group in processedFacets)
            {
                if (fieldTranslator == null)
                {
                    continue;
                }

                var key = group.Key;

                if (key.Contains(","))
                {
                    key = fieldTranslator.StripKnownExtensions(key.Split(new[] { ',' }, StringSplitOptions.RemoveEmptyEntries));
                }
                else
                {
                    key = fieldTranslator.StripKnownExtensions(key);
                }

                var values = @group.Value.Select(v => new FacetValue(v.Key, v.Value));
                facetFormattedResults.Categories.Add(new FacetCategory(key, values));
            }

            return(facetFormattedResults);
        }
Пример #3
0
        private FacetResults FormatFacetResults(Dictionary <string, ICollection <KeyValuePair <string, int> > > facetResults, List <FacetQuery> facetQueries)
        {
            var fieldNameTranslator = _context.Index.FieldNameTranslator as ElasticSearchFieldNameTranslator;
            var dictionary          = ProcessFacetsPipeline.Run(new ProcessFacetsArgs(facetResults, facetQueries, facetQueries, _context.Index.Configuration.VirtualFieldProcessors, fieldNameTranslator));

            using (var enumerator = facetQueries.GetEnumerator())
            {
                while (enumerator.MoveNext())
                {
                    var originalQuery = enumerator.Current;
                    if (originalQuery == null || originalQuery.FilterValues == null || !originalQuery.FilterValues.Any() || !dictionary.ContainsKey(originalQuery.CategoryName))
                    {
                        continue;
                    }

                    var is2 = dictionary[originalQuery.CategoryName];
                    Func <KeyValuePair <string, int>, bool> func = cv => originalQuery.FilterValues.Contains(cv.Key);

                    dictionary[originalQuery.CategoryName] = is2.Where(func).ToList();
                }
            }

            var results = new FacetResults();

            foreach (var pair in dictionary)
            {
                if (fieldNameTranslator == null)
                {
                    continue;
                }

                var key = pair.Key;
                if (key.Contains(","))
                {
                    key = fieldNameTranslator.StripKnownExtensions(key.Split(new[] { "," }, StringSplitOptions.RemoveEmptyEntries));
                }
                else
                {
                    key = fieldNameTranslator.StripKnownExtensions(key);
                }

                var enumerable = from v in pair.Value select new FacetValue(v.Key, v.Value);
                results.Categories.Add(new FacetCategory(key, enumerable));
            }
            return(results);
        }
        private FacetResults FormatFacetResults(Dictionary <string, ICollection <KeyValuePair <string, int> > > facetResults, List <FacetQuery> facetQueries)
        {
            var fieldNameTranslator = this._context.Index.FieldNameTranslator as SolrFieldNameTranslator;
            var dictionary          = ProcessFacetsPipeline.Run(new ProcessFacetsArgs(facetResults, facetQueries, facetQueries, this._context.Index.Configuration.VirtualFieldProcessors, fieldNameTranslator));

            foreach (var facetQuery in facetQueries)
            {
                var originalQuery = facetQuery;
                if (originalQuery.FilterValues != null && originalQuery.FilterValues.Any() && dictionary.ContainsKey(originalQuery.CategoryName))
                {
                    var collection = dictionary[originalQuery.CategoryName];

                    /**
                     * ****** UPDATE ******
                     * Allow ALL Facets to come back from Solr
                     */
                    dictionary[originalQuery.CategoryName] = collection.Select(cv => cv).ToList();
                }
            }
            var facetResults1 = new FacetResults();

            foreach (var keyValuePair in dictionary)
            {
                if (fieldNameTranslator != null)
                {
                    var    key = keyValuePair.Key;
                    string name;
                    if (key.Contains(","))
                    {
                        name = fieldNameTranslator.StripKnownExtensions(key.Split(new char[1]
                        {
                            ','
                        }, StringSplitOptions.RemoveEmptyEntries));
                    }
                    else
                    {
                        name = fieldNameTranslator.StripKnownExtensions(key);
                    }
                    var values = keyValuePair.Value.Select(v => new FacetValue(v.Key, v.Value));
                    facetResults1.Categories.Add(new FacetCategory(name, values));
                }
            }
            return(facetResults1);
        }