private static void SetupTestData(IDocumentStore store) { new Product_AvailableForSale2().Execute(store); Product product1 = new Product("MyName1", "MyBrand1"); Product product2 = new Product("MyName2", "MyBrand2"); FacetSetup facetSetup = new FacetSetup { Id = "facets/ProductFacets", Facets = new List <Facet> { new Facet { FieldName = "Brand" } } }; using (IDocumentSession docSession = store.OpenSession()) { foreach (var productDoc in docSession.Query <Product>()) { docSession.Delete(productDoc); } docSession.SaveChanges(); docSession.Store(product1); docSession.Store(product2); docSession.Store(facetSetup); docSession.SaveChanges(); } }
private static void SetupFacets(String id, IDocumentStore store) { var facet = new FacetSetup() { Id = id, Facets = { new Facet <Orders.Product>() { Name = p => p.Supplier }, new Facet <Orders.Product>() { Name = p => p.PricePerUser, Ranges = { p => p.PricePerUser <= 50, p => p.PricePerUser > 50 && p.PricePerUser <= 100, p => p.PricePerUser > 100 && p.PricePerUser <= 200, p => p.PricePerUser > 200, } }, } }; using (var session = store.OpenSession()) { session.Store(facet); session.SaveChanges(); } }
public static FacetQuery Create(DocumentsOperationContext context, IndexQueryServerSide query) { long?facetsEtag = null; DocumentsTransaction tx = null; try { var facets = new Dictionary <string, FacetSetup>(StringComparer.OrdinalIgnoreCase); foreach (var selectField in query.Metadata.SelectFields) { if (selectField.IsFacet == false) { continue; } var facetField = (FacetField)selectField; if (facetField.FacetSetupDocumentId == null || facets.ContainsKey(facetField.FacetSetupDocumentId)) { continue; } if (tx == null) { tx = context.OpenReadTransaction(); } var documentJson = context.DocumentDatabase.DocumentsStorage.Get(context, facetField.FacetSetupDocumentId); if (documentJson == null) { throw new DocumentDoesNotExistException(facetField.FacetSetupDocumentId); } if (facetsEtag.HasValue == false) { facetsEtag = documentJson.Etag; } else { facetsEtag = facetsEtag.Value ^ documentJson.Etag; } var document = FacetSetup.Create(facetField.FacetSetupDocumentId, documentJson.Data); facets[facetField.FacetSetupDocumentId] = document; } return(new FacetQuery(query, facets, facetsEtag ?? 0) { Legacy = string.IsNullOrEmpty(query.ClientVersion) == false && query.ClientVersion[0] == '4' }); } finally { tx?.Dispose(); } }
private void Setup(IDocumentStore store, List <Facet> facets, List <RangeFacet> rangeFacets) { using (var s = store.OpenSession()) { var facetSetupDoc = new FacetSetup { Id = "facets/CameraFacets", Facets = facets, RangeFacets = rangeFacets }; s.Store(facetSetupDoc); s.SaveChanges(); } CreateCameraCostIndex(store); InsertCameraData(store, _data); }
private void Setup(IDocumentStore store, List <Facet> facetsToUse) { using (var s = store.OpenSession()) { var facetSetupDoc = new FacetSetup { Id = "facets/CameraFacets", Facets = facetsToUse }; s.Store(facetSetupDoc); s.SaveChanges(); } CreateCameraCostIndex(store); InsertCameraDataAndWaitForNonStaleResults(store, _data); }
public void CanDeserializeLegacyFacetSetup() { var facets = new DynamicJsonArray { new DynamicJsonValue { [nameof(Facet.Aggregations)] = new DynamicJsonValue { [nameof(FacetAggregation.Min)] = "Test" } } }; var rangeFacets = new DynamicJsonArray { new DynamicJsonValue { [nameof(Facet.Aggregations)] = new DynamicJsonValue { [nameof(FacetAggregation.Max)] = "Test2" } } }; var djv = new DynamicJsonValue { [nameof(FacetSetup.Facets)] = facets, [nameof(FacetSetup.RangeFacets)] = rangeFacets }; using (var context = JsonOperationContext.ShortTermSingleUse()) { var json = context.ReadObject(djv, "facet/setup"); var setup = FacetSetup.Create("myId", json); Assert.Equal("myId", setup.Id); Assert.Equal(1, setup.Facets.Count); Assert.Equal(1, setup.Facets[0].Aggregations.Count); Assert.Equal("Test", setup.Facets[0].Aggregations[FacetAggregation.Min].Single().Name); Assert.Null(setup.Facets[0].Aggregations[FacetAggregation.Min].Single().DisplayName); Assert.Equal(1, setup.RangeFacets.Count); Assert.Equal(1, setup.RangeFacets[0].Aggregations.Count); Assert.Equal("Test2", setup.RangeFacets[0].Aggregations[FacetAggregation.Max].Single().Name); Assert.Null(setup.RangeFacets[0].Aggregations[FacetAggregation.Max].Single().DisplayName); } }
public IdComesBackLowerCase() { store = new EmbeddableDocumentStore { RunInMemory = true }; ((EmbeddableDocumentStore)store).RegisterListener(new NoStaleQueriesListener()); store.Initialize(); new Product_AvailableForSale3().Execute(store); Product product1 = new Product("MyName1", "MyBrand1"); product1.Id = "Products/100"; Product product2 = new Product("MyName2", "MyBrand2"); product2.Id = "Products/101"; FacetSetup facetSetup = new FacetSetup { Id = "facets/ProductFacets", Facets = new List <Facet> { new Facet { Name = "Brand" } } }; using (IDocumentSession docSession = store.OpenSession()) { foreach (var productDoc in docSession.Query <Product>()) { docSession.Delete(productDoc); } docSession.SaveChanges(); docSession.Store(product1); docSession.Store(product2); docSession.Store(facetSetup); docSession.SaveChanges(); } using (var session = store.OpenSession()) { var check = session.Query <Product>().ToList(); Assert.Equal(check.Count, 2); } }
public IdComesBackLowerCase() { _store = GetDocumentStore(); new Product_AvailableForSale3().Execute(_store); var product1 = new Product("MyName1", "MyBrand1"); product1.Id = "Products/100"; var product2 = new Product("MyName2", "MyBrand2"); product2.Id = "Products/101"; var facetSetup = new FacetSetup { Id = "facets/ProductFacets", Facets = new List <Facet> { new Facet { Name = "Brand" } } }; using (var docSession = _store.OpenSession()) { foreach (var productDoc in docSession.Query <Product>()) { docSession.Delete(productDoc); } docSession.SaveChanges(); docSession.Store(product1); docSession.Store(product2); docSession.Store(facetSetup); docSession.SaveChanges(); } using (var session = _store.OpenSession()) { var check = session.Query <Product>().ToList(); Assert.Equal(check.Count, 2); } }
private static void CreateData(IDocumentStore store) { new Product_AvailableForSale3().Execute(store); var product1 = new Product("MyName1", "MyBrand1"); product1.Id = "Products/100"; var product2 = new Product("MyName2", "MyBrand2"); product2.Id = "Products/101"; var facetSetup = new FacetSetup { Id = "facets/ProductFacets", Facets = new List <Facet> { new Facet { FieldName = "Brand" } } }; using (var docSession = store.OpenSession()) { foreach (var productDoc in docSession.Query <Product>().Customize(x => x.WaitForNonStaleResults())) { docSession.Delete(productDoc); } docSession.SaveChanges(); docSession.Store(product1); docSession.Store(product2); docSession.Store(facetSetup); docSession.SaveChanges(); } using (var session = store.OpenSession()) { var check = session.Query <Product>().ToList(); Assert.Equal(check.Count, 2); } }
private void Setup(IDocumentStore store, List <Facet> facetsToUse) { using (var s = store.OpenSession()) { var facetSetupDoc = new FacetSetup { Id = "facets/CameraFacets", Facets = facetsToUse }; s.Store(facetSetupDoc); s.SaveChanges(); store.DatabaseCommands.PutIndex("CameraCost", new IndexDefinition { Map = @"from camera in docs select new { camera.Manufacturer, camera.Model, camera.Cost, camera.DateOfListing, camera.Megapixels }" }); foreach (var camera in _data) { s.Store(camera); } s.SaveChanges(); s.Query <Camera>("CameraCost") .Customize(x => x.WaitForNonStaleResults()) .ToList(); } }
public void CanSearchOnAllProperties() { using (var store = GetDocumentStore()) { new Products_Stats().Execute(store); using (var session = store.OpenSession()) { for (int i = 0; i < 1000; i++) { var amount = i % 50 / 10f; session.Store( new Product { Category = i % 2 == 0 ? "Cat1" : "Cat2", Name = "Product " + i, Price = new Price { Currency = "USD", Amount = amount } }); } var facetSetup = new FacetSetup { Id = "facets/StatsFacet", Facets = new List <Facet> { new Facet { Name = "Category" }, new Facet { Name = "Price_Range", Mode = FacetMode.Ranges, Ranges = new List <string> { "[NULL TO Dx0]", "[Dx0.001 TO Dx0.999]", "[Dx0.999 TO Dx1.999]", "[Dx1.999 TO NULL]" } } } }; session.Store(facetSetup); session.SaveChanges(); } WaitForIndexing(store); using (var s = store.OpenSession()) { var query = s.Query <Product>("Products/Stats"); var facetResults = query.ToFacets("facets/StatsFacet"); var priceFacet = facetResults.Results["Price_Range"]; foreach (var val in priceFacet.Values) { Assert.NotEqual(0, val.Hits); } } } }
public void Default_operator_not_honoured_remote_store_ToFacetsLazy() { using (var store = GetDocumentStore()) { var facetSetup = new FacetSetup { Id = "Facets", Facets = new List <Facet>() { new Facet() { FieldName = "Facet1" }, }, }; using (var session = store.OpenSession()) { foreach (var foo in session.Query <Foo>()) { session.Delete(foo); } session.Store(facetSetup); session.Store(new Foo() { Facet1 = "term1" }); session.Store(new Foo() { Facet1 = "term2" }); session.SaveChanges(); } new Foos().Execute(store); Indexes.WaitForIndexing(store); using (var session = store.OpenSession()) { var facetResults = session.Advanced.DocumentQuery <Foo, Foos>() .UsingDefaultOperator(QueryOperator.And) .WhereEquals("Facet1", "term1") .WhereEquals("Facet1", "term2") .AggregateUsing("Facets") .Execute(); Assert.Equal(facetResults["Facet1"].Values.Count, 0); QueryStatistics stats; var query = session.Advanced.DocumentQuery <Foo, Foos>() .Statistics(out stats) .UsingDefaultOperator(QueryOperator.And) .WhereEquals("Facet1", "term1") .WhereEquals("Facet1", "term2"); facetResults = query .AggregateUsing("Facets") .ExecuteLazy().Value; Assert.Equal(facetResults["Facet1"].Values.Count, 0); } } }
public static void TryCreatingFacets(IDocumentStore store) { using (var session = store.OpenSession()) { //session.Store(new FacetSetup // { // Id = "facets/AppsFacets", // Facets = // { // new Raven.Abstractions.Data.Facet // { // Name = "AgeRating", // TermSortMode = FacetTermSortMode.ValueAsc // }, // new Raven.Abstractions.Data.Facet // { // Name = "Developer", // MaxResults = 10, // TermSortMode = FacetTermSortMode.HitsDesc // }, // new Raven.Abstractions.Data.Facet // { // Name = "Category", // TermSortMode = FacetTermSortMode.HitsDesc // }, // new Raven.Abstractions.Data.Facet // { // Name = "Subcategory", // TermSortMode = FacetTermSortMode.HitsDesc // }, // new Raven.Abstractions.Data.Facet // { // Name = "Country", // TermSortMode = FacetTermSortMode.HitsDesc, // MaxResults = 8 // }, // new Raven.Abstractions.Data.Facet // { // Name = "Language", // TermSortMode = FacetTermSortMode.HitsDesc, // MaxResults = 8 // } // } // }); var facetSetup2 = new FacetSetup { Id = "facets/StatsFacets", Facets = { new Raven.Abstractions.Data.Facet { Name = "Category" }, new Raven.Abstractions.Data.Facet { Name = "Language" }, new Raven.Abstractions.Data.Facet { Name = "SupportedPlatforms" }, new Raven.Abstractions.Data.Facet { Name = "Countries" }, new Raven.Abstractions.Data.Facet { Name = "ScoreRating_Range", Mode = FacetMode.Ranges, Ranges = { string.Format("[NULL TO {0}]", NumberUtil.NumberToString(1)), string.Format("[{0} TO {1}]", NumberUtil.NumberToString(1), NumberUtil.NumberToString(2)), string.Format("[{0} TO {1}]", NumberUtil.NumberToString(2), NumberUtil.NumberToString(3)), string.Format("[{0} TO {1}]", NumberUtil.NumberToString(3), NumberUtil.NumberToString(4)), string.Format("[{0} TO NULL]", NumberUtil.NumberToString(4)), } }, new Raven.Abstractions.Data.Facet { Name = "Price_Range", Mode = FacetMode.Ranges, Ranges = { string.Format("[NULL TO {0}]", NumberUtil.NumberToString(0.0f)), string.Format("[{0} TO {1}]", NumberUtil.NumberToString(0.0f), NumberUtil.NumberToString(0.999f)), string.Format("[{0} TO {1}]", NumberUtil.NumberToString(1.0f), NumberUtil.NumberToString(2.999f)), string.Format("[{0} TO {1}]", NumberUtil.NumberToString(3.0f), NumberUtil.NumberToString(4.999f)), string.Format("[{0} TO NULL]", NumberUtil.NumberToString(5.0f)), } } } }; session.Store(facetSetup2); session.SaveChanges(); } }
private static void DoTest(IDocumentStore store) { new EmployeeByRegionAndSalary().Execute(store); using (var session = store.OpenSession()) { session.Store(new Employee { Name = "A", Region = Region.North, Salary = 20000 }); session.Store(new Employee { Name = "B", Region = Region.North, Salary = 30000 }); session.Store(new Employee { Name = "C", Region = Region.South, Salary = 25000 }); session.Store(new Employee { Name = "D", Region = Region.East, Salary = 45000 }); session.Store(new Employee { Name = "E", Region = Region.East, Salary = 55000 }); session.Store(new Employee { Name = "F", Region = Region.West, Salary = 15000 }); session.Store(new Employee { Name = "G", Region = Region.West, Salary = 85000 }); session.SaveChanges(); WaitForIndexing(store); var facets = new List <Facet> { new Facet <Employee> { Name = x => x.Salary, Ranges = { x => x.Salary < 20000, x => x.Salary >= 20000 && x.Salary < 40000, x => x.Salary >= 40000 && x.Salary < 60000, x => x.Salary >= 60000 && x.Salary < 80000, x => x.Salary > 80000 } } }; using (var s = store.OpenSession()) { var facetSetupDoc = new FacetSetup { Id = "facets/EmployeeFacets", Facets = facets }; s.Store(facetSetupDoc); s.SaveChanges(); } // by using setup document var northSalaryFacetQuery = session.Query <Employee, EmployeeByRegionAndSalary>() .Where(x => x.Region == Region.North).ToFacetQuery("facets/EmployeeFacets"); var southSalaryFacetQuery = session.Query <Employee, EmployeeByRegionAndSalary>() .Where(x => x.Region == Region.South).ToFacetQuery("facets/EmployeeFacets"); var eastSalaryFacetQuery = session.Query <Employee, EmployeeByRegionAndSalary>() .Where(x => x.Region == Region.East).ToFacetQuery("facets/EmployeeFacets"); var westSalaryFacetQuery = session.Query <Employee, EmployeeByRegionAndSalary>() .Where(x => x.Region == Region.West).ToFacetQuery("facets/EmployeeFacets"); var multiFacetedSearchResults = session.Advanced.MultiFacetedSearch(northSalaryFacetQuery, southSalaryFacetQuery, eastSalaryFacetQuery, westSalaryFacetQuery); Assert.Equal(4, multiFacetedSearchResults.Length); AssertResults(multiFacetedSearchResults); // by using list of facets northSalaryFacetQuery = session.Query <Employee, EmployeeByRegionAndSalary>() .Where(x => x.Region == Region.North).ToFacetQuery(facets); southSalaryFacetQuery = session.Query <Employee, EmployeeByRegionAndSalary>() .Where(x => x.Region == Region.South).ToFacetQuery(facets); eastSalaryFacetQuery = session.Query <Employee, EmployeeByRegionAndSalary>() .Where(x => x.Region == Region.East).ToFacetQuery(facets); westSalaryFacetQuery = session.Query <Employee, EmployeeByRegionAndSalary>() .Where(x => x.Region == Region.West).ToFacetQuery(facets); multiFacetedSearchResults = session.Advanced.MultiFacetedSearch(northSalaryFacetQuery, southSalaryFacetQuery, eastSalaryFacetQuery, westSalaryFacetQuery); Assert.Equal(4, multiFacetedSearchResults.Length); AssertResults(multiFacetedSearchResults); } }
private static IEnumerable <(FacetBase Facet, List <QueryExpression> Ranges)> ProcessFacetSetup(FacetSetup setup) { QueryParser queryParser = null; foreach (var f in setup.Facets) { if (f.Options == null) { f.Options = FacetOptions.Default; } yield return(f, null); } foreach (var f in setup.RangeFacets) { List <QueryExpression> facetRanges = null; if (f.Options == null) { f.Options = FacetOptions.Default; } if (f.Ranges != null && f.Ranges.Count > 0) { if (queryParser == null) { queryParser = new QueryParser(); } facetRanges = new List <QueryExpression>(); foreach (var range in f.Ranges) { queryParser.Init(range); if (queryParser.Expression(out var qr) == false) { throw new InvalidOperationException($"Could not parse the following range expression '{range}' from facet setup document: {setup.Id}"); } facetRanges.Add(qr); } } yield return(f, facetRanges); } }
private void DoTest(IDocumentStore store) { new EmployeeByRegionAndSalary().Execute(store); using (var session = store.OpenSession(new SessionOptions { NoCaching = true })) { session.Store(new Employee { Name = "A", Region = Region.North, Salary = 20000 }); session.Store(new Employee { Name = "B", Region = Region.North, Salary = 30000 }); session.Store(new Employee { Name = "C", Region = Region.South, Salary = 25000 }); session.Store(new Employee { Name = "D", Region = Region.East, Salary = 45000 }); session.Store(new Employee { Name = "E", Region = Region.East, Salary = 55000 }); session.Store(new Employee { Name = "F", Region = Region.West, Salary = 15000 }); session.Store(new Employee { Name = "G", Region = Region.West, Salary = 85000 }); session.SaveChanges(); Indexes.WaitForIndexing((DocumentStore)store); var facets = new List <RangeFacet> { new RangeFacet <Employee> { Ranges = { x => x.Salary < 20000, x => x.Salary >= 20000 && x.Salary < 40000, x => x.Salary >= 40000 && x.Salary < 60000, x => x.Salary >= 60000 && x.Salary < 80000, x => x.Salary > 80000 } } }; using (var s = store.OpenSession()) { var facetSetupDoc = new FacetSetup { Id = "facets/EmployeeFacets", RangeFacets = facets }; s.Store(facetSetupDoc); s.SaveChanges(); } // by using setup document var northSalaryFacetQuery = session.Query <Employee, EmployeeByRegionAndSalary>() .Where(x => x.Region == Region.North).AggregateUsing("facets/EmployeeFacets").Execute(); var southSalaryFacetQuery = session.Query <Employee, EmployeeByRegionAndSalary>() .Where(x => x.Region == Region.South).AggregateUsing("facets/EmployeeFacets").Execute(); var eastSalaryFacetQuery = session.Query <Employee, EmployeeByRegionAndSalary>() .Where(x => x.Region == Region.East).AggregateUsing("facets/EmployeeFacets").Execute(); var westSalaryFacetQuery = session.Query <Employee, EmployeeByRegionAndSalary>() .Where(x => x.Region == Region.West).AggregateUsing("facets/EmployeeFacets").Execute(); AssertResults(northSalaryFacetQuery, southSalaryFacetQuery, eastSalaryFacetQuery, westSalaryFacetQuery); // by using list of facets northSalaryFacetQuery = session.Query <Employee, EmployeeByRegionAndSalary>() .Where(x => x.Region == Region.North).AggregateBy(facets).Execute(); southSalaryFacetQuery = session.Query <Employee, EmployeeByRegionAndSalary>() .Where(x => x.Region == Region.South).AggregateBy(facets).Execute(); eastSalaryFacetQuery = session.Query <Employee, EmployeeByRegionAndSalary>() .Where(x => x.Region == Region.East).AggregateBy(facets).Execute(); westSalaryFacetQuery = session.Query <Employee, EmployeeByRegionAndSalary>() .Where(x => x.Region == Region.West).AggregateBy(facets).Execute(); AssertResults(northSalaryFacetQuery, southSalaryFacetQuery, eastSalaryFacetQuery, westSalaryFacetQuery); // by using document query northSalaryFacetQuery = session.Advanced.DocumentQuery <Employee, EmployeeByRegionAndSalary>() .WhereEquals(x => x.Region, Region.North).AggregateBy(facets).Execute(); southSalaryFacetQuery = session.Advanced.DocumentQuery <Employee, EmployeeByRegionAndSalary>() .WhereEquals(x => x.Region, Region.South).AggregateBy(facets).Execute(); eastSalaryFacetQuery = session.Advanced.DocumentQuery <Employee, EmployeeByRegionAndSalary>() .WhereEquals(x => x.Region, Region.East).AggregateBy(facets).Execute(); westSalaryFacetQuery = session.Advanced.DocumentQuery <Employee, EmployeeByRegionAndSalary>() .WhereEquals(x => x.Region, Region.West).AggregateBy(facets).Execute(); AssertResults(northSalaryFacetQuery, southSalaryFacetQuery, eastSalaryFacetQuery, westSalaryFacetQuery); } }
public void CanSearchOnAllProperties() { using (var store = GetDocumentStore()) { new Products_Stats().Execute(store); using (var session = store.OpenSession()) { for (int i = 0; i < 1000; i++) { var amount = i % 50 / 10f; session.Store( new Product { Category = i % 2 == 0 ? "Cat1" : "Cat2", Name = "Product " + i, Price = new Price { Currency = "USD", Amount = amount } }); } var facetSetup = new FacetSetup { Id = "facets/StatsFacet", Facets = new List <Facet> { new Facet { FieldName = "Category" }, }, RangeFacets = new List <RangeFacet>() { new RangeFacet() { Ranges = new List <string> { "Price <= 0", "Price BETWEEN 0.001 AND 0.999", "Price BETWEEN 0.999 AND 1.999", "Price >= 1.999" } } } }; session.Store(facetSetup); session.SaveChanges(); } Indexes.WaitForIndexing(store); using (var s = store.OpenSession()) { var query = s.Query <Product>("Products/Stats"); var facetResults = query.AggregateUsing("facets/StatsFacet").Execute(); var priceFacet = facetResults["Price"]; foreach (var val in priceFacet.Values) { Assert.NotEqual(0, val.Count); } } } }
public void TestFacetsCount() { using (var store = NewDocumentStore()) { using (var session = store.OpenSession()) { // Create Facet for wod var wodFacets = new WodFacets(); var wodSetup = new FacetSetup() { Id = wodFacets.FacetKey, Facets = wodFacets.FacetList }; session.Store(wodSetup); // Create Wod's #region ANGIE // Wodinfo var angie = new WodBase { Name = "Angie", Description = "Complete all reps of each exercise before moving to the next.", BenchmarkType = BenchmarkType.Girls, WodType = WodType.TimeWod }; // Add Round and Exercises angie.ExerciseList.Add("Pull-ups"); angie.ExerciseList.Add("Push-ups"); angie.ExerciseList.Add("Sit-ups"); angie.ExerciseList.Add("Air Squat"); // Save wod session.Store(angie, "WodBases/1"); #endregion #region BARBARA // Wodinfo var barbara = new WodBase { Name = "Barbara", Description = "Time each round. Rest precisely three minutes between each round.", BenchmarkType = BenchmarkType.Girls, WodType = WodType.TimeWod }; // Add Round and Exercises barbara.ExerciseList.Add("Pull-ups"); barbara.ExerciseList.Add("Push-ups"); barbara.ExerciseList.Add("Sit-ups"); barbara.ExerciseList.Add("Air Squat"); barbara.ExerciseList.Add("RestPeriod"); // Save wod session.Store(barbara, "WodBases/2"); #endregion #region CHELSEA // Wodinfo var chelsea = new WodBase { Name = "Chelsea", Description = "Set up before a clock, and every minute on the minute perform 5 pull-ups, " + "10 push-ups, and 15 squats. Can you continue for thirty minutes? Twenty minutes? How about 10? " + "Post results to comments. If you fall behind the clock keep going for thirty minutes and see how many rounds you can complete. " + "If you've finished the workout before this time add +1 to each exercise, i.e., 6 pull-ups, 11 push-ups, and 16 squats each minute, " + "and see if you can go the full thirty minutes.", BenchmarkType = BenchmarkType.Girls, WodType = WodType.MinuteWod, }; // Add Round and Exercises chelsea.ExerciseList.Add("Pull-ups"); chelsea.ExerciseList.Add("Push-ups"); chelsea.ExerciseList.Add("Air Squat"); // Save wod session.Store(chelsea, "WodBases/3"); #endregion #region CINDY // Wodinfo var cindy = new WodBase { Name = "Cindy", BenchmarkType = BenchmarkType.Girls, WodType = WodType.AmrapWod, }; // Add Round and Exercises cindy.ExerciseList.Add("Pull-ups"); cindy.ExerciseList.Add("Push-ups"); cindy.ExerciseList.Add("Air Squat"); // Save wod session.Store(cindy, "WodBases/4"); #endregion #region DIANE // Wodinfo var diane = new WodBase { Name = "Diane", BenchmarkType = BenchmarkType.Girls, WodType = WodType.TimeWod }; // Add Round and Exercises diane.ExerciseList.Add("Deadlift"); diane.ExerciseList.Add("Handstand Push-ups"); // Save wod session.Store(diane, "WodBases/5"); #endregion #region ELISABETH // Wodinfo var elisabeth = new WodBase { Name = "Elisabeth", BenchmarkType = BenchmarkType.Girls, WodType = WodType.TimeWod }; // Add Round and Exercises elisabeth.ExerciseList.Add("Clean"); elisabeth.ExerciseList.Add("Ring Dips"); // Save wod session.Store(elisabeth, "WodBases/6"); #endregion #region FRAN // Wodinfo var fran = new WodBase { Name = "Fran", BenchmarkType = BenchmarkType.Girls, WodType = WodType.TimeWod }; // Add Round and Exercises fran.ExerciseList.Add("Thrusters"); fran.ExerciseList.Add("Pull-ups"); // Save wod session.Store(fran, "WodBases/7"); #endregion #region GRACE // Wodinfo var grace = new WodBase { Name = "Grace", BenchmarkType = BenchmarkType.Girls, WodType = WodType.TimeWod }; // Add Round and Exercises grace.ExerciseList.Add("Clean & Jerk"); // Save wod session.Store(grace, "WodBases/8"); #endregion #region HELEN // Wodinfo var helen = new WodBase { Name = "Helen", BenchmarkType = BenchmarkType.Girls, WodType = WodType.TimeWod }; // Add Round and Exercises helen.ExerciseList.Add("Run 400 m"); helen.ExerciseList.Add("Kettlebell Swings"); helen.ExerciseList.Add("Pull-ups"); // Save wod session.Store(helen, "WodBases/9"); #endregion #region ISABEL // Wodinfo var isabel = new WodBase { Name = "Isabel", BenchmarkType = BenchmarkType.Girls, WodType = WodType.TimeWod }; // Add Round and Exercises isabel.ExerciseList.Add("Snatch"); // Save wod session.Store(isabel, "WodBases/10"); #endregion #region JACKIE // Wodinfo var jackie = new WodBase { Name = "Jackie", BenchmarkType = BenchmarkType.Girls, WodType = WodType.TimeWod }; // Add Round and Exercises jackie.ExerciseList.Add("Row 1000 m"); jackie.ExerciseList.Add("Thrusters"); jackie.ExerciseList.Add("Pull-ups"); // Save wod session.Store(jackie, "WodBases/11"); #endregion #region KAREN // Wodinfo var karen = new WodBase { Name = "Karen", BenchmarkType = BenchmarkType.Girls, WodType = WodType.TimeWod }; // Add Round and Exercises karen.ExerciseList.Add("Wall-ball Shots"); // Save wod session.Store(karen, "WodBases/12"); #endregion #region LINDA // Wodinfo var linda = new WodBase { Name = "Linda", BenchmarkType = BenchmarkType.Girls, WodType = WodType.TimeWod }; // Add Round and Exercises linda.ExerciseList.Add("Deadlift"); linda.ExerciseList.Add("Bench Press"); linda.ExerciseList.Add("Clean"); // Save wod session.Store(linda, "WodBases/13"); #endregion #region MARY // Wodinfo var mary = new WodBase { Name = "Mary", BenchmarkType = BenchmarkType.Girls, WodType = WodType.AmrapWod, }; // Add Round and Exercises mary.ExerciseList.Add("Handstand Push-ups"); mary.ExerciseList.Add("Pistols"); mary.ExerciseList.Add("Pull-ups"); // Save wod session.Store(mary, "WodBases/14"); #endregion #region NANCY // Wodinfo var nancy = new WodBase { Name = "Nancy", BenchmarkType = BenchmarkType.Girls, WodType = WodType.TimeWod }; // Add Round and Exercises nancy.ExerciseList.Add("Run 400 m"); nancy.ExerciseList.Add("Overhead Squat"); // Save wod session.Store(nancy, "WodBases/15"); #endregion #region AMANDA // Wodinfo var amanda = new WodBase { Name = "Amanda", BenchmarkType = BenchmarkType.Girls, WodType = WodType.TimeWod }; // Add Round and Exercises amanda.ExerciseList.Add("Muscle-ups"); amanda.ExerciseList.Add("Snatch"); // Save wod session.Store(amanda, "WodBases/16"); #endregion #region ANNIE // Wodinfo var annie = new WodBase { Name = "Annie", BenchmarkType = BenchmarkType.Girls, WodType = WodType.TimeWod }; // Add Round and Exercises annie.ExerciseList.Add("Double-unders"); annie.ExerciseList.Add("Sit-ups"); // Save wod session.Store(annie, "WodBases/17"); #endregion #region EVA // Wodinfo var eva = new WodBase { Name = "Eva", BenchmarkType = BenchmarkType.Girls, WodType = WodType.TimeWod }; // Add Round and Exercises eva.ExerciseList.Add("Run 800 m"); eva.ExerciseList.Add("Kettlebell Swings"); eva.ExerciseList.Add("Pull-ups"); // Save wod session.Store(eva, "WodBases/18"); #endregion #region KELLY // Wodinfo var kelly = new WodBase { Name = "Kelly", BenchmarkType = BenchmarkType.Girls, WodType = WodType.TimeWod }; // Add Round and Exercises kelly.ExerciseList.Add("Run 400 m"); kelly.ExerciseList.Add("Box Jump"); kelly.ExerciseList.Add("Wall-ball Shots"); // Save wod session.Store(kelly, "WodBases/19"); #endregion #region LYNNE // Wodinfo var lynne = new WodBase { Name = "Lynne", BenchmarkType = BenchmarkType.Girls, WodType = WodType.MaxWod }; // Add Round and Exercises lynne.ExerciseList.Add("Bench Press"); lynne.ExerciseList.Add("Pull-ups"); // Save wod session.Store(lynne, "WodBases/20"); #endregion #region NICOLE // Wodinfo var nicole = new WodBase { Name = "Nicole", Description = "As many rounds as possible in 20 minutes, Note number of pull-ups completed for each round.", BenchmarkType = BenchmarkType.Girls, WodType = WodType.MaxWod, }; // Add Round and Exercises nicole.ExerciseList.Add("Run 400 m"); nicole.ExerciseList.Add("Pull-ups"); // Save wod session.Store(nicole, "WodBases/21"); #endregion session.SaveChanges(); } // Create index new Wod_Search().Execute(store); for (int i = 0; i < 5; i++) { using (var session = store.OpenSession()) { RavenQueryStatistics stats; var query = session.Advanced.LuceneQuery <WodBase, Wod_Search>() .WaitForNonStaleResults() .Statistics(out stats) .SelectFields <WodsProjection>(); query.AndAlso().WhereEquals("ExerciseList", "Pull-ups"); var wods = query.ToList(); var facets = session.Advanced.DocumentStore.DatabaseCommands.GetFacets("Wod/Search", new IndexQuery { Query = query.ToString() }, "Facets/WodFacets"); var pullupsCount = facets.Results["ExerciseList"].Values.First(o => o.Range == "pull-ups").Hits; Assert.Equal(11, wods.Count); Assert.Equal(11, pullupsCount); } } } }
public void FacetSetupDocument_ShouldNotUseParameters() { using (var store = GetDocumentStore()) { new FooIndex().Execute(store); var now = DateTime.Now; var oneYearAgo = DateTime.SpecifyKind(now - TimeSpan.FromDays(365), DateTimeKind.Unspecified); var sixMonthsAgo = DateTime.SpecifyKind(now - TimeSpan.FromDays(180), DateTimeKind.Unspecified); StoreSampleData(store, now); WaitForIndexing(store); using (var s = store.OpenSession()) { var facets = new List <RangeFacet> { new RangeFacet <Foo> { Ranges = { c => c.DateIn < now - TimeSpan.FromDays(365), c => c.DateIn >= now - TimeSpan.FromDays(365) && c.DateIn < now - TimeSpan.FromDays(180), c => c.DateIn >= now - TimeSpan.FromDays(180) } } }; var facetSetupDoc = new FacetSetup { Id = "facets/FooFacets", RangeFacets = facets }; s.Store(facetSetupDoc); s.SaveChanges(); var rangeFacet = facetSetupDoc.RangeFacets[0]; Assert.Equal($"DateIn < '{oneYearAgo:o}'", rangeFacet.Ranges[0]); Assert.Equal($"DateIn >= '{oneYearAgo:o}' and DateIn < '{sixMonthsAgo:o}'", rangeFacet.Ranges[1]); Assert.Equal($"DateIn >= '{sixMonthsAgo:o}'", rangeFacet.Ranges[2]); } using (var session = store.OpenSession()) { var query = session.Query <Foo, FooIndex>() .Where(x => x.DateIn != null && x.Age < 90) .AggregateUsing("facets/FooFacets"); Assert.Equal("from index 'FooIndex' where (DateIn != $p0 and Age < $p1) " + "select facet(id('facets/FooFacets'))" , query.ToString()); var facetResult = query.Execute(); AssertResults(facetResult, "DateIn", now); } using (var session = store.OpenSession()) { var facets = session.Load <FacetSetup>("facets/FooFacets").RangeFacets; var query = session.Query <Foo, FooIndex>() .Where(x => x.DateIn != null && x.Age < 90) .AggregateBy(facets); Assert.Equal("from index 'FooIndex' where (DateIn != $p0 and Age < $p1) " + $"select facet(DateIn < '{oneYearAgo:o}', DateIn >= '{oneYearAgo:o}' and DateIn < '{sixMonthsAgo:o}', DateIn >= '{sixMonthsAgo:o}')" , query.ToString()); var facetResult = query.Execute(); AssertResults(facetResult, "DateIn", now); } } }
public IActionResult Run(RunParams runParams) { int range1 = runParams.Range1 ?? 25; int range2 = runParams.Range2 ?? 50; int range3 = runParams.Range3 ?? 100; List <MyFacetResult> facetsResults = new List <MyFacetResult>(); #region Demo Dictionary <string, FacetResult> queryResults; using (IDocumentSession session = DocumentStoreHolder.Store.OpenSession()) { #region Step_2 FacetSetup facetSetup = new FacetSetup { Id = "myFacetSetupDocumentID", Facets = new List <Facet> { new Facet() { FieldName = "Category" } }, RangeFacets = new List <RangeFacet> { new RangeFacet <Product> { Ranges = { product => product.PricePerUnit < range1, product => product.PricePerUnit >= range1 && product.PricePerUnit < range2, product => product.PricePerUnit >= range2 && product.PricePerUnit < range3, product => product.PricePerUnit >= range3 } } } }; #endregion #region Step_3 session.Store(facetSetup); session.SaveChanges(); #endregion #region Step_4 queryResults = session.Query <Product, Products_ByCategoryAndPrice>() .AggregateUsing("myFacetSetupDocumentID") .Execute(); #endregion } #endregion foreach (var result in queryResults) { var facetName = result.Value.Name; foreach (var item in result.Value.Values) { facetsResults.Add(new MyFacetResult() { FacetName = facetName, // i.e. PricePerUnit FacetRange = item.Range, // i.e. PricePerUnit < 50 FacetCount = item.Count }); } } return(Ok(facetsResults)); }