Esempio n. 1
0
        public static Expression Create(TaxonomyManager taxonomyManager, params long[] taxonomyIds)
        {
            Expression expression = null;

            // Get taxonomy with a single call to Ektron:
            var taxonomyCriteria = new TaxonomyCriteria();

            foreach (long taxonomyId in taxonomyIds)
            {
                taxonomyCriteria.AddFilter(TaxonomyProperty.Id, CriteriaFilterOperator.EqualTo, taxonomyId);
            }
            var taxonomyDataList = taxonomyManager.GetList(taxonomyCriteria);

            // Build taxonomy expression for search criteria:
            foreach (var taxonomyData in taxonomyDataList)
            {
                var rightExpression = SearchSolrProperty
                                      .CreateExactStringProperty(SearchContentProperty.TaxonomyCategory)
                                      .Contains(taxonomyData.Path); // "Contains" really means "StartsWith"

                expression = expression == null ? rightExpression : expression.Or(rightExpression);
            }

            return(expression);
        }
Esempio n. 2
0
        /// <summary>
        /// Adds a set of <see cref="Ektron.Cms.Search.RefinementSpecification">refinements</see> to the search criteria.
        /// Used for building facets from multivalue fields (i.e. taxonomy).
        /// </summary>
        /// <param name="criteria">The criteria to extend.</param>
        /// <param name="propertyExpressions"></param>
        /// <returns>The updated criteria.</returns>
        public static T RefineMultiValueBy <T>(this T criteria, params StringPropertyExpression[] propertyExpressions)
            where T : SearchCriteria
        {
            foreach (var propertyExpression in propertyExpressions)
            {
                var multiValuePropertyExpression = SearchSolrProperty.CreateExactStringProperty(propertyExpression);
                criteria.EnableRefinement()
                .Refinement.Add(new StringRefinementSpecification(multiValuePropertyExpression));
            }

            return(criteria);
        }