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)); }
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); }
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) ))); }
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)); }