public Func <QueryContainerDescriptor <T>, QueryContainer> ComposeFilter <T>(FilterCriteriaArgs args) where T : class { Func <QueryContainerDescriptor <T>, QueryContainer> filter; if (!(args.FilterValue is BooleanFilterValue value)) { return(null); } if (string.IsNullOrWhiteSpace(args.ParentPropertyName)) { filter = q => q.Term(t => t.Field(args.PropertyName) .Value(value.Value)); } else { var fieldName = $"{args.ParentPropertyName}.{args.PropertyName}"; filter = q => q .Nested(n => n .Path(args.ParentPropertyName) .Query(q1 => q1 .Term(t => t .Field(fieldName) .Value(value.Value) ) ) ); } return(filter); }
public Func <QueryContainerDescriptor <T>, QueryContainer> ComposeFilter <T>(FilterCriteriaArgs args) where T : class { var fieldName = string.IsNullOrWhiteSpace(args.ParentPropertyName) ? args.PropertyName : $"{args.ParentPropertyName}.{args.PropertyName}"; if (!(args.FilterValue is DateFilterValue dateFilterValue)) { return(descriptor => descriptor); } if (args.Operator == OperatorType.Different) { return(DifferentOperatorFilter <T>(fieldName, args.ParentPropertyName, dateFilterValue.Value)); } IDateRangeQuery DateRange(DateRangeQueryDescriptor <T> descriptor) { IDateRangeQuery dateRangeQuery = descriptor .Name("") .Field(fieldName); CreateRangeDescriptor(args.Operator, descriptor, dateFilterValue); return(dateRangeQuery); } return(CreateFilter <T>(args.ParentPropertyName, DateRange)); }
public Func <QueryContainerDescriptor <T>, QueryContainer> ComposeFilter <T>(FilterCriteriaArgs args) where T : class { Func <QueryContainerDescriptor <T>, QueryContainer> filter; if (!(args.FilterValue is TextFilterValue value)) { return(null); } if (args.Operator == OperatorType.Different) { return(ComposeDifferentOperatorFilter <T>(args)); } if (string.IsNullOrWhiteSpace(args.ParentPropertyName)) { filter = args.Strict ? q => q.Term(t => t.Field(args.PropertyName) .Value(value.Value)) : WildcardFilter <T>(value.Value, args.PropertyName, args); } else { var fieldName = $"{args.ParentPropertyName}.{args.PropertyName}"; filter = args.Strict ? (Func <QueryContainerDescriptor <T>, QueryContainer>)(q => q .Nested(n => n .Path(args.ParentPropertyName) .Query(q1 => q1 .Term(t => t .Field(fieldName) .Value(value.Value) ) ) )) : q => q .Nested(n => n .Path(args.ParentPropertyName) .Query(WildcardFilter <T>(value.Value, fieldName, args)) ); } return(filter); }
public Func <QueryContainerDescriptor <T>, QueryContainer> ComposeFilter <T>(FilterCriteriaArgs args) where T : class { var fieldName = string.IsNullOrWhiteSpace(args.ParentPropertyName) ? args.PropertyName : $"{args.ParentPropertyName}.{args.PropertyName}"; if (!(args.FilterValue is NumericFilterValue numericFilterValue)) { return(descriptor => descriptor); } if (args.Operator == OperatorType.Different) { return(DifferentOperatorFilter <T>(fieldName, args.ParentPropertyName, numericFilterValue.Value)); } INumericRangeQuery NumericRange(NumericRangeQueryDescriptor <T> descriptor) { INumericRangeQuery numericRangeQuery = descriptor .Name(fieldName) .Field(fieldName) .Relation(RangeRelation.Within); CreateRangeDescriptor(args.Operator, descriptor, numericFilterValue); return(numericRangeQuery); } Func <QueryContainerDescriptor <T>, QueryContainer> filter; if (string.IsNullOrWhiteSpace(args.ParentPropertyName)) { filter = q => q.Range(NumericRange); } else { filter = q => q.Nested(n => n .Path(args.ParentPropertyName) .Query(query => query.Range(NumericRange)) ); } return(filter); }
public Func <QueryContainerDescriptor <T>, QueryContainer> ComposeFilter <T>(FilterCriteriaArgs args) where T : class { Func <QueryContainerDescriptor <T>, QueryContainer> filter = descriptor => descriptor; if (!(args.FilterValue is GuidFilterValue guidFilterValue)) { return(filter); } if (!guidFilterValue.Value.HasValue) { return(ComposeDoesNotExistFilter <T>(args.ParentPropertyName, args.PropertyName, guidFilterValue)); } if (string.IsNullOrWhiteSpace(args.ParentPropertyName)) { filter = q => q.Term(m => m.Field(args.PropertyName) .Value(guidFilterValue.Value) .Verbatim()); } else { var fieldName = $"{args.ParentPropertyName}.{args.PropertyName}"; filter = q => q .Nested(n => n .Path(args.ParentPropertyName) .Query(q1 => q1.Term(m => m .Field(fieldName) .Value(guidFilterValue.Value) ) ) ); } return(filter); }
private static Func <QueryContainerDescriptor <T>, QueryContainer> ComposeDifferentOperatorFilter <T>(FilterCriteriaArgs args) where T : class { var fieldName = string.IsNullOrWhiteSpace(args.ParentPropertyName) ? args.PropertyName : $"{args.ParentPropertyName}.{args.PropertyName}"; if (!(args.FilterValue is TextFilterValue textFilterValue)) { return(descriptor => descriptor); } Func <QueryContainerDescriptor <T>, QueryContainer> queryContainerDescriptor; QueryContainer QueryContainerDescriptor(QueryContainerDescriptor <T> q) => q .Bool(b => b .MustNot(q1 => q1 .Term(t => t.Field(fieldName) .Value(textFilterValue.Value)) ) ); if (string.IsNullOrWhiteSpace(args.ParentPropertyName)) { queryContainerDescriptor = QueryContainerDescriptor; } else { queryContainerDescriptor = q => q.Nested(n => n .Path(args.ParentPropertyName) .Query(QueryContainerDescriptor) ); } return(queryContainerDescriptor); }
private static Func <QueryContainerDescriptor <T>, QueryContainer> WildcardFilter <T>(string searchText, string fieldName, FilterCriteriaArgs args) where T : class { return(q => q.MultiMatch(qs => qs.Name($"filter_text_on_{args.PropertyName}") .Query(searchText) .Fields(f => f .Field(fieldName, boost: 1.1) .Field("*.ngram") ) .Lenient() .MinimumShouldMatch(MinimumShouldMatch.Percentage(80)) .TieBreaker(0.1) .Type(TextQueryType.BestFields) .Operator(Operator.And) .FuzzyRewrite(MultiTermQueryRewrite.TopTermsBoost(5)) .Fuzziness(Fuzziness.EditDistance(1)) )); }
private static Func <QueryContainerDescriptor <TIndexItem>, QueryContainer> ComposeFilter(FilterCriteriaArgs args) { var filterTypeInstance = ComposeFilterFactory.CreateInstance(args.FilterValue.Type); var filter = filterTypeInstance.ComposeFilter <TIndexItem>(args); return(filter); }