FacetSearchResults: ISolrFacetSearchResults;
FacetSearchResults: Prognoz.Platform.Interop.BISearch.ISolrFacetSearchResults;
The FacetSearchResults property returns the faceted searchresult.
The result of faceted search will be available, if in search context the ISolrSearchContext.SearchType property was set to SolrSearchType.FacetOnly or SolrSearchType.FacetAndSearch.
It is supposed that the repository is set to work with search service based on Apache Solr. The search service base has indexed data about various repository data source slices. Connect the BISearch, Fore, Metabase system assemblies.
Sub UserProc;
Var
MB: IMetabase;
SharedParams: ISharedParams;
SearchEngine: ISolrSearchEngineService;
Schema: ISolrSearchEngineSchema;
SearchExecutor: ISearchExecutor;
SearchContext: ISolrSourceDataSearchContext;
Results: ISolrSearchResults;
FacetResults: ISolrFacetSearchResults;
FacetResult: ISolrFacetFieldResults;
i, j: Integer;
Begin
MB := MetabaseClass.Active;
//Parameters of search and indexing set for repository
SharedParams := MB.SpecialObject(MetabaseSpecialObject.SharedParams).Bind As ISharedParams;
SearchEngine := SharedParams.SearchEngine As ISolrSearchEngineService;
Schema := SearchEngine.SearchEngineSchema As ISolrSearchEngineSchema;
//Search parameters
SearchExecutor := Schema.SearchExecutor(SearchEngineTargetType.SourceData);
SearchContext := SearchExecutor.CreateContext As ISolrSourceDataSearchContext;
SearchContext.Locale := LocaleCodeID.Russian;
SearchContext.Text := "Cube";
SearchContext.SearchType := SolrSearchType.FacetOnly;
//Search
Results := SearchExecutor.Search(SearchContext) As ISolrSearchResults;
FacetResults := Results.FacetSearchResults;
//View of faceted search results
For i := 0 To FacetResults.Count - 1 Do
FacetResult := FacetResults.Item(i);
Debug.WriteLine("Field: " + FacetResult.Id + ". Values: ");
Debug.Indent;
For j := 0 To FacetResult.Count - 1 Do
Debug.WriteLine("Number of faceted results: " + FacetResult.Item(j).FacetCount.ToString +
". Value of faceted field: " + FacetResult.Item(j).FacetValue);
End For;
Debug.Unindent;
End For;
End Sub UserProc;
After executing the example the specified value by indexed information about dimension elements will be searched. Found values are grouped by faceted fields values. After search only faceted results are available containing general information about number of found data slices.
The requirements and result of the Fore.NET example execution match with those in the Fore example. Except assemblies determined in the Fore Example, connect also the ForeSystem assembly.
Imports Prognoz.Platform.Interop.BISearch;
Imports Prognoz.Platform.Interop.ForeSystem;
Imports Prognoz.Platform.Interop.KeFore;
Imports Prognoz.Platform.Interop.Metabase;
Public Shared Sub Main(Params: StartParams);
Var
MB: IMetabase;
SharedParams: ISharedParams;
SearchEngine: ISolrSearchEngineService;
Schema: ISolrSearchEngineSchema;
SearchExecutor: ISearchExecutor;
SearchContext: ISolrSourceDataSearchContext;
Results: ISolrSearchResults;
FacetResults: ISolrFacetSearchResults;
FacetResult: ISolrFacetFieldResults;
i, j: Integer;
Begin
MB := Params.Metabase;
//Parameters of search and indexing set for repository
SharedParams := MB.SpecialObject[MetabaseSpecialObject.msoSharedParams].Bind() As ISharedParams;
SearchEngine := SharedParams.SearchEngine As ISolrSearchEngineService;
Schema := SearchEngine.SearchEngineSchema As ISolrSearchEngineSchema;
//Search parameters
SearchExecutor := Schema.SearchExecutor[SearchEngineTargetType.settSourceData];
SearchContext := SearchExecutor.CreateContext() As ISolrSourceDataSearchContext;
SearchContext.Locale := LocaleCodeID.lcidRussian;
SearchContext.Text := "Value";
SearchContext.SearchType := SolrSearchType.sstFacetOnly;
//Search
Results := SearchExecutor.Search(SearchContext) As ISolrSearchResults;
FacetResults := Results.FacetSearchResults;
//View of faceted search results
For i := 0 To FacetResults.Count - 1 Do
FacetResult := FacetResults.Item[i];
System.Diagnostics.Debug.WriteLine("Field: " + FacetResult.Id + ". Values: ");
System.Diagnostics.Debug.Indent();
For j := 0 To FacetResult.Count - 1 Do
System.Diagnostics.Debug.WriteLine("Number of faceted results: " + FacetResult.Item[j].FacetCount.ToString() +
". Value of faceted field: " + FacetResult.Item[j].FacetValue);
End For;
System.Diagnostics.Debug.Unindent();
End For;
End Sub;
See also: