Scenario: While building a search based application in SharePoint 2013, I observed a behavior which I thought was quirky. A page on a publishing site had a Search Results web part and a Content by Search web part. While configuring them, I set them to have the same query and result source.
Expected result would’ve been the exact same result set and count. But for some reason, the Content By Search web part was returning all the pages as expected but the search results web part was only returning a subset of it. What was even quirkier was that the search preview on the search results web part would display all the results.
I initially thought that some pages might not have been published and hence search results web part would not display them, but that was not the case. I started to debug what was being returned to the browser. I looked at the objects that the search results returned and did not find anything there. Starting to analyze the data, I realized all the pages that were not showing up had some content that was similar, even though they were unique pages the content had a similar tone to it. I think in the earlier versions of the Search Result Web Parts, the user had an option to “Trim Duplicates” which is no longer present in the SharePoint 2013 Search Result Web Part’s properties.
Digging a bit deeper, I found a way to set the Trim Duplicates to false.
1. Export the Search Results Web Part from your page.
2. Open the .webpart file in your favorite editor.
3. Search for “Trim Duplicates”, you will find it as part of the DataProviderJSON property.
4. Set the Trim Duplicates property to False.
5. Upload the web part.
6. Add the web part to your page.
SharePoint will exclude content that it thinks is similar. Even though the pages have a unique name and the content might not be the same, if it has some content that is similar, then search will collapse them in the result set. I think the user should have the option in the user interface to turn off the “Trim Duplicates” setting.
Once the option is set, you will get the results that you would expect and the result set from a Content By Search web part will match the result set from a Search Result web part (i.e. if they configured to fire the same query).