protected void BindFacets(FacetResults facets, String types, List<string> tags)
        {
            litType.Visible = true;
              litTags.Visible = true;

              foreach (FacetCategory fc in facets.Categories)
              {
            if (fc.Name == "_templatename")
            {
              TypeFacetCheckList.Items.Clear();
              if (fc.Values.Count == 0) litType.Visible = false;

              foreach (var a in fc.Values)
              {
            ListItem  li = new ListItem(String.Format("{0} ({1})", a.Name, a.AggregateCount), a.Name);
            if (li.Value == types) li.Selected = true;
            TypeFacetCheckList.Items.Add(li);
              }
            }

            if (fc.Name == "__semantics")
            {
              TagsFacetCheckList.Items.Clear();
              if (fc.Values.Count == 0) litTags.Visible = false;

              foreach (var a in fc.Values)
              {
            Item tag = Sitecore.Context.Database.GetItem(new ID(a.Name));
            ListItem li = new ListItem(String.Format("{0} ({1})", tag.Name, a.AggregateCount), a.Name);
            if (tags.Contains(li.Value)) li.Selected = true;
            TagsFacetCheckList.Items.Add(li);
              }
            }
              }
        }
Example #2
0
        private RangeFacetResult <T>[] GetRangeFacetsForField <T>(FacetResults facets, string expectedField, int expectedCount)
            where T : struct
        {
            IList <FacetResult> facetCollection = GetFacetsForField(facets, expectedField, expectedCount);

            return(facetCollection.Select(f => f.AsRangeFacetResult <T>()).ToArray());
        }
        public AnalyticsIndexablesFacetResult(FacetResults facetResults)
            : this()
        {
            var byType = facetResults?.Categories?.FirstOrDefault(x => x.Name.ToLower() == "type");

            if (byType != null)
            {
                var nonEmpty = byType.Values.Where(x => x.AggregateCount > 0);
                var facets   = nonEmpty.Select(x => new AnalyticsIndexablesFacet(x.Name.ToLower(), x.AggregateCount));

                foreach (var facet in facets.OrderByDescending(c => c.ActionsAvailable).ThenBy(c => c.Type))
                {
                    var existingFacet = this.Facets.FirstOrDefault(x =>
                                                                   x.Type.Equals(facet.Type, StringComparison.CurrentCultureIgnoreCase));

                    if (existingFacet != null)
                    {
                        existingFacet.Count = facet.Count;
                    }
                    else
                    {
                        this.Facets.Add(facet);
                    }
                }
            }
        }
Example #4
0
        private bool AreFacetsEquiv(FacetResults left, FacetResults right)
        {
            //check if same number of ranges.
            if (left.Results.Count != right.Results.Count
                // || left.Results.Select(r=> r.Key).Intersect(right.Results.Select(r=> r.Key)).Count() != left.Results.Count
                )
            {
                return(false);
            }
            //deeper check onthe ranges.
            if (left.Results.Sum(r => r.Value.Values.Sum(var => var.Hits)) != right.Results.Sum(r => r.Value.Values.Sum(var => var.Hits)))
            {
                return(false);
            }

            //all the way down...
            foreach (var lfr in left.Results)
            {
                var leftFacetResult  = lfr.Value;
                var rightFacetResult = right.Results.First(r => r.Key.Contains(lfr.Key) || lfr.Key.Contains(r.Key)).Value;
                for (int i = 0; i < leftFacetResult.Values.Count; i++)
                {
                    if (leftFacetResult.Values[i].Hits != rightFacetResult.Values[i].Hits)
                    {
                        return(false);
                    }
                }
            }
            return(true);
        }
        public void ShouldWorkWithEmbeddedRavenWithoutHavingToQueryFirst()
        {
            //arrange
            using (var store = NewDocumentStore())
            {
                try
                {
                    (store).RegisterListener(new NoStaleQueriesListener());
                    store.Initialize();

                    SetupTestData(store);

                    WaitForIndexing(store);
                    //Act
                    FacetResults result = ExecuteTest(store);

                    //Assert
                    CheckResults(result);
                }
                finally
                {
                    store.Dispose();
                }
            }
        }
Example #6
0
        private void UpdateFacets(FacetResults facets, bool bindExistingFacets = false)
        {
            var existingSelectedFacets =
                SearchFacets.Select(e => new FacetGroup()
            {
                FacetName   = e.FacetName,
                FacetValues = e.FacetValues.Where(f => f.IsSelected.HasValue && f.IsSelected.Value).ToList()
            }).ToList();

            SearchFacets.Clear();

            if (facets != null)
            {
                foreach (var result in facets)
                {
                    SearchFacets.Add(new FacetGroup()
                    {
                        FacetName        = result.Key,
                        FacetDisplayName = JobSearchService.FacetDefinitions.ContainsKey(result.Key) ? JobSearchService.FacetDefinitions[result.Key] : result.Key,
                        FacetValues      =
                            result.Value.Select(e => new FacetSelection()
                        {
                            FacetValue = e.Value.ToString(), IsSelected = bindExistingFacets && existingSelectedFacets.Any(ef => ef.FacetName == result.Key && ef.FacetValues.Any(fv => fv.FacetValue == e.Value.ToString())), FacetCount = e.Count
                        })
                            .ToList()
                    });
                }
            }
            OnPropertyChanged(nameof(ShowFacets));
        }
Example #7
0
        private void CheckFacetResultsMatchInMemoryData(FacetResults facetResults, List <Camera> filteredData)
        {
            //Make sure we get all range values
            Assert.Equal(filteredData.GroupBy(x => x.Manufacturer).Count(),
                         facetResults.Results["Manufacturer"].Values.Count());

            foreach (var facet in facetResults.Results["Manufacturer"].Values)
            {
                var inMemoryCount = filteredData.Count(x => x.Manufacturer.ToLower() == facet.Range);
                Assert.Equal(inMemoryCount, facet.Hits);
            }

            //Go through the expected (in-memory) results and check that there is a corresponding facet result
            //Not the prettiest of code, but it works!!!
            var costFacets = facetResults.Results["Cost_Range"].Values;

            CheckFacetCount(filteredData.Count(x => x.Cost <= 200.0m), costFacets.FirstOrDefault(x => x.Range == "[NULL TO Dx200]"));
            CheckFacetCount(filteredData.Count(x => x.Cost >= 200.0m && x.Cost <= 400), costFacets.FirstOrDefault(x => x.Range == "[Dx200 TO Dx400]"));
            CheckFacetCount(filteredData.Count(x => x.Cost >= 400.0m && x.Cost <= 600.0m), costFacets.FirstOrDefault(x => x.Range == "[Dx400 TO Dx600]"));
            CheckFacetCount(filteredData.Count(x => x.Cost >= 600.0m && x.Cost <= 800.0m), costFacets.FirstOrDefault(x => x.Range == "[Dx600 TO Dx800]"));
            CheckFacetCount(filteredData.Count(x => x.Cost >= 800.0m), costFacets.FirstOrDefault(x => x.Range == "[Dx800 TO NULL]"));

            //Test the Megapixels_Range facets using the same method
            var megapixelsFacets = facetResults.Results["Megapixels_Range"].Values;

            CheckFacetCount(filteredData.Count(x => x.Megapixels <= 3.0m), megapixelsFacets.FirstOrDefault(x => x.Range == "[NULL TO Dx3]"));
            CheckFacetCount(filteredData.Count(x => x.Megapixels >= 3.0m && x.Megapixels <= 7.0m), megapixelsFacets.FirstOrDefault(x => x.Range == "[Dx3 TO Dx7]"));
            CheckFacetCount(filteredData.Count(x => x.Megapixels >= 7.0m && x.Megapixels <= 10.0m), megapixelsFacets.FirstOrDefault(x => x.Range == "[Dx7 TO Dx10]"));
            CheckFacetCount(filteredData.Count(x => x.Megapixels >= 10.0m), megapixelsFacets.FirstOrDefault(x => x.Range == "[Dx10 TO NULL]"));
        }
Example #8
0
        private IList <FacetResult> GetFacetsForField(FacetResults facets, string expectedField, int expectedCount)
        {
            Assert.True(facets.ContainsKey(expectedField));
            IList <FacetResult> facetCollection = facets[expectedField];

            Assert.Equal(expectedCount, facetCollection.Count);
            return(facetCollection);
        }
        private static FacetResults ExecuteTest(IDocumentStore store)
        {
            FacetResults result = store.DatabaseCommands.GetFacets("Product/AvailableForSale2", new IndexQuery {
                Query = "MyName1", DefaultField = "Any"
            }, "facets/ProductFacets");

            return(result);
        }
Example #10
0
        private void CheckFacetResultsMatchInMemoryData(FacetResults facetResults, List <Camera> filteredData, IList <DateTime> dates)
        {
            //Test the Megapixels_Range facets using the same method
            var dateOfListingFacets = facetResults.Results["DateOfListing_Range"].Values;

            CheckFacetCount(filteredData.Count(x => x.DateOfListing <= dates.First()), dateOfListingFacets.FirstOrDefault(x => x.Range.Contains("NULL TO")));
            CheckFacetCount(filteredData.Count(x => x.DateOfListing >= dates.Last()), dateOfListingFacets.FirstOrDefault(x => x.Range.Contains("TO NULL")));
        }
Example #11
0
        public ActionResult FacetList(SearchQuery query)
        {
            var          parameters = GetRenderingParameters <FacetParameters>();
            FacetResults results    = GetFacetsForParameters(parameters, query);

            Reboot.Core.Search.FacetResults facets = results;
            return(View(facets));
        }
Example #12
0
        public DynamicAggregation()
        {
            using (var store = new DocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    #region dynamic_aggregation_1
                    FacetResults facetResults = session
                                                .Query <Order, Orders_All>()
                                                .Where(x => x.Total > 500)
                                                .AggregateBy(x => x.Product)
                                                .SumOn(x => x.Total)
                                                .ToList();
                    #endregion
                }

                using (var session = store.OpenSession())
                {
                    #region dynamic_aggregation_range

                    FacetResults facetResults = session.Query <Order, Orders_All>()
                                                .AggregateBy(x => x.Product)
                                                .AddRanges(
                        x => x.Total < 100,
                        x => x.Total >= 100 && x.Total < 500,
                        x => x.Total >= 500 && x.Total < 1500,
                        x => x.Total >= 1500
                        )
                                                .SumOn(x => x.Total)
                                                .ToList();
                    #endregion
                }

                using (var session = store.OpenSession())
                {
                    #region dynamic_aggregation_multiple_items
                    FacetResults facetResults = session.Query <Order, Orders_All>()
                                                .AggregateBy(x => x.Product)
                                                .SumOn(x => x.Total)
                                                .CountOn(x => x.Total)
                                                .AndAggregateOn(x => x.Currency)
                                                .MinOn(x => x.Total)
                                                .ToList();
                    #endregion
                }

                using (var session = store.OpenSession())
                {
                    #region dynamic_aggregation_different_fieldss
                    FacetResults facetResults = session.Query <Order, Orders_All>()
                                                .AggregateBy(x => x.Product)
                                                .MaxOn(x => x.Total)
                                                .MinOn(x => x.Currency)
                                                .ToList();
                    #endregion
                }
            }
        }
        private static void CheckResults(FacetResults result)
        {
            Assert.Contains("Brand", result.Results.Select(x => x.Key));
            FacetResult facetResult = result.Results["Brand"];

            Assert.Equal(1, facetResult.Values.Count);
            facetResult.Values[0] = new FacetValue {
                Range = "mybrand1", Hits = 1
            };
        }
        public FacetResults GetFacets(string index, IndexQuery indexQuery, List <Facet> facets, int start = 0, int?pageSize = null)
        {
            var results       = new FacetResults();
            var defaultFacets = new Dictionary <string, Facet>();
            var rangeFacets   = new Dictionary <string, List <ParsedRange> >();

            foreach (var facet in facets)
            {
                var key = string.IsNullOrWhiteSpace(facet.DisplayName) ? facet.Name : facet.DisplayName;

                defaultFacets[key] = facet;
                if (facet.Aggregation != FacetAggregation.Count && facet.Aggregation != FacetAggregation.None)
                {
                    if (string.IsNullOrEmpty(facet.AggregationField))
                    {
                        throw new InvalidOperationException("Facet " + facet.Name + " cannot have aggregation set to " +
                                                            facet.Aggregation + " without having a value in AggregationField");
                    }

                    if (facet.AggregationField.EndsWith("_Range") == false)
                    {
                        facet.AggregationField = facet.AggregationField + "_Range";
                    }
                }


                switch (facet.Mode)
                {
                case FacetMode.Default:
                    results.Results[key] = new FacetResult();
                    break;

                case FacetMode.Ranges:
                    rangeFacets[key]     = facet.Ranges.Select(range => ParseRange(facet.Name, range)).ToList();
                    results.Results[key] = new FacetResult
                    {
                        Values = facet.Ranges.Select(range => new FacetValue
                        {
                            Range = range,
                        }).ToList()
                    };

                    break;

                default:
                    throw new ArgumentException(string.Format("Could not understand '{0}'", facet.Mode));
                }
            }

            var queryForFacets = new QueryForFacets(database, index, defaultFacets, rangeFacets, indexQuery, results, start, pageSize);

            queryForFacets.Execute();

            return(results);
        }
Example #15
0
        public QueryResults(ISearchRequest request, SearchResults <T> results, FacetResults facets)
        {
            Request = request;
            Results = results.Hits.Select(x => x.Document).Where(x => x != null).ToList();

            _totalResults = new Lazy <int>(() => results.TotalSearchResults);
            _facets       = new Lazy <IEnumerable <FacetGroup> >(() => facets == null
                                ? new List <FacetGroup>()
                                : BuildFacetResults(request.QueryParameters, facets.Categories));

            _availableRefinements = new Lazy <IEnumerable <ISearchRefinement> >(request.GetRefinements);
        }
        public HowToPerformQueriesLazily()
        {
            using (var store = new DocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    #region lazy_2
                    Lazy <IEnumerable <Employee> > employeesLazy = session
                                                                   .Query <Employee>()
                                                                   .Where(x => x.FirstName == "Robert")
                                                                   .Lazily();

                    IEnumerable <Employee> employees = employeesLazy.Value;                    // query will be executed here
                    #endregion
                }

                using (var session = store.OpenSession())
                {
                    #region lazy_5
                    Lazy <int> countLazy = session
                                           .Query <Employee>()
                                           .Where(x => x.FirstName == "Robert")
                                           .CountLazily();

                    int count = countLazy.Value;                     // query will be executed here
                    #endregion
                }

                using (var session = store.OpenSession())
                {
                    #region lazy_7
                    Lazy <SuggestionQueryResult> suggestLazy = session
                                                               .Query <Employee>()
                                                               .SuggestLazy();

                    SuggestionQueryResult suggest = suggestLazy.Value;                     // query will be executed here
                    string[] suggestions          = suggest.Suggestions;
                    #endregion
                }

                using (var session = store.OpenSession())
                {
                    #region lazy_9
                    Lazy <FacetResults> facetsLazy = session
                                                     .Query <Camera>("Camera/Costs")
                                                     .ToFacetsLazy("facets/CameraFacets");

                    FacetResults facets = facetsLazy.Value;                     // query will be executed here
                    Dictionary <string, FacetResult> results = facets.Results;
                    #endregion
                }
            }
        }
Example #17
0
 private FacetResults HandlRenames(FacetResults facetResults)
 {
     foreach (var rename in renames)
     {
         FacetResult value;
         if (facetResults.Results.TryGetValue(rename.Value, out value) &&
             facetResults.Results.ContainsKey(rename.Key) == false)
         {
             facetResults.Results[rename.Key] = value;
         }
     }
     return(facetResults);
 }
Example #18
0
        private FacetResults GetFacetsForParameters(IFacetParameters parameters, SearchQuery query)
        {
            IEnumerable <Guid> facetOns = parameters.FilterOnFields;
            IEnumerable <Models.Glass.Reboot.Facet> facets =
                facetOns.Select(i => SitecoreContext.GetItem <Models.Glass.Reboot.Facet>(i)).Reverse();
            // predicate = predicate.And(a => a.Status.Equals("released"));

            FacetResults results = _siteSearchService.GetFacetResultsAs <FacetableContent>(
                //Where Conditions
                w =>
            {
                var predicate = Reboot.Core.Search.SearchHelper.GetPredicate <FacetableContent>(parameters, SitecoreContext);
                w             = w.Where(predicate);
                return(w);
            }
                //Facet Set up
                , f =>
            {
                foreach (var facet in facets)
                {
                    switch (facet.FacetName)
                    {
                    case "Genres":
                        f = f.FacetOn(o => o.Genres, 1);
                        break;

                    case "Production Company":
                        f = f.FacetOn(o => o.ProductionCompanies, 1);
                        break;

                    case "Status":
                        f = f.FacetOn(o => o.Status, 1);
                        break;

                    case "Spoken Language":
                        f = f.FacetOn(o => o.SpokenLanguages, 1);
                        break;
                    }
                }

                //Expression<Func<FacetableContent, object>> expression = o => (o.GetType().InvokeMember(parameters.FacetBy, BindingFlags.GetProperty, null, o, null));
                //f =f.FacetOn(expression, 1);
                return(f);
            }
                //Sort order setup
                , s => s
                , query
                );

            return(results);
        }
 public virtual SearchFacetResults ProcessFacetResults(FacetResults results)
 {
     return(new SearchFacetResults
     {
         Total = results.Categories.Count,
         Facets = results.Categories.Select(facet =>
                                            new Facets.FacetCategory(facet.Name,
                                                                     facet.Values
                                                                     .Select(x => new FacetValue(x.Name, x.AggregateCount))
                                                                     .Where(x => x?.Name != null)
                                                                     .ToArray())
                                            ).ToArray()
     });
 }
Example #20
0
 private static void PrintFacets(FacetResults facets)
 {
     if (facets != null)
     {
         foreach (var f in facets)
         {
             Console.WriteLine("Facet: {0}", f.Name);
             if (f is TermsFacet)
             {
                 foreach (var t in (f as TermsFacet).Terms.OrderBy(t => t.Term))
                 {
                     Console.WriteLine("\t{0} ({1})", t.Term, t.Count);
                 }
             }
             else if (f is FilterFacet)
             {
                 Console.WriteLine("\tMatching: {0}", (f as FilterFacet).Count);
             }
             else if (f is StatisticalFacet)
             {
                 var sf = f as StatisticalFacet;
                 Console.WriteLine("\tMean: {0}\n\tMax: {1}\n\tMin: {2}\n\tTotal: {3}\n\tVariance: {4}\n", sf.Mean,
                                   sf.Max, sf.Min, sf.Total, sf.Variance);
             }
             else if (f is NumericRangeFacet)
             {
                 foreach (var r in (f as NumericRangeFacet).Ranges)
                 {
                     Console.WriteLine("\t{0}-{1} ({2})", r.From, r.To, r.Count);
                 }
             }
             else if (f is HistogramFacet)
             {
                 foreach (var r in (f as HistogramFacet).Entries)
                 {
                     Console.WriteLine("\t{0} ({1})", r.Key, r.Count);
                 }
             }
             else if (f is GeoDistanceFacet)
             {
                 foreach (var r in (f as GeoDistanceFacet).Ranges)
                 {
                     Console.WriteLine("\t{0}-{1} ({2})", r.From.Value, r.To.Value, r.TotalCount);
                 }
             }
             Console.WriteLine();
         }
     }
 }
Example #21
0
 public QueryForFacets(
     DocumentDatabase database,
     string index,
     Dictionary <string, Facet> facets,
     Dictionary <string, List <ParsedRange> > ranges,
     IndexQuery indexQuery,
     FacetResults results)
 {
     Database   = database;
     Index      = index;
     Facets     = facets;
     Ranges     = ranges;
     IndexQuery = indexQuery;
     Results    = results;
 }
Example #22
0
 private void PrintFacetResults(FacetResults facetResults)
 {
     foreach (var kvp in facetResults.Results)
     {
         if (kvp.Value.Values.Count() > 0)
         {
             Console.WriteLine(kvp.Key + ":");
             foreach (var facet in kvp.Value.Values)
             {
                 Console.WriteLine("    {0}: {1}", facet.Range, facet.Hits);
             }
             Console.WriteLine();
         }
     }
 }
Example #23
0
        public FacetResults GetFacets(string index, IndexQuery indexQuery, string facetSetupDoc, int start = 0, int?pageSize = null)
        {
            var facetSetup = database.Get(facetSetupDoc, null);

            if (facetSetup == null)
            {
                throw new InvalidOperationException("Could not find facets document: " + facetSetupDoc);
            }

            var facets = facetSetup.DataAsJson.JsonDeserialization <FacetSetup>().Facets;

            var results       = new FacetResults();
            var defaultFacets = new Dictionary <string, Facet>();
            var rangeFacets   = new Dictionary <string, List <ParsedRange> >();

            foreach (var facet in facets)
            {
                switch (facet.Mode)
                {
                case FacetMode.Default:
                    //Remember the facet, so we can run them all under one query
                    defaultFacets[facet.Name]   = facet;
                    results.Results[facet.Name] = new FacetResult();
                    break;

                case FacetMode.Ranges:
                    rangeFacets[facet.Name]     = facet.Ranges.Select(range => ParseRange(facet.Name, range)).ToList();
                    results.Results[facet.Name] = new FacetResult
                    {
                        Values = facet.Ranges.Select(range => new FacetValue
                        {
                            Range = range,
                        }).ToList()
                    };

                    break;

                default:
                    throw new ArgumentException(string.Format("Could not understand '{0}'", facet.Mode));
                }
            }

            var queryForFacets = new QueryForFacets(database, index, defaultFacets, rangeFacets, indexQuery, results, start, pageSize);

            queryForFacets.Execute();

            return(results);
        }
Example #24
0
        public void HandleResponses(GetResponse[] responses, ShardStrategy shardStrategy)
        {
            var result = new FacetResults();

            foreach (var response in responses.Select(response => (RavenJObject)response.Result))
            {
                var facet = response.JsonDeserialization <FacetResults>();
                foreach (var facetResult in facet.Results)
                {
                    if (!result.Results.ContainsKey(facetResult.Key))
                    {
                        result.Results[facetResult.Key] = new FacetResult();
                    }



                    var newFacetResult = result.Results[facetResult.Key];


                    foreach (var facetValue in facetResult.Value.Values)
                    {
                        var existingFacetValueRange = newFacetResult.Values.Find((x) => x.Range == facetValue.Range);
                        if (existingFacetValueRange != null)
                        {
                            existingFacetValueRange.Hits += facetValue.Hits;
                        }
                        else
                        {
                            newFacetResult.Values.Add(new FacetValue()
                            {
                                Hits = facetValue.Hits, Range = facetValue.Range
                            });
                        }
                    }


                    foreach (var facetTerm in facetResult.Value.RemainingTerms)
                    {
                        if (!newFacetResult.RemainingTerms.Contains(facetTerm))
                        {
                            newFacetResult.RemainingTerms.Add(facetTerm);
                        }
                    }
                }
            }

            Result = result;
        }
Example #25
0
        /// <summary>
        /// Updates the content search result with facets.
        /// </summary>
        /// <param name="facetResults">All possible facets.</param>
        /// <param name="facetResultsAfterSearch">Facets that contain results after querying using the search text. This is used to get the result count per facet.</param>
        /// <param name="searchResults">The collection of SearchResultItems after the search on searchtext and filtering on templates.</param>
        /// <param name="contentSearchResult">Result object which is updated with facets.</param>
        private void UpdateResultWithFacets(FacetResults facetResults, FacetResults facetResultsAfterSearch, SearchResults <SearchResultItem> searchResults, ContentSearchResult contentSearchResult)
        {
            var           allFacets    = facetResults.Categories.FirstOrDefault();
            FacetCategory searchFacets = null;

            if (facetResultsAfterSearch != null)
            {
                searchFacets = facetResultsAfterSearch.Categories.FirstOrDefault();
            }
            var searchResultFacets = searchResults.Facets.Categories.FirstOrDefault();

            if (allFacets != null && searchFacets != null)
            {
                contentSearchResult.Facets = allFacets.Values.Select(facet => GetFacet(facet, searchFacets, searchResultFacets)).OrderBy(facet => facet.Name).ToList();
            }
        }
Example #26
0
        public void Step3()
        {
            using (var store = new DocumentStore())
            {
                using (var session = store.OpenSession())
                {
                    List <Facet> facets = new List <Facet>();

                    #region step_3_0
                    FacetResults facetResults = session
                                                .Query <Camera, Cameras_ByManufacturerModelCostDateOfListingAndMegapixels>()
                                                .Where(x => x.Cost >= 100 && x.Cost <= 300)
                                                .ToFacets(facets);
                    #endregion
                }

                using (var session = store.OpenSession())
                {
                    List <Facet> facets = new List <Facet>();

                    #region step_3_1
                    FacetResults facetResults = session
                                                .Advanced
                                                .DocumentQuery <Camera, Cameras_ByManufacturerModelCostDateOfListingAndMegapixels>()
                                                .WhereBetweenOrEqual(x => x.Cost, 100, 300)
                                                .ToFacets(facets);
                    #endregion
                }
            }

            using (var store = new DocumentStore())
            {
                List <Facet> facets = new List <Facet>();

                #region step_3_2
                FacetResults facetResults = store
                                            .DatabaseCommands
                                            .GetFacets(
                    "Cameras/ByManufacturerModelCostDateOfListingAndMegapixels",
                    new IndexQuery
                {
                    Query = "Cost_Range:[Dx100 TO Dx300]"
                },
                    facets);
                #endregion
            }
        }
Example #27
0
        protected void BindFacets(FacetResults facets, String types, List <string> tags)
        {
            litType.Visible = true;
            litTags.Visible = true;

            foreach (FacetCategory fc in facets.Categories)
            {
                if (fc.Name == "_templatename")
                {
                    TypeFacetCheckList.Items.Clear();
                    if (fc.Values.Count == 0)
                    {
                        litType.Visible = false;
                    }

                    foreach (var a in fc.Values)
                    {
                        ListItem li = new ListItem(String.Format("{0} ({1})", a.Name, a.AggregateCount), a.Name);
                        if (li.Value == types)
                        {
                            li.Selected = true;
                        }
                        TypeFacetCheckList.Items.Add(li);
                    }
                }

                if (fc.Name == "__semantics")
                {
                    TagsFacetCheckList.Items.Clear();
                    if (fc.Values.Count == 0)
                    {
                        litTags.Visible = false;
                    }

                    foreach (var a in fc.Values)
                    {
                        Item     tag = Sitecore.Context.Database.GetItem(new ID(a.Name));
                        ListItem li  = new ListItem(String.Format("{0} ({1})", tag.Name, a.AggregateCount), a.Name);
                        if (tags.Contains(li.Value))
                        {
                            li.Selected = true;
                        }
                        TagsFacetCheckList.Items.Add(li);
                    }
                }
            }
        }
        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);
        }
Example #29
0
        /// <summary>
        /// ContentSearch based on search text and templates (facets).
        /// </summary>
        /// <param name="filter">The ContentSearchFilter.</param>
        /// <returns></returns>
        public ContentSearchResult SearchWithFacets(ContentSearchFilter filter)
        {
            var contentSearchResult = new ContentSearchResult
            {
                Paging = new Paging(),
                ContentSearchResultItems = new List <ContentSearchResultItem>()
            };
            string index = GetSearchIndexName();

            using (var context = ContentSearchManager.GetIndex(index).CreateSearchContext())
            {
                // Null query, will be updated with search text and template filter.
                var query = context.GetQueryable <SearchResultItem>();

                // Retrieve all possible facets before a query is done with the search text.
                var          facetResults            = query.FacetOn(item => item.TemplateId).GetFacets();
                FacetResults facetResultsAfterSearch = null;
                if (filter != null)
                {
                    ApplySearchStringQuery(filter.SearchText, ref query);
                    facetResultsAfterSearch = query.FacetOn(item => item.TemplateId).GetFacets();
                    ApplyTemplateQuery(filter.Templates, ref query);
                }
                var searchResult = query.FacetOn(item => item.TemplateId).GetResults();
                UpdateResultWithFacets(facetResults, facetResultsAfterSearch, searchResult, contentSearchResult);

                var distinctHits = searchResult.Hits.Distinct().ToList();

                UpdateResultWithItem(
                    contentSearchResult,
                    distinctHits,
                    NewsTemplate.ID);
                UpdateResultWithItem(
                    contentSearchResult,
                    distinctHits,
                    EventTemplate.ID);


                contentSearchResult.ResultCount = contentSearchResult.ContentSearchResultItems.Count;

                int numberToSkip;
                UpdateResultWithPaging(contentSearchResult, filter, out numberToSkip);
                contentSearchResult.ContentSearchResultItems = contentSearchResult.ContentSearchResultItems.Skip(numberToSkip).Take(contentSearchResult.Paging.PageSize).ToList();

                return(contentSearchResult);
            }
        }
Example #30
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);
        }
        public void ShouldWorkWithRavenServer()
        {
            //arrange
            using (var store = NewRemoteDocumentStore())
            {
                store.RegisterListener(new NoStaleQueriesListener());

                SetupTestData(store);

                WaitForIndexing(store);

                //Act
                FacetResults result = ExecuteTest(store);
                WaitForUserToContinueTheTest();
                //Assert
                CheckResults(result);
            }
        }
Example #32
0
 private static void PrintFacets(FacetResults facets)
 {
     if (facets != null)
     {
         foreach (var f in facets)
         {
             Console.WriteLine("Facet: {0}", f.Name);
             if (f is TermsFacet)
             {
                 foreach (var t in (f as TermsFacet).Terms.OrderBy(t => t.Term))
                 {
                     Console.WriteLine("\t{0} ({1})", t.Term, t.Count);
                 }
             }
             else if (f is FilterFacet)
             {
                 Console.WriteLine("\tMatching: {0}", (f as FilterFacet).Count);
             }
             else if (f is StatisticalFacet)
             {
                 var sf = f as StatisticalFacet;
                 Console.WriteLine("\tMean: {0}\n\tMax: {1}\n\tMin: {2}\n\tTotal: {3}\n\tVariance: {4}\n", sf.Mean,
                     sf.Max, sf.Min, sf.Total, sf.Variance);
             }
             else if (f is NumericRangeFacet)
             {
                 foreach (var r in (f as NumericRangeFacet).Ranges)
                 {
                     Console.WriteLine("\t{0}-{1} ({2})", r.From, r.To, r.Count);
                 }
             }
             else if (f is HistogramFacet)
             {
                 foreach (var r in (f as HistogramFacet).Entries)
                 {
                     Console.WriteLine("\t{0} ({1})", r.Key, r.Count);
                 }
             }
             else if (f is GeoDistanceFacet)
             {
                 foreach (var r in (f as GeoDistanceFacet).Ranges)
                 {
                     Console.WriteLine("\t{0}-{1} ({2})", r.From.Value, r.To.Value, r.TotalCount);
                 }
             }
             Console.WriteLine();
         }
     }
 }