I wanted to add some custom refiners to each of the custom search result pages I’ve been working on in a project. The steps to do this aren’t complex, but since I needed to read a bunch of posts out there to get it just right, I figured I’d write it up.
Create Custom Managed Properties
Only Managed Properties are available for use as refiners. While Site Columns automatically become Crawled Properties, they must be added as Managed Properties to use them as refiners (or in scopes, etc.).
To do this, we go to Central Administration -> Application Management -> Manage Service Applications -> Search Service Application -> Metadata Properties and whatever new Managed Properties we need.
Note that we cannot use the existing ContentType Managed Property in the refiners. If we do, we get the error
Property doesn’t exist or is used in a manner inconsistent with schema settings.
In order to use the Content Type as a refiner, we must create our own Managed Property which mirrors the existing one. I created a new Managed Property called
ContentTypeRefiner and mapped it to
Perform a Full Crawl
After creating the Custom Managed Properties, we must do a full crawl so that the new Managed Properties will be in the active index.
To do this, we go to Central Administration -> Application Management -> Manage Service Applications -> Search Service Application [you may have named this differently when you created it] -> Content Sources. From the dropdown for the relevant Search Scope, choose Start Full Crawl.
A full crawl can take a significant amount of time depending on the amount of content you may have, so it’s best to create all of the new Managed Properties before kicking one off.
Add Managed Properties into Refiners
To add the new Managed Properties as refiners in the custom search results pages, we do the following:
- Navigate to the search results page
- Go into Edit Mode
- In the Refinement Panel (left side of the page) select Edit Web Part
- In the Tool Pane, under the Refinement section, edit the Filter Category Definition XML to include the new refiners
- Uncheck the Use Default Configuration box, otherwise your changes will disappear!
Note that any of the existing refiners can be removed. The order in which the refiners are included in the Filter Category Definition determines the order in which the refiners are shown, if there is enough content which contains that refiner’s metadata.
Here’s an example of what the XML for your own refiners might look like. This is the XML I added for the ContentTypeRefiner Managed Property. Most of the attributes are pretty self-explanatory.
<Category Title="Content Type" Description="Type of resource" Type="Microsoft.Office.Server.Search.WebControls.ManagedPropertyFilterGenerator" MetadataThreshold="5" NumberOfFiltersToDisplay="4" MaxNumberOfFilters="20" SortBy="Frequency" SortByForMoreFilters="Name" SortDirection="Descending" SortDirectionForMoreFilters="Ascending" ShowMoreLink="True" MappedProperty="ContentTypeRefiner" MoreLinkText="show more" LessLinkText="show fewer" />
Useful Reference Links
- Create a content type search refinement panel in SharePoint 2010 by Glyn Clough (@GlynClough)
- Refining on Content Type in SharePoint 2010 by Michel Pisarek (@MichalPisarek)
- The infamous : Property doesn’t exist or is used in a manner inconsistent with schema settings (SharePoint Search and FAST) by Natalya Voskresenskaya (@natalyvo)
- Customising SharePoint 2010 Search Refiners by ChrisADM
- Expanding the Refiners by Todd Carter (@toddca)
- Search Refiners with Managed Metadata by Paul Matthews (@cann0nf0dder)