On the left there, you will see a set of refinements that we get out of the box. I didn’t have to do anything to configure these at all. There are a number of refinements built in including file type, site, author, modified date, and taxonomy. You can also easily create your own based on managed property which we will see here shortly.
Let’s take a look at some of the options on this web part. If we edit the page and then edit the web part, we will be able to see the options. If you’re on a small screen (or a small window in the case of a VM), you will have to scroll right to see the web part properties.
Since this is a search web part, you will see the familiar Cross-Web Part query ID. This should be synced up to whatever else you are using on the page. Usually it is set to User query. The next section is where we can configure the refinement. Make note of the Use Default Configuration checkbox. If you don’t uncheck this, anything you customize will not be saved. Each thing that you can filter on is called a category by the RefinementWebPart. The Filter Category Definition property is an XML field where each category is specified. We’ll also look at that later in the post. Other properties to note here. The Accuracy Index is the number of results it looks at to determine things to refine. I assume this it mainly there to keep things performing well. What this does mean is that if there is something unique to refine on but it doesn’t occur until result number 51, then it will not be included. You can also configure how many categories to display. This is set to 6 by default. The last thing I will point out is that you can configure how the web part displays its information using XSLT (not shown in the screenshot above).
Now let’s look at how we can add our own managed property to the category list. You should of course confirm the managed property works and that you can query on it first (do a full crawl if necessary). We then, just need to take a look at the XML for the Filter Category Definition.
<?xml version="1.0" encoding="utf-8"?>
<FilterCategories>
<Category Title="Result Type" Description="The file extension of the item" Type="Microsoft.Office.Server.Search.WebControls.ManagedPropertyFilterGenerator" MetadataThreshold="5" NumberOfFiltersToDisplay="4" MaxNumberOfFilters="0" SortBy="Frequency" SortDirection="Descending" SortByForMoreFilters="Name" SortDirectionForMoreFilters="Ascending" ShowMoreLink="True" MappedProperty="FileExtension" MoreLinkText="show more" LessLinkText="show fewer">
<CustomFilters MappingType="ValueMapping" DataType="String" ValueReference="Absolute" ShowAllInMore="False">
<CustomFilter CustomValue="Adobe PDF">
<OriginalValue>pdf</OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="Email">
<OriginalValue>eml</OriginalValue>
<OriginalValue>msg</OriginalValue>
<OriginalValue>exch</OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="Excel">
<OriginalValue>odc</OriginalValue>
<OriginalValue>ods</OriginalValue>
<OriginalValue>xls</OriginalValue>
<OriginalValue>xlsb</OriginalValue>
<OriginalValue>xlsm</OriginalValue>
<OriginalValue>xlsx</OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="Image">
<OriginalValue>tif</OriginalValue>
<OriginalValue>tiff</OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="Lotus Notes">
<OriginalValue>nsf</OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="One Note">
<OriginalValue>one</OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="PowerPoint">
<OriginalValue>odp</OriginalValue>
<OriginalValue>ppt</OriginalValue>
<OriginalValue>pptm</OriginalValue>
<OriginalValue>pptx</OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="Publisher">
<OriginalValue>pub</OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="Text">
<OriginalValue>odt</OriginalValue>
<OriginalValue>txt</OriginalValue>
<OriginalValue>url</OriginalValue>
<OriginalValue>csv</OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="Visio">
<OriginalValue>vdw</OriginalValue>
<OriginalValue>vdx</OriginalValue>
<OriginalValue>vsd</OriginalValue>
<OriginalValue>vss</OriginalValue>
<OriginalValue>vst</OriginalValue>
<OriginalValue>vsx</OriginalValue>
<OriginalValue>vtx</OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="Webpage">
<OriginalValue>ascx</OriginalValue>
<OriginalValue>asp</OriginalValue>
<OriginalValue>aspx</OriginalValue>
<OriginalValue>htm</OriginalValue>
<OriginalValue>html</OriginalValue>
<OriginalValue>jhtml</OriginalValue>
<OriginalValue>js</OriginalValue>
<OriginalValue>mht</OriginalValue>
<OriginalValue>mhtml</OriginalValue>
<OriginalValue>mspx</OriginalValue>
<OriginalValue>php</OriginalValue>
<OriginalValue></OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="XML">
<OriginalValue>xml</OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="Word">
<OriginalValue>doc</OriginalValue>
<OriginalValue>docm</OriginalValue>
<OriginalValue>docx</OriginalValue>
<OriginalValue>dot</OriginalValue>
<OriginalValue>nws</OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="Zip">
<OriginalValue>zip</OriginalValue>
</CustomFilter>
</CustomFilters>
</Category>
<Category Title="Site" Description="Which site this document is from" Type="Microsoft.Office.Server.Search.WebControls.ManagedPropertyFilterGenerator" MetadataThreshold="5" NumberOfFiltersToDisplay="4" MaxNumberOfFilters="20" SortBy="Frequency" SortByForMoreFilters="Name" SortDirection="Descending" SortDirectionForMoreFilters="Ascending" ShowMoreLink="True" MappedProperty="SiteName" MoreLinkText="show more" LessLinkText="show fewer" />
<Category Title="Author" Description="Use this filter to restrict results authored by a specific author" Type="Microsoft.Office.Server.Search.WebControls.ManagedPropertyFilterGenerator" MetadataThreshold="5" NumberOfFiltersToDisplay="4" MaxNumberOfFilters="20" SortBy="Frequency" SortByForMoreFilters="Name" SortDirection="Descending" SortDirectionForMoreFilters="Ascending" ShowMoreLink="True" MappedProperty="Author" MoreLinkText="show more" LessLinkText="show fewer" />
<Category Title="Modified Date" Description="When the item was last updated" Type="Microsoft.Office.Server.Search.WebControls.ManagedPropertyFilterGenerator" MetadataThreshold="5" NumberOfFiltersToDisplay="6" MaxNumberOfFilters="0" SortBy="Custom" ShowMoreLink="True" MappedProperty="Write" MoreLinkText="show more" LessLinkText="show fewer" >
<CustomFilters MappingType="RangeMapping" DataType="Date" ValueReference="Relative" ShowAllInMore="False">
<CustomFilter CustomValue="Past 24 Hours">
<OriginalValue>-1..</OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="Past Week">
<OriginalValue>-7..</OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="Past Month">
<OriginalValue>-30..</OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="Past Six Months">
<OriginalValue>-183..</OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="Past Year">
<OriginalValue>-365..</OriginalValue>
</CustomFilter>
<CustomFilter CustomValue="Earlier">
<OriginalValue>..-365</OriginalValue>
</CustomFilter>
</CustomFilters>
</Category>
<Category Title="Managed Metadata Columns" Description="Managed metadata of the documents" Type="Microsoft.Office.Server.Search.WebControls.TaxonomyFilterGenerator" MetadataThreshold="3" NumberOfFiltersToDisplay="3" MaxNumberOfFilters="20" ShowMoreLink="True" MappedProperty="ows_MetadataFacetInfo" MoreLinkText="show more" LessLinkText="show fewer" />
<Category Title="Tags" Description="All managed metadata of the documents and social tags" Type="Microsoft.Office.Server.Search.WebControls.TaxonomyFilterGenerator" MetadataThreshold="3" NumberOfFiltersToDisplay="3" MaxNumberOfFilters="20" ShowMoreLink="True" MappedProperty="ows_MetadataFacetInfo,popularsocialtags" MoreLinkText="show more" LessLinkText="show fewer" />
</FilterCategories>
I went ahead and posted the entire XML because it’s worth seeing. For the most part the schema is pretty easy to follow. The Category element defines each thing to refine and then it has some basic configuration items such as the number of filters to display. You specify the name of the managed property to use in the MappedProperty attribute. The MetadataThreshold property is the number of results that have to be returned with that property in order to do refinement. If you are familiar with the schema used by Faceted Search, you will see a similar concept with the CustomFilter elements. These allow you map a value into something more readable. For example instead of display xlsx, it displays Excel.
I want to add my own managed property, so I just add a category to the end like this.
All I did was copy the category that was used for author and it works great. You can tweak the individual settings if you like. Here is what my custom managed property looks like.
How does this all work though. Well it’s pretty simple. Just copy any link that the web part displays and we’ll see that it makes use of the new r query string property. It will be URL encoded but you can easily decode it and see the magic. In this case if I want to view Red products, the query string has a r parameter of the following.
If I wanted to view files modified in the last 24 hours, it uses the new >= operator.
Don’t you just love that you can easily query against dates now using the keyword query syntax? I think the r keyword is very interesting and I think it opens the door for some very interesting customizations of the search results page in the future.