How to search for pages of base type with EPiServer built-in search

Marija Jemuovic
Member since: 2010

Can't I use this?

//Search for pages using the provided language
var pageTypeQuery = new GroupQuery(LuceneOperator.AND);
pageTypeQuery.QueryExpressions.Add(new ContentQuery<SearchableSitePageData>());
pageTypeQuery.QueryExpressions.Add(new FieldQuery(languageBranch, Field.Culture));

//Search for blocks using the provided language
var blockTypeQuery = new GroupQuery(LuceneOperator.AND);
blockTypeQuery.QueryExpressions.Add(new ContentQuery<SearchableSiteBlockData>());
blockTypeQuery.QueryExpressions.Add(new FieldQuery(languageBranch, Field.Culture));

where SearchableSitePageData is

    public abstract class SearchableSitePageData : SitePageData, IShowInSearchResults

and SitePageData inherits from PageData.

#86515 May 22, 2014 19:00
  • Johan Petersson
    Member since: 2007

    Similar code works for me:

    var typeQuery = new ContentTypesQuery();
    foreach (string type in SearchPage.ContentTypesCategories)
    var accessQuery = new AccessControlListQuery();
    accessQuery.AddAclForUser(PrincipalInfo.Current, HttpContext.Current);
    var query = new GroupQuery(LuceneOperator.AND);
    query.QueryExpressions.Add(new FieldQuery(searchText));
    #86518 May 22, 2014 22:15
  • Marija Jemuovic
    Member since: 2010

    Hey, but is ContentTypesQuery a class of your own?

    #86533 May 23, 2014 9:08
  • Johan Petersson
    Member since: 2007

    Haha, sorry. Sure it was. But it's a really simple class.

    using EPiServer.Search.Queries.Lucene;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    public class ContentTypesQuery : CollectionQueryBase
        private readonly string AssemblyName;
        public ContentTypesQuery()
            : base("EPISERVER_SEARCH_TYPE", LuceneOperator.OR)
            var assembly = this.GetType().Assembly;
            AssemblyName = assembly.GetName().Name;
        public void AddContentType(string name)
            base.Items.Add(string.Format("{0},{1}", name, AssemblyName));
    #86570 May 23, 2014 19:22
  • Johan Petersson
    Member since: 2007

    And the reason was that we wanted the editors to be able to chose which types that should be searchable.

    I guess ContentQuery<SearchableSitePageData>() is implemented in a similar way.

    #86571 May 23, 2014 19:26