public override Filter GetFilter()
 {
     if (!string.IsNullOrEmpty(FieldName) && !string.IsNullOrEmpty(FieldValue))
     {
         return(new TermFilter($"{FieldName}$$string", FieldFilterValue.Create(FieldValue)));
     }
     return(null);
 }
Example #2
0
        private Filter GetSelectedFilter(List <FacetGroupOption> options, string currentField)
        {
            var filters = new List <Filter>();
            var facets  = _facetRegistry.GetFacetDefinitions();

            foreach (var facetGroupOption in options)
            {
                if (facetGroupOption.GroupFieldName.Equals(currentField))
                {
                    continue;
                }

                var filter = facets.FirstOrDefault(x => x.FieldName.Equals(facetGroupOption.GroupFieldName));
                if (filter == null)
                {
                    continue;
                }

                if (!facetGroupOption.Facets.Any(x => x.Selected))
                {
                    continue;
                }

                if (filter is FacetStringDefinition)
                {
                    filters.Add(new TermsFilter(_findClient.GetFullFieldName(facetGroupOption.GroupFieldName, typeof(string)),
                                                facetGroupOption.Facets.Where(x => x.Selected).Select(x => FieldFilterValue.Create(x.Name))));
                }
                else if (filter is FacetStringListDefinition)
                {
                    var termFilters = facetGroupOption.Facets.Where(x => x.Selected)
                                      .Select(s => new TermFilter(facetGroupOption.GroupFieldName, FieldFilterValue.Create(s.Name)))
                                      .Cast <Filter>()
                                      .ToList();

                    filters.AddRange(termFilters);
                }
                else if (filter is FacetNumericRangeDefinition)
                {
                    var rangeFilters = filter as FacetNumericRangeDefinition;
                    foreach (var selectedRange in facetGroupOption.Facets.Where(x => x.Selected))
                    {
                        var rangeFilter = rangeFilters.Range.FirstOrDefault(x => x.Id.Equals(selectedRange.Key.Split(':')[1]));
                        if (rangeFilter == null)
                        {
                            continue;
                        }
                        filters.Add(RangeFilter.Create(_findClient.GetFullFieldName(facetGroupOption.GroupFieldName, typeof(double)),
                                                       rangeFilter.From ?? 0,
                                                       rangeFilter.To ?? double.MaxValue));
                    }
                }
            }

            if (!filters.Any())
            {
                return(null);
            }

            if (filters.Count == 1)
            {
                return(filters.FirstOrDefault());
            }

            var boolFilter = new BoolFilter();

            foreach (var filter in filters)
            {
                boolFilter.Should.Add(filter);
            }
            return(boolFilter);
        }