Since SharePoint 2010 you have the ability to improve the search experience in adding custom search refiners. Even better you can develop new ones if you want. As a reminder search refiners (or facets) are located on the left of the search result page and allow you to filter search results to have a faster access to relevant items. (file type, author, modification date…)
Here is some documentation if you’d like to know more about it.
At Negotium we’ve built a natural language processing product (Attribute) which automatically extracts concepts (ideas), entities (people, places…) and classification (based on taxonomy). Once that metadata is extracted we use it to build search refiners in order to improve your search experience.
But a question quickly came: based on a search results set of documents returned, how many are provided to refiners in order to generate refinement and filter values?
Why care about that? The provided results set can have an impact on count accuracy, revelance of suggested filters and so on…
Indeed, it seems that SharePoint product team decided to provide only a subset of search results for refiners for performance reasons. But here is the catch, this information doesn’t figure in the documentation. I first asked to other MVP’s and to the product team (one of the great things about being an MVP). I didn’t get any answer.
So we had to spend time with my team doing some SharePoint retro-engineering.
Here is what we found:
By default SharePoint only takes 80% of the search results to determine which refiners will be enabled.
A maximum of 100 results are provided to each refiner to generate filter/refinement values
These values are hardcoded and impossible to configure
The provided results set will change as you use pagination (not always, sometimes it can take multiple page switching before the set is updated)
I hope this will help you to build and understand refiners’ behavior. On my side I’m going to suggest to the product team to add this information to the documentation and if possible to replace hardcoded values by settings.
PS: thanks to Jean-François for his time spent on that matter.