FilterContext: ISolrFilterContext;
FilterContext: Prognoz.Platform.Interop.BISearch.ISolrFilterContext;
The FilterContext property returns filtering parameters of search results.
It is supposed that the repository is set to work with search service based on Apache Solr. Search service base contains indexed metadata of various repository objects. Connect the BISearch, Fore, Metabase system assemblies.
Sub UserProc;
Var
MB: IMetabase;
SharedParams: ISharedParams;
SearchEngine: ISolrSearchEngineService;
Schema: ISolrSearchEngineSchema;
SearchExecutor: ISearchExecutor;
SolrContext: ISolrSearchContext;
FilterCondition: ISolrFilterCondition;
ConditionValues: ISolrFilterFieldValues;
Values: Array Of Variant;
SearchContext: ISolrSourceDataSearchContext;
Results: ISolrSearchResults;
Result: ISearchResult;
i: 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;
SearchExecutor := Schema.SearchExecutor(SearchEngineTargetType.SourceData);
SolrContext := SearchExecutor.CreateContext As ISolrSearchContext;
//Filtering parameters
FilterCondition := SolrContext.FilterContext.FilterCondition;
FilterCondition.SolrField := Schema.Fields(SearchEngineTargetType.SourceData).FindById("name");
FilterCondition.Operator_ := LogicalOperator.And_;
ConditionValues := FilterCondition.Values;
ConditionValues.Operator_ := LogicalOperator.Or_;
Values := New Variant[2];
Values[0] := "Income";
Values[1] := "Expense";
ConditionValues.Values := Values;
//Search parameters
SearchContext := SolrContext As ISolrSourceDataSearchContext;
SearchContext.Locale := LocaleCodeID.Russian;
SearchContext.Text := "Russia";
//Search
Results := SearchExecutor.Search(SearchContext) As ISolrSearchResults;
//View search results
For i := 0 To Results.Count - 1 Do
Result := Results.Item(i);
Debug.WriteLine("Name: """ + Result.Name + """. Description: """ + Result.Description + '"');
If Result.HighlightedName <> "" Then
Debug.Indent;
Debug.WriteLine("values with highlighting of searching value:");
Debug.WriteLine("Name: """ + Result.HighlightedName + """. Description: """ + Result.HighlightedDescription + '"');
Debug.Unindent;
End If;
End For;
End Sub UserProc;
After executing the example the specified value by indexed information about dimension elements will be searched. The search is made taking into account specified filtering parameters by the "name" field values. The results are displayed in development environment console.
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;
SolrContext: ISolrSearchContext;
FilterCondition, NestedCondition: ISolrFilterCondition;
ConditionValues, NestedValues: ISolrFilterFieldValues;
Values: Array = New Object[2] = ["Income", "Expense"];
SearchContext: ISolrSourceDataSearchContext;
Results: ISolrSearchResults;
Result: ISearchResult;
i: 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;
//Filtering parameters
SearchExecutor := Schema.SearchExecutor[SearchEngineTargetType.settSourceData];
SolrContext := SearchExecutor.CreateContext() As ISolrSearchContext;
FilterCondition := SolrContext.FilterContext.FilterCondition;
FilterCondition.SolrField := Schema.Fields[SearchEngineTargetType.settSourceData].FindById("name");
FilterCondition.Operator := LogicalOperator.loAnd;
ConditionValues := FilterCondition.Values;
ConditionValues.Operator := LogicalOperator.loOr;
ConditionValues.Values := Values;
//Search parameters
SearchContext := SolrContext As ISolrSourceDataSearchContext;
SearchContext.Locale := LocaleCodeID.lcidRussian;
SearchContext.Text := "Russia";
//Search
Results := SearchExecutor.Search(SearchContext) As ISolrSearchResults;
//View search results
For i := 0 To Results.Count - 1 Do
Result := Results.Item[i];
System.Diagnostics.Debug.WriteLine("Name: """ + Result.Name + """. Description: """ + Result.Description + '"');
If Result.HighlightedName <> "" Then
System.Diagnostics.Debug.Indent();
System.Diagnostics.Debug.WriteLine("Values with highlighted searched value:");
System.Diagnostics.Debug.WriteLine("Name: """ + Result.HighlightedName + """. Description: """ + Result.HighlightedDescription + '"');
System.Diagnostics.Debug.Unindent();
End If;
End For;
End Sub;
See also: