After a ton of search, I found a blog post with the answer. In short, the value is hardcoded in the GetRefinableManagedPropertyInfos method in the Microsoft.Office.Server.Search.RefinementUtilities.ManagedPropertyInfoProvider class. The following is a long snippet of code, but pay attention to calling the GetValuesForRefinableProperties method with a value of 100 , hard-coded in the variable maxItems . I used Reflector to create the following:
public IEnumerable<RefinableManagedPropertyInfo> GetRefinableManagedPropertyInfos(SiteCollectionReference siteCollectionReference, double percentageThreshold = 0.8, TermReference? termReference = new TermReference?()) { using (new SPMonitoredScope("ManagedPropertyInfoProvider::GetRefinableManagedPropertyInfos")) { long num; IEnumerable<Refinement> enumerable3; IEnumerable<RefinerData> enumerable6; IEnumerable<ManagedPropertyInfo> refinablePropertiesInSchema = this.GetAllRefinableProperties(siteCollectionReference).ToList<ManagedPropertyInfo>(); if (!termReference.HasValue) { ULS.SendTraceTag(0x153103, ULSCat.msoulscat_SEARCH_Admin, ULSTraceLevel.High, "ManagedPropertyInfoProvider::GetRefinableManagedPropertyInfos: Schema info only requested. Returning.", new object[] { "ManagedProperties" }); return CreateRefinableManagedPropertyInfoList(refinablePropertiesInSchema); } IEnumerable<string> source = (from r in refinablePropertiesInSchema select r.Name).ToList<string>(); if (!source.Contains<string>("ManagedProperties", StringComparer.OrdinalIgnoreCase)) { ULS.SendTraceTag(0x153104, ULSCat.msoulscat_SEARCH_Admin, ULSTraceLevel.High, "ManagedPropertyInfoProvider::GetRefinableManagedPropertyInfos: Can not find managed property {0} in schema. Returning only refinable properties from schema.", new object[] { "ManagedProperties" }); return CreateRefinableManagedPropertyInfoList(refinablePropertiesInSchema); } try { enumerable3 = this.GetValuesForRefinableProperty(siteCollectionReference, "ManagedProperties", termReference.Value, 0x7fffffff, out num).ToList<Refinement>(); } catch (QueryFailedException exception) { exception.RefinablePropertiesFromSchema = CreateRefinableManagedPropertyInfoList(refinablePropertiesInSchema); throw; } if (num == 0L) { ULS.SendTraceTag(0x153105, ULSCat.msoulscat_SEARCH_Admin, ULSTraceLevel.High, "ManagedPropertyInfoProvider::GetRefinableManagedPropertyInfos: Query returned 0 results. Returning only refinable properties from schema."); return CreateRefinableManagedPropertyInfoList(refinablePropertiesInSchema); } ULS.SendTraceTag(0x153106, ULSCat.msoulscat_SEARCH_Admin, ULSTraceLevel.Verbose, "ManagedPropertyInfoProvider::GetRefinableManagedPropertyInfos: Found {0} refinable properties with index values.", new object[] { enumerable3.Count<Refinement>() }); long threshold = (long) Math.Round((double) (num * percentageThreshold)); IEnumerable<string> enumerable4 = (from r in enumerable3 where r.RefinementCount >= threshold select r.RefinementName).ToList<string>(); ULS.SendTraceTag(0x153107, ULSCat.msoulscat_SEARCH_Admin, ULSTraceLevel.Verbose, "ManagedPropertyInfoProvider::GetRefinableManagedPropertyInfos: Found {0} managed properties with values above threshold {1}", new object[] { enumerable4.Count<string>(), threshold }); IEnumerable<string> enumerable5 = source.Intersect<string>(enumerable4, StringComparer.OrdinalIgnoreCase).ToList<string>(); ULS.SendTraceTag(0x153108, ULSCat.msoulscat_SEARCH_Admin, ULSTraceLevel.Verbose, "ManagedPropertyInfoProvider::GetRefinableManagedPropertyInfos: Want to find entropy for {0} managed properties.", new object[] { enumerable5.Count<string>() }); try { enumerable6 = this.GetValuesForRefinableProperties(siteCollectionReference, enumerable5, termReference.Value, 100, out num).ToList<RefinerData>(); } catch (QueryFailedException exception2) { exception2.RefinablePropertiesFromSchema = CreateRefinableManagedPropertyInfoList(refinablePropertiesInSchema); throw; } ULS.SendTraceTag(0x153109, ULSCat.msoulscat_SEARCH_Admin, ULSTraceLevel.Verbose, "ManagedPropertyInfoProvider::GetRefinableManagedPropertyInfos: Total hits in entropy query = {0} Number of refiners returned = {1}", new object[] { num, enumerable6.Count<RefinerData>() }); return CreateRefinableManagedPropertyInfoList((from r in enumerable6 where r.Entropy > 0M select r).ToDictionary<RefinerData, string, RefinerData>(suggestedRefiner => suggestedRefiner.RefinerName, r => r, StringComparer.OrdinalIgnoreCase), num, enumerable3, refinablePropertiesInSchema); } }
I did not confirm this by decompiling, changing the value and recompiling, but if Microsoft does not provide the fix, 100 seems to be a hard limit. The decompiled code above is current from SharePoint 2013.