После получения доступа к объекту, позволяющему произвести индексацию, необходимо подготовить контекст с настройками индексации. Для создания контекста вызовите метод IImportExecutor.CreateContext. В зависимости от того, что предполагается индексировать (структуры источников данных или метаданные объектов репозитория) необходимо результат метода привести к одному из двух интерфейсов: ISourceDataImportContext и IMbObjectsImportContext. Для указания параметров выполнения процесса индексации результат метода IImportExecutor.CreateContext также может быть приведён к интерфейсу ISolrImportContext.
Важно. В связи с имеющимися особенностями реализации языка Fore он не может быть использован для создания кода по индексированию объектов. Все дальнейшие примеры реализованы на языке Fore.NET.
Public Shared Sub Main(Params: StartParams);
Var
//...
MB: IMetabase;
SharedParams: ISharedParams;
SearchEngine: ISolrSearchEngineService;
SearchSchema: ISolrSearchEngineSchema;
ImportExecutor: IImportExecutor;
SourceContext: ISourceDataImportContext;
MbObjContext: IMbObjectsImportContext;
Locales: Array = New Integer[1] = [LocaleCodeID.lcidRussian As Integer];
//...
Begin
//...
MB := Params.Metabase;
//Параметры поиска и индексации, заданные для репозитория
SharedParams := MB.SpecialObject[MetabaseSpecialObject.msoSharedParams].Bind() As ISharedParams;
SearchEngine := SharedParams.SearchEngine As ISolrSearchEngineService;
SearchSchema := SearchEngine.SearchEngineSchema As ISolrSearchEngineSchema;
//Для индексации источников данных
ImportExecutor := SearchSchema.ImportExecutor[SearchEngineTargetType.settSourceData];
SourceContext := ImportExecutor.CreateContext() As ISourceDataImportContext;
//...
//Для индексации метаданных объектов репозитория
ImportExecutor := SearchSchema.ImportExecutor[SearchEngineTargetType.settMbObject];
MbObjContext := ImportExecutor.CreateContext() As IMbObjectsImportContext;
//...
//Указания параметров выполнения процесса индексации
(SourceContext As ISolrImportContext).CleanType := SolrImportCleanType.sictSpecified;
(SourceContext As ISolrImportContext).Locales := Locales;
(MbObjContext As ISolrImportContext).CleanType := SolrImportCleanType.sictNone;
(MbObjContext As ISolrImportContext).Locales := Locales;
//...
End Sub;
Задать индексируемые объекты можно двумя способами: в свойстве ContainerKeys указать массив ключей объектов-контейнеров, в которых хранятся источники данных, или в коллекцию SourceInfos добавить необходимые источники и определить для них специфические настройки индексации. При использовании свойства ContainerKeys все источники индексируются с параметрами по умолчанию (используется вариант отображения по умолчанию, отсутствуют свободные измерения (кроме календарного), по измерениям выставлена максимальная отметка).
Указание объектов-контейнеров, в которых необходимо проиндексировать источники данных:
Public Shared Sub Main(Params: StartParams);
Var
//...
MB: IMetabase;
SearchSchema: ISolrSearchEngineSchema;
ImportExecutor: IImportExecutor;
SourceContext: ISourceDataImportContext;
Containers: Array = New Integer[2];
//...
Begin
//...
MB := Params.Metabase;
//...
//Для индексации источников данных
ImportExecutor := SearchSchema.ImportExecutor[SearchEngineTargetType.settSourceData];
SourceContext := ImportExecutor.CreateContext() As ISourceDataImportContext;
//Указание индексируемых объектов
Containers[0] := MB.GetObjectKeyById("F_CUBES") As Integer;
Containers[1] := MB.GetObjectKeyById("F_TSDB") As Integer;
SourceContext.ContainerKeys := Containers;
//...
End Sub;
Указание определенного источника данных и параметров индексации для него:
Public Shared Sub Main(Params: StartParams);
Var
//...
MB: IMetabase;
SearchSchema: ISolrSearchEngineSchema;
ImportExecutor: IImportExecutor;
SourceContext: ISourceDataImportContext;
Cube: ICubeModel;
CubeDimensions: ICubeModelDimensions;
CubeDimension: IDimensionModel;
SourceInfo: ISourceDataImportInfo;
DestinationInfo: ISourceDataImportDestinationInfo;
DimSS: IDimSelectionSet;
DimS: IDimSelection;
i: Integer;
//...
Begin
//...
MB := Params.Metabase;
//...
//Для индексации источников данных
ImportExecutor := SearchSchema.ImportExecutor[SearchEngineTargetType.settSourceData];
SourceContext := ImportExecutor.CreateContext() As ISourceDataImportContext;
//Указание индексируемого источника данных
Cube := MB.ItemById["STD_CUBE"].Bind() As ICubeModel;
CubeDimensions := Cube.Destinations.DefaultDestination.Dimensions;
SourceInfo := SourceContext.SourceInfos.Add(Cube);
DestinationInfo := SourceInfo.DestinationInfos.Add(Cube.Destinations.DefaultDestination);
//Параметры индексации варианта отображения
DestinationInfo.GroupByDl := True;
DestinationInfo.ImportMode := SourceImportMode.simFull;
For i := 0 To CubeDimensions.Count - 1 Do
CubeDimension := CubeDimensions.Item[i];
Select Case (CubeDimension As IMetabaseObject).Id
Case "FACTS": DestinationInfo.FreeDimensions.Add(CubeDimension);
Case "INDICATORS", "COUNTRY": DestinationInfo.KeyWordsDimensions.Add(CubeDimension);
End Select;
End For;
//Установка отметки по измерениям
DimSS := DestinationInfo.SelectionSet;
For Each DimS In DimSS Do
Select Case DimS.Dimension.Ident
Case "FACTS", "INDICATORS":
DimS.SelectAll();
Case "COUNTRY":
DimS.SelectElement(0, False);
DimS.SelectElement(1, False);
End Select;
End For;
//...
End Sub;
После указания всех индексируемых источников настроенный контекст передайте в метод IImportExecutor.Import. При выполнении метода формируются необходимые документы, которые будут переданы для дальнейшей обработки и хранения в Apache Solr. При индексации автоматически используются те экземпляры Solr, которые соответствуют заданному назначению (назначение указывается во входном параметре метода IImportExecutor.CreateContext) и языкам (указываются в свойстве ISolrImportContext.Locales).
Public Shared Sub Main(Params: StartParams);
Var
//...
SearchSchema: ISolrSearchEngineSchema;
ImportExecutor: IImportExecutor;
SourceContext: ISourceDataImportContext;
MbObjContext: IMbObjectsImportContext;
//...
Begin
//...
//Для индексации источников данных
ImportExecutor := SearchSchema.ImportExecutor[SearchEngineTargetType.settSourceData];
SourceContext := ImportExecutor.CreateContext() As ISourceDataImportContext;
//...
//Настройка контекста
//...
ImportExecutor.Import(SourceContext);
//...
//Для индексации метаданных объектов репозитория
ImportExecutor := SearchSchema.ImportExecutor[SearchEngineTargetType.settMbObject];
MbObjContext := ImportExecutor.CreateContext() As IMbObjectsImportContext;
//...
//Настройка контекста
//...
ImportExecutor.Import(MbObjContext);
//...
End Sub;
Задать объекты репозитория, для которых необходимо проиндексировать метаданные, можно несколькими способами:
в свойстве IMbObjectsImportContext.ClassIds указывается массив классов объектов;
в свойстве IMbObjectsImportContext.ContainerKeys указывается массив ключей объектов контейнеров, дочерние объекты которых будут индексированы;
в свойстве IMbObjectsImportContext.Keys указывается массив ключей индексируемых объектов.
После указания необходимых объектов настроенный контекст передайте в метод IImportExecutor.Import. При выполнении метода формируются необходимые документы, которые будут переданы для дальнейшей обработки и хранения в Apache Solr. При индексации автоматически используются те экземпляры Solr, которые соответствуют заданному назначению (назначение указывается во входном параметре метода IImportExecutor.CreateContext) и языкам (указываются в свойстве ISolrImportContext.Locales).
Public Shared Sub Main(Params: StartParams);
Var
//...
MB: IMetabase;
Schema: ISolrSearchEngineSchema;
ImportExecutor: IImportExecutor;
MbObjContext: IMbObjectsImportContext;
ObjectKeys: Array Of UInteger;
//...
Begin
//...
//Для индексации метаданных объектов репозитория
ImportExecutor := Schema.ImportExecutor[SearchEngineTargetType.settMbObject];
MbObjContext := ImportExecutor.CreateContext() As IMbObjectsImportContext;
//Индексируемые объекты
ObjectKeys := New UInteger[2];
ObjectKeys[0] := MB.GetObjectKeyById("REGIONS_DATA");
ObjectKeys[1] := MB.GetObjectKeyById("CITY_DATA");
MbObjContext.Keys := ObjectKeys;
//Индексация
ImportExecutor.Import(MbObjContext);
//...
End Sub;
См. также: