2015-12-03 9 views
6

एक तेज खोज क्वेरी में मैं एक खोज शब्द पर लागू सभी परिष्करण प्राप्त करना चाहता हूं। वर्तमान में मुझे केवल 100 परिणाम मिलते हैं। मैं जानना चाहता हूं कि 100 से अधिक परिशोधन परिणाम प्राप्त करने के लिए कोई सेटिंग है या नहीं, जिसे मुझे अपनी क्वेरी में पास करना है।शेयरपॉइंट के लिए फास्ट सर्च सर्वर 2010 में मैं परिशोधन परिणाम सीमा 100 से अधिक कैसे बढ़ा सकता हूं।

<IncludeRefinementResults><Refiners><Refiner>*PROPERTY NAME*</Refiner></Refiners></IncludeRefinementResults> 

मैं पहले से ही दीप बनाम उथले रिफाइनर (https://technet.microsoft.com/en-us/library/gg193929(v=office.14).aspx) में ध्यान दिया है कि सिर्फ शीर्ष 100 परिणाम और करता है के आधार पर शोधन बनाम सभी परिणामों के आधार पर शोधन के साथ सौदों:

क्वेरी का रिफाइनर टुकड़ा है वापस लौटाए जाने वाले परिष्करण परिणामों के लिए वास्तविक संख्या से निपटें।

यह बहुत अच्छा होगा अगर कोई मुझे माइक्रोसॉफ्ट प्रलेखन के लिए इंगित कर सकता है कि 100 कठोर सीमा है या मुझे उस फ़िल्टर के लिए मार्गदर्शन करें जो मुझे याद आ रही है।

उत्तर

3

यह forum thread मिला जहां यह सुझाव देता है कि रिफाइनर पैरामीटर "फ़िल्टर" को बदलने से 100 से अधिक परिणामों की अनुमति होनी चाहिए।

प्रबंधित संपत्ति (शेयरपॉइंट यूआई के माध्यम से) जोड़ें, और इसे "रेफिनर प्रॉपर्टी" के रूप में चिह्नित करें और "दीप रेफिनर" को चिह्नित करने के लिए भी चिह्नित करें।

रिफाइनर पैरामीटर "फ़िल्टर" के साथ आप इस पैरामीटर के साथ 100 से अधिक रिफाइनर प्राप्त कर सकते हैं।

आपको इस पैरामीटर को अपनी रिफाइनर संपत्ति के साथ सेट करने की आवश्यकता है उदा।

लेखक (फिल्टर = 500)

+0

SharePoint 2013 की खोज API के साथ बढ़िया काम करता है। हार्ड-कोडेड होने वाले मान के बारे में मेरा उत्तर गलत है –

+0

एक उदाहरण यूआरएल: http://example.com/_api/search/query?querytext='*'&refiners=' SomomeearchField(filter%3d1000)'&clienttype= ' ContentSearchRegular ' –

1

खोज के एक टन के बाद, मुझे एक उत्तर के साथ blog post मिला। संक्षेप में, Microsoft.Office.Server.Search.RefinementUtilities.ManagedPropertyInfoProvider कक्षा में GetRefinableManagedPropertyInfos विधि में मूल्य हार्ड-कोड किया गया है। निम्नलिखित एक लंबा कोड स्निपेट है, लेकिन maxItems चर में 100 के मूल्य के साथ GetValuesForRefinableProperties विधि पर कॉल को नोट करें। मैं परावर्तक इस्तेमाल किया निम्नलिखित उत्पन्न करने के लिए:

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); 
    } 
} 

मैं decompiling द्वारा इस की पुष्टि नहीं की है, मूल्य में परिवर्तन, और फिर कंपाइल, लेकिन जब तक माइक्रोसॉफ्ट एक पैच प्रदान करता है, 100 एक हार्ड सीमा लगती है। उपरोक्त अपूर्ण कोड SharePoint 2013 के रूप में चालू है।

+0

सबसे अच्छा तरीका गलत के रूप में एक जवाब को चिह्नित करने के क्या है? –

संबंधित मुद्दे