public IList<SearchFilter> GetFilter(IList<Filter> searchFilters)
        {
            var reader = IndexReader.Open(_directory, true);

            var filters = new List<SearchFilter>();
            foreach (var searchFilter in searchFilters)
            {
                var items = new List<SearchFilterItem>();

                var filter = new SearchFilter
                {
                    FilterName = searchFilter.FieldName,
                    Items = items
                };

                filters.Add(filter);

                var query = CreateQuery(searchFilters, searchFilter.FieldName);

                SimpleFacetedSearch search = new SimpleFacetedSearch(reader, searchFilter.FieldName);
                var facets = search.Search(query);

                foreach (var facet in facets.HitsPerFacet)
                {
                    var hitCount = facet.HitCount;
                    if (hitCount == 0)
                        continue;

                    string value = string.Empty;
                    foreach (var document in facet.Documents)
                    {
                        value = document.Get(searchFilter.FieldName);
                        if (!string.IsNullOrWhiteSpace(value))
                            break;
                    }

                    if (string.IsNullOrEmpty(value))
                        continue;

                    var isQueried =
                        searchFilter.Values.Any(s => string.Equals(s, value, StringComparison.InvariantCultureIgnoreCase));

                    var item = new SearchFilterItem
                    {
                        Label = value,
                        Value = value,
                        Hits = (int) facet.HitCount,
                        IsQueried = isQueried
                    };

                    filter.Items.Add(item);
                }

                items.Sort((s1, s2) => string.Compare(s1.Value, s2.Value, StringComparison.Ordinal));
            }

            return filters;
        }
Пример #2
0
        public IList <SearchFilter> GetFilter(IList <Filter> searchFilters)
        {
            var reader = IndexReader.Open(_directory, true);

            var filters = new List <SearchFilter>();

            foreach (var searchFilter in searchFilters)
            {
                var items = new List <SearchFilterItem>();

                var filter = new SearchFilter
                {
                    FilterName = searchFilter.FieldName,
                    Items      = items
                };

                filters.Add(filter);

                var query = CreateQuery(searchFilters, searchFilter.FieldName);

                SimpleFacetedSearch search = new SimpleFacetedSearch(reader, searchFilter.FieldName);
                var facets = search.Search(query);

                foreach (var facet in facets.HitsPerFacet)
                {
                    var hitCount = facet.HitCount;
                    if (hitCount == 0)
                    {
                        continue;
                    }

                    string value = string.Empty;
                    foreach (var document in facet.Documents)
                    {
                        value = document.Get(searchFilter.FieldName);
                        if (!string.IsNullOrWhiteSpace(value))
                        {
                            break;
                        }
                    }

                    if (string.IsNullOrEmpty(value))
                    {
                        continue;
                    }

                    var isQueried =
                        searchFilter.Values.Any(s => string.Equals(s, value, StringComparison.InvariantCultureIgnoreCase));

                    var item = new SearchFilterItem
                    {
                        Label     = value,
                        Value     = value,
                        Hits      = (int)facet.HitCount,
                        IsQueried = isQueried
                    };

                    filter.Items.Add(item);
                }

                items.Sort((s1, s2) => string.Compare(s1.Value, s2.Value, StringComparison.Ordinal));
            }

            return(filters);
        }