CustomFieldSearchResults: ISolrCustomFieldSearchResults;
CustomFieldSearchResults: Prognoz.Platform.Interop.BISearch.ISolrCustomFieldSearchResults;
Свойство CustomFieldSearchResults возвращает результаты поиска по пользовательским полям.
Предполагается, что репозиторий настроен на работу с поисковым сервисом на базе Apache Solr. В базе поискового сервиса имеются индексированные метаданные различных документов репозитория. Подключите системные сборки: BISearch, Fore, Metabase.
Sub UserProc;
Var
MB: IMetabase;
SharedParams: ISharedParams;
SearchEngine: ISolrSearchEngineService;
Schema: ISolrSearchEngineSchema;
SearchExecutor: ISearchExecutor;
SearchContext: ISolrSourceDataSearchContext;
Results: ISolrSearchResults;
Result: ISolrSearchResult;
CustomResults: ISolrCustomFieldSearchResults;
CustomResult: ISolrCustomFieldSearchResult;
i, j: Integer;
s: Variant;
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);
SearchContext := SearchExecutor.CreateContext 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) As ISolrSearchResult;
CustomResults := Result.CustomFieldSearchResults;
If CustomResults.Count > 0 Then
Debug.WriteLine("Индекс записи с результатами поиска: " + i.ToString);
Debug.WriteLine("Идентификатор документа с индексированными данными: " + Result.DocId);
For j := 0 To CustomResults.Count - 1 Do
CustomResult := CustomResults.Item(j);
Debug.WriteLine("Пользовательское поле: " + CustomResult.SolrField.Id);
Debug.Indent;
Debug.WriteLine("Значения:");
For Each s In CustomResult.Values Do
Debug.Write(s + " ");
End For;
Debug.WriteLine("");
If CustomResult.HighlightedValues.Length > 0 Then
Debug.WriteLine("Значения с подсветкой искомого значения:");
For Each s In CustomResult.HighlightedValues Do
Debug.Write(s + " ");
End For;
Debug.WriteLine("");
End If;
Debug.Unindent;
End For;
Debug.WriteLine("------");
End If;
End For;
End Sub UserProc;
При выполнении примера будет осуществлен поиск указанного значения по индексированной информации об элементах измерений. Из результата поиска будут получены индексированные значения пользовательских полей. Значения будут выведены в консоль среды разработки.
Необходимые требования и результат выполнения примера 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;
SearchContext: ISolrSourceDataSearchContext;
Results: ISolrSearchResults;
Result: ISolrSearchResult;
CustomResults: ISolrCustomFieldSearchResults;
CustomResult: ISolrCustomFieldSearchResult;
i, j: Integer;
s: Object;
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];
SearchContext := SearchExecutor.CreateContext() 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] As ISolrSearchResult;
CustomResults := Result.CustomFieldSearchResults;
If CustomResults.Count > 0 Then
System.Diagnostics.Debug.WriteLine("Индекс записи с результатами поиска: " + i.ToString());
System.Diagnostics.Debug.WriteLine("Идентификатор документа с индексированными данными: " + Result.DocId);
For j := 0 To CustomResults.Count - 1 Do
CustomResult := CustomResults.Item[j];
System.Diagnostics.Debug.WriteLine("Пользовательское поле: " + CustomResult.SolrField.Id);
System.Diagnostics.Debug.Indent();
System.Diagnostics.Debug.WriteLine("Значения:");
For Each s In CustomResult.Values Do
System.Diagnostics.Debug.Write(s + " ");
End For;
System.Diagnostics.Debug.WriteLine("");
If CustomResult.HighlightedValues.Length > 0 Then
System.Diagnostics.Debug.WriteLine("Значения с подсветкой искомого значения:");
For Each s In CustomResult.HighlightedValues Do
System.Diagnostics.Debug.Write(s + " ");
End For;
System.Diagnostics.Debug.WriteLine("");
End If;
System.Diagnostics.Debug.Unindent();
End For;
System.Diagnostics.Debug.WriteLine("------");
End If;
End For;
End Sub;
См. также: