private static void SeedIndex(ElasticClient client)
        {
            var faker = new Faker <PersonDocument>();

            faker
            .RuleFor(r => r.Id, f => Guid.NewGuid().ToString())
            .RuleFor(r => r.Name, f => $"{f.Person.FirstName} {f.Person.LastName}")
            .RuleFor(r => r.Age, f => f.Random.Number(16, 65))
            .RuleFor(r => r.Country, f => FilterField.Create(f.Address.Country(), f.Address.CountryCode().ToLowerInvariant()))
            .RuleFor(r => r.Tags, f => f.Commerce.Categories(5).Select(FilterField.Create))
            ;
            var list = faker.Generate(100).ToList();

            list.Add(new PersonDocument {
                Id = Guid.NewGuid().ToString(), Name = "Phil Oyston", Age = 20, Country = FilterField.Create("United Kingdom", "uk"), Tags = new[] { FilterField.Create("Baby") }
            });
            list.Add(new PersonDocument {
                Id = Guid.NewGuid().ToString(), Name = "John Doe", Age = 30, Country = FilterField.Create("United Kingdom", "uk"), Tags = new[] { FilterField.Create("Grocery") }
            });
            list.Add(new PersonDocument {
                Id = Guid.NewGuid().ToString(), Name = "John Smith", Age = 40, Country = FilterField.Create("United Kingdom", "uk"), Tags = new[] { FilterField.Create("Baby"), FilterField.Create("Grocery") }
            });

            client.Bulk(b => b.IndexMany(list).Refresh(Refresh.True));
        }
Exemple #2
0
        protected override AggregationContainerDescriptor <PersonDocument> ApplyAggregations(AggregationContainerDescriptor <PersonDocument> descriptor, PersonSearchParameters parameters)
        {
            return
                (descriptor
                 .Terms(nameof(PersonSearchParameters.Tags), t => t
                        .AsSearchifyFilter(c => c.WithDisplayName("Search Tags"))
                        .Field(f => f.Tags.First().Key)

                        )
                 .Terms(nameof(PersonSearchParameters.Country), t => t
                        .AsSearchifyFilter()
                        .Field(f => f.Country.Key)
                        )
                 .Range(PersonSearchParameters.AgeRangeParameter, r => r
                        .AsSearchifyFilter(c => c.WithDisplayName("Age Range"))
                        .Field(f => f.Age)
                        .Ranges(
                            rng => rng.Key(FilterField.Create(AgeRangeEnum.Young))
                            .From(0)
                            .To(20),
                            rng => rng.Key(FilterField.Create(AgeRangeEnum.MiddleAge))
                            .From(21)
                            .To(40),
                            rng => rng.Key(FilterField.Create(AgeRangeEnum.Older)).From(41)
                            )
                        )
                );
        }
        public void WhenCreatingAFilterFieldFromTextWithValue(string text, string value, string delimiter)
        {
            var filter = FilterField.Create(text, value);

            filter.Value.Should().Be(value);
            filter.Text.Should().Be(text);
            filter.Key.Should().Be($"{value}{delimiter}{text}");
        }
            public void ShouldIgnoreTextValue()
            {
                var f1 = FilterField.Create("Hello world", "world");
                var f2 = FilterField.Create("Goodbye world", "world");

                f1.Equals(f2).Should().Be(true);
                f2.Equals(f1).Should().Be(true);
            }
Exemple #5
0
        protected override AggregationContainerDescriptor <PersonDocument> ApplyAggregations(AggregationContainerDescriptor <PersonDocument> descriptor, PersonSearchParameters parameters)
        {
            return
                (descriptor
                 .Terms(nameof(PersonSearchParameters.Tags), t => t
                        .AsSearchifyFilter(c => c.WithDisplayName("Search Tags"))
                        .Field(f => f.Tags.First().Key)

                        )
                 .Terms(nameof(PersonSearchParameters.Country), t => t
                        .AsSearchifyFilter()
                        .Field(f => f.Country.Key)
                        )
                 .Range(PersonSearchParameters.AgeRangeParameter, r => r
                        .AsSearchifyFilter(c => c.WithDisplayName("Age Range"))
                        .Field(f => f.Age)
                        .Ranges(
                            rng => rng.Key(FilterField.Create(AgeRangeEnum.Young))
                            .From(0)
                            .To(20),
                            rng => rng.Key(FilterField.Create(AgeRangeEnum.MiddleAge))
                            .From(21)
                            .To(40),
                            rng => rng.Key(FilterField.Create(AgeRangeEnum.Older)).From(41)
                            )
                        )
                 .GeoDistance(nameof(PersonSearchParameters.LocationRange), g => g
                              .AsSearchifyFilter()
                              .Field(f => f.Location)
                              .Origin(parameters.Location)
                              .Unit(DistanceUnit.Miles)
                              .Ranges(
                                  r => r.Key("1||up to 10 miles").To(10),
                                  r => r.Key("2||up to 20 miles").To(20),
                                  r => r.Key("3||up to 30 miles").To(30),
                                  r => r.Key("4||up to 40 miles").To(40),
                                  r => r.Key("5||up to 50 miles").To(50),
                                  r => r.Key("6||up to 100 miles").To(100),
                                  r => r.Key("7||more than 100 miles").From(100)
                                  )));
        }
Exemple #6
0
        private static void SeedSportingTeamDocuments(ElasticClient client)
        {
            var faker = new Faker <SportingTeamDocument>();

            faker
            .RuleFor(r => r.Id, f => Guid.NewGuid().ToString())
            .RuleFor(r => r.Name, f => $"{f.Person.FirstName} {f.Person.LastName}")
            .RuleFor(r => r.SportType, f => FilterField.Create(f.Person.Company.Name))
            ;

            var list = faker.Generate(3).ToList();

            list.Add(new SportingTeamDocument
            {
                Id        = Guid.NewGuid().ToString(),
                Name      = "Edinburgh Somethings",
                SportType = FilterField.Create("Football"),
            });

            client.Bulk(b => b.IndexMany(list).Refresh(Refresh.True));
        }