2015-12-03 3 views
6

В поисковом запросе FAST я хочу получить все уточнения, применимые к поисковому запросу. В настоящее время я получаю только 100 результатов. Я хочу знать, есть ли параметр, чтобы получить более 100 результатов уточнения, которые я должен передать в моем запросе.В FAST Search Server 2010 для Sharepoint, как увеличить лимит результатов уточнения до более 100.

Вот часть нефтепереработчиков запроса:

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

Я уже посмотрел в глубокие против мелких нефтепереработчиков (https://technet.microsoft.com/en-us/library/gg193929(v=office.14).aspx), которая занимается уточнениями на основе всех результатов против уточнений на основе только топ 100 результатов и делает не имеют дело с фактическим числом для результатов уточнения, которые возвращаются.

Было бы здорово, если бы кто-то мог указать мне на документацию Microsoft, указав, что 100 является жестким пределом или направляет меня к фильтру, который мне не хватает.

ответ

3

Обнаружил это forum thread, где он предлагает, чтобы изменение параметра фильтра фильтра «фильтр» должно допускать более 100 результатов.

Добавить управляемую собственность (через интерфейс Sharepoint UI) и пометить ее как свойство «Refiner», а также отметить «Deep Refiner».

С параметром refiner «filter» вы можете получить более 100 нефтеперерабатывающих заводов с этим параметром.

Вам необходимо установить этот параметр вместе с свойством рафинера, например.

автор (фильтр = 500)

+0

Отлично работает с API поиска в SharePoint 2013. Мой ответ ниже о том, что значение жестко закодировано, вероятно, неверно –

+0

Пример URL: http://example.com/_api/search/query?querytext='*'&refiners='SomeSearchField(filter%3d1000)'&clienttype= ' ContentSearchRegular» –

1

После тонны поиска я нашел blog post с ответом. Короче говоря, значение жестко закодировано в методе GetRefinableManagedPropertyInfos в классе Microsoft.Office.Server.Search.RefinementUtilities.ManagedPropertyInfoProvider. Ниже приведен длинный фрагмент кода, но обратите внимание на вызов метода GetValuesForRefinableProperties со значением 100, жестко закодированным в переменной maxItems. Я использовал отражатель для создания следующих:

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

Я не подтверждено это, декомпиляции, изменив значение, и перекомпиляции, но если Microsoft не предоставляет патч, 100, кажется, жесткий предел. Декомпилированный код указан выше, чем в SharePoint 2013.

+0

Какой самый лучший способ отметить ответ как ошибочный? –