Пример #1
0
 public PaymentsSearchCriteriaBuilder(ISearchPhraseParser phraseParser, IMapper mapper) : this()
 {
     _phraseParser = phraseParser;
     _mapper       = mapper;
 }
 public ProductSearchRequestBuilder(ISearchPhraseParser searchPhraseParser, ITermFilterBuilder termFilterBuilder, IAggregationConverter aggregationConverter)
 {
     _searchPhraseParser   = searchPhraseParser;
     _termFilterBuilder    = termFilterBuilder;
     _aggregationConverter = aggregationConverter;
 }
 public CategorySearchRequestBuilder(ISearchPhraseParser searchPhraseParser)
 {
     _searchPhraseParser = searchPhraseParser;
 }
 public DynamicPropertyDictionaryItemSearchCriteriaBuilder(ISearchPhraseParser phraseParser, IMapper mapper) : this()
 {
     _phraseParser = phraseParser;
     _mapper       = mapper;
 }
Пример #5
0
 public MemberSearchRequestBuilder(ISearchPhraseParser searchPhraseParser)
 {
     _searchPhraseParser = searchPhraseParser;
 }
 public CustomerOrderSearchCriteriaBuilder(ISearchPhraseParser phraseParser) : this()
 {
     _phraseParser = phraseParser;
 }
        public IndexSearchRequestBuilder ParseFacets(ISearchPhraseParser phraseParser,
                                                     string facetPhrase,
                                                     IList <AggregationRequest> predefinedAggregations = null)
        {
            if (phraseParser == null)
            {
                throw new ArgumentNullException(nameof(phraseParser));
            }

            SearchRequest.Aggregations = predefinedAggregations ?? new List <AggregationRequest>();

            if (string.IsNullOrEmpty(facetPhrase))
            {
                return(this);
            }

            // PT-1613: Support aliases for Facet expressions e.g price.usd[TO 200) as price_below_200
            // PT-1613: Need to create a new  Antlr file with g4-lexer rules and generate parser especially for facets expression
            // that will return proper AggregationRequests objects
            var parseResult = phraseParser.Parse(facetPhrase);

            //Term facets
            if (!string.IsNullOrEmpty(parseResult.Keyword))
            {
                parseResult.Keyword = parseResult.Keyword.AddLanguageSpecificFacets(_cultureName);
                var termFacetExpressions = parseResult.Keyword.Split(" ");
                parseResult.Filters.AddRange(termFacetExpressions.Select(x => new TermFilter
                {
                    FieldName = x,
                    Values    = new List <string>()
                }));
            }

            SearchRequest.Aggregations = parseResult.Filters
                                         .Select <IFilter, AggregationRequest>(filter =>
            {
                FilterSyntaxMapper.MapFilterAdditionalSyntax(filter);

                return(filter switch
                {
                    RangeFilter rangeFilter => new RangeAggregationRequest
                    {
                        Id = filter.Stringify(true),
                        FieldName = rangeFilter.FieldName,
                        Values = rangeFilter.Values.Select(x => new RangeAggregationRequestValue
                        {
                            Id = x.Stringify(),
                            Lower = x.Lower,
                            Upper = x.Upper,
                            IncludeLower = x.IncludeLower,
                            IncludeUpper = x.IncludeUpper
                        }).ToList()
                    },
                    TermFilter termFilter => new TermAggregationRequest
                    {
                        FieldName = termFilter.FieldName,
                        Id = filter.Stringify(),
                        Filter = termFilter
                    },
                    _ => null,
                });
            })
        public IndexSearchRequestBuilder ParseFilters(ISearchPhraseParser phraseParser, string filterPhrase)
        {
            if (phraseParser == null)
            {
                throw new ArgumentNullException(nameof(phraseParser));
            }

            if (string.IsNullOrEmpty(filterPhrase))
            {
                return(this);
            }

            var parseResult = phraseParser.Parse(filterPhrase);

            var filters = new List <IFilter>();

            foreach (var filter in parseResult.Filters)
            {
                FilterSyntaxMapper.MapFilterAdditionalSyntax(filter);

                if (filter is TermFilter termFilter)
                {
                    var wildcardValues = termFilter.Values.Where(x => new[] { "?", "*" }.Any(x.Contains)).ToArray();

                    if (wildcardValues.Any())
                    {
                        var orFilter = new OrFilter
                        {
                            ChildFilters = new List <IFilter>()
                        };

                        var wildcardTermFilters = wildcardValues.Select(x => new WildCardTermFilter
                        {
                            FieldName = termFilter.FieldName,
                            Value     = x
                        }).ToList();

                        orFilter.ChildFilters.AddRange(wildcardTermFilters);

                        termFilter.Values = termFilter.Values.Except(wildcardValues).ToList();

                        if (termFilter.Values.Any())
                        {
                            orFilter.ChildFilters.Add(termFilter);
                        }

                        filters.Add(orFilter);
                    }
                    else
                    {
                        filters.Add(termFilter);
                    }
                }
                else
                {
                    filters.Add(filter);
                }
            }

            AddFiltersToSearchRequest(filters.ToArray());

            return(this);
        }
 public SearchProductRequestHandler(ISearchProvider searchProvider, ISearchPhraseParser searchPhraseParser, IMapper mapper)
 {
     _searchProvider     = searchProvider;
     _searchPhraseParser = searchPhraseParser;
     _mapper             = mapper;
 }
Пример #10
0
 public ProductSearchUserGroupsRequestBuilder(ISearchPhraseParser searchPhraseParser, ITermFilterBuilder termFilterBuilder, IAggregationConverter aggregationConverter)
     : base(searchPhraseParser, termFilterBuilder, aggregationConverter)
 {
 }