Nested: ISolrFilterConditions;
Nested: Prognoz.Platform.Interop.BISearch.ISolrFilterConditions;
Свойство Nested возвращает коллекцию вложенных условий фильтрации.
Предполагается, что репозиторий настроен на работу с поисковым сервисом на базе Apache Solr. В базе поискового сервиса имеются индексированные данные о срезах различных источников данных репозитория. Подключите системные сборки: BISearch, Fore, Metabase.
Sub UserProc;
Var
MB: IMetabase;
SharedParams: ISharedParams;
SearchEngine: ISolrSearchEngineService;
Schema: ISolrSearchEngineSchema;
SearchExecutor: ISearchExecutor;
SolrContext: ISolrSearchContext;
Condition1, Condition2: ISolrFilterCondition;
ConditionValues1, ConditionValues2: ISolrFilterFieldValues;
Values1, Values2: Array Of Variant;
SearchContext: ISolrSourceDataSearchContext;
Results: ISolrSearchResults;
Result: ISearchResult;
i: Integer;
Begin
MB := MetabaseClass.Active;
//Параметры поиска и индексации, заданные для репозитория
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;
//Параметры фильтрации
Condition1 := SolrContext.FilterContext.FilterCondition.Nested.Add;
Condition1.SolrField := Schema.Fields(SearchEngineTargetType.SourceData).FindById("name");
Condition1.Operator_ := LogicalOperator.And_;
ConditionValues1 := Condition1.Values;
ConditionValues1.Operator_ := LogicalOperator.Or_;
Values1 := New Variant[2];
Values1[0] := "Доход";
Values1[1] := "Расход";
ConditionValues1.Values := Values1;
//Связанное условие
Condition2 := SolrContext.FilterContext.FilterCondition.Nested.Add;
Condition2.Operator_ := LogicalOperator.And_;
Condition2.SolrField := Schema.Fields(SearchEngineTargetType.SourceData).FindById("time");
ConditionValues2 := Condition2.Values;
ConditionValues2.Operator_ := LogicalOperator.Or_;
Values2 := New Variant[2];
Values2[0] := "2000";
Values2[1] := "2001";
ConditionValues2.Values := Values2;
//Параметры поиска
SearchContext := SolrContext As ISolrSourceDataSearchContext;
SearchContext.Locale := LocaleCodeID.Russian;
SearchContext.Text := "Россия";
//Поиск
Results := SearchExecutor.Search(SearchContext) As ISolrSearchResults;
//Просмотр результатов поиска
For i := 0 To Results.Count - 1 Do
Result := Results.Item(i);
Debug.WriteLine("Наименование: """ + Result.Name + """. Описание: """ + Result.Description + '"');
If Result.HighlightedName <> "" Then
Debug.Indent;
Debug.WriteLine("Значения с подсветкой искомого значения:");
Debug.WriteLine("Наименование: """ + Result.HighlightedName + """. Описание: """ + Result.HighlightedDescription + '"');
Debug.Unindent;
End If;
End For;
End Sub UserProc;
При выполнении примера будет осуществлен поиск указанного значения по индексированной информации об элементах измерений. Поиск осуществляется с учетом указанных параметров фильтрации по значениям полей «name» и «time». Полученные результаты будут выведены в консоль среды разработки.
Необходимые требования и результат выполнения примера Fore.NET совпадают с примером Fore. Кроме сборок, указанных в примере Fore, подключите также сборку «ForeSystem».
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;
Condition1, Condition2: ISolrFilterCondition;
ConditionValues1, ConditionValues2: ISolrFilterFieldValues;
Values1: Array = New Object[2] = ["Доход", "Расход"];
Values2: Array = New Object[2] = ["2000", "2001"];
SearchContext: ISolrSourceDataSearchContext;
Results: ISolrSearchResults;
Result: ISearchResult;
i: Integer;
Begin
MB := Params.Metabase;
//Параметры поиска и индексации, заданные для репозитория
SharedParams := MB.SpecialObject[MetabaseSpecialObject.msoSharedParams].Bind() As ISharedParams;
SearchEngine := SharedParams.SearchEngine As ISolrSearchEngineService;
Schema := SearchEngine.SearchEngineSchema As ISolrSearchEngineSchema;
//Параметры фильтрации
SearchExecutor := Schema.SearchExecutor[SearchEngineTargetType.settSourceData];
SolrContext := SearchExecutor.CreateContext() As ISolrSearchContext;
Condition1 := SolrContext.FilterContext.FilterCondition.Nested.Add();
Condition1.SolrField := Schema.Fields[SearchEngineTargetType.settSourceData].FindById("name");
Condition1.Operator := LogicalOperator.loAnd;
ConditionValues1 := Condition1.Values;
ConditionValues1.Operator := LogicalOperator.loOr;
ConditionValues1.Values := Values1;
//Связанное условие
Condition2 := SolrContext.FilterContext.FilterCondition.Nested.Add();
Condition2.SolrField := Schema.Fields[SearchEngineTargetType.settSourceData].FindById("time");
ConditionValues2 := Condition2.Values;
ConditionValues2.Operator := LogicalOperator.loAnd;
ConditionValues2.Values := Values2;
//Параметры поиска
SearchContext := SolrContext As ISolrSourceDataSearchContext;
SearchContext.Locale := LocaleCodeID.lcidRussian;
SearchContext.Text := "Россия";
//Поиск
Results := SearchExecutor.Search(SearchContext) As ISolrSearchResults;
//Просмотр результатов поиска
For i := 0 To Results.Count - 1 Do
Result := Results.Item[i];
System.Diagnostics.Debug.WriteLine("Наименование: """ + Result.Name + """. Описание: """ + Result.Description + '"');
If Result.HighlightedName <> "" Then
System.Diagnostics.Debug.Indent();
System.Diagnostics.Debug.WriteLine("Значения с подсветкой искомого значения:");
System.Diagnostics.Debug.WriteLine("Наименование: """ + Result.HighlightedName + """. Описание: """ + Result.HighlightedDescription + '"');
System.Diagnostics.Debug.Unindent();
End If;
End For;
End Sub;
См. также: