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); }
/// <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); }