ISolrMbObjectsSearchContext.NeedDocumentContent

Синтаксис Fore

NeedDocumentContent: Boolean;

Синтаксис Fore.NET

NeedDocumentContent: Boolean;

Описание

Свойство NeedDocumentContent определяет признак загрузки содержимого объектов «Документ».

Комментарии

Если имеются индексированные документы, то поиск осуществляется как по их непосредственным метаданным (наименованию, идентификатору и другим метаданным), так и по содержимому того файла, который был загружен в документ. По умолчанию свойству NeedDocumentContent установлено значение False, при этом для найденных документов в результат поиска не загружается содержимое файла.

Если необходимо получить содержимое файла, то установите в свойстве NeedDocumentContent значение True. Содержимое будет доступно в свойствах ISearchMbObjectResult.Content или ISearchMbObjectResult.HighlightedContent. Содержимое будет загружаться вне зависимости от того, в какой части было найдено значение: в метаданных объекта репозитория или в содержимом файла.

Пример Fore

Предполагается, что репозиторий настроен на работу с поисковым сервисом на базе Apache Solr. В базе поискового сервиса имеются индексированные метаданные различных документов репозитория. Подключите системные сборки: BISearch, Fore, Metabase.

Sub UserProc;
Var
    MB: IMetabase;
    SharedParams: ISharedParams;
    SearchEngine: ISolrSearchEngineService;
    Schema: ISolrSearchEngineSchema;
    SearchExecutor: ISearchExecutor;
    SearchContext: ISolrMbObjectsSearchContext;
    Results: ISolrSearchResults;
    Result: ISearchMbObjectResult;
    i: Integer;
Begin
    MB := MetabaseClass.Active;
    //Параметры поиска и индексации, заданные для репозитория
    SharedParams := MB.SpecialObject(MetabaseSpecialObject.SharedParams).Bind As ISharedParams;
    SearchEngine := SharedParams.SearchEngine As ISolrSearchEngineService;
    Schema := SearchEngine.SearchEngineSchema As ISolrSearchEngineSchema;
    //Параметры поиска
    Schema.SearchOptions.UseSmartSearch := False;
    SearchExecutor := Schema.SearchExecutor(SearchEngineTargetType.MbObject);
    SearchContext := SearchExecutor.CreateContext As ISolrMbObjectsSearchContext;
    SearchContext.Locale := LocaleCodeID.Russian;
    //Получать содержимое Документов
    SearchContext.NeedDocumentContent := True;
    SearchContext.Text := "Годовой отчёт 2016";
    //Поиск
    Results := SearchExecutor.Search(SearchContext) As ISolrSearchResults;
    //Просмотр результатов поиска
    For i := 0 To Results.Count - 1 Do
        Result := Results.Item(i) As ISearchMbObjectResult;
        //Вывод информации только по найденным Документам
        If Result.ClassId = MetabaseObjectClass.KE_CLASS_DOCUMENT Then
            Debug.WriteLine("Объект: " + Result.Name + '(' + Result.Id + ')');
            Debug.WriteLine("Дата и время последнего изменения: " + Result.Timestamp);
            If Result.Content <> "" Then
                Debug.WriteLine("Содержимое документа: " + Result.Content);
                If Result.HighlightedContent <> "" Then
                    Debug.WriteLine("Содержимое с подсветкой искомого значения: " + Result.HighlightedContent);
                End If;
            End If;
        End If;
    End For;
End Sub UserProc;

При выполнении примера будет осуществлён поиск указанного значения по индексированным метаданным объектов репозитория. Если искомое значение будет найдено в документах, то их содержимое также будет загружено вместе с результатами. Информация о найденных документах будет выведена в консоль среды разработки.

Пример Fore.NET

Необходимые требования и результат выполнения примера 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: ISolrMbObjectsSearchContext;
    Results: ISolrSearchResults;
    Result: ISearchMbObjectResult;
    i: Integer;
Begin
    MB := Params.Metabase;
    //Параметры поиска и индексации, заданные для репозитория
    SharedParams := MB.SpecialObject[MetabaseSpecialObject.msoSharedParams].Bind() As ISharedParams;
    SearchEngine := SharedParams.SearchEngine As ISolrSearchEngineService;
    Schema := SearchEngine.SearchEngineSchema As ISolrSearchEngineSchema;
    //Параметры поиска
    Schema.SearchOptions.UseSmartSearch := False;
    SearchExecutor := Schema.SearchExecutor[SearchEngineTargetType.settMbObject];
    SearchContext := SearchExecutor.CreateContext() As ISolrMbObjectsSearchContext;
    SearchContext.Locale := LocaleCodeID.lcidRussian;
    //Получать содержимое Документов
    SearchContext.NeedDocumentContent := True;
    SearchContext.Text := "Годовой отчёт 2016";
    //Поиск
    Results := SearchExecutor.Search(SearchContext) As ISolrSearchResults;
    //Просмотр результатов поиска
    For i := 0 To Results.Count - 1 Do
        Result := Results.Item[i] As ISearchMbObjectResult;
        //Вывод информации только по найденным Документам
        If Result.ClassId = (MetabaseObjectClass.KE_CLASS_DOCUMENT As Integer) Then
            System.Diagnostics.Debug.WriteLine("Объект: " + Result.Name + '(' + Result.Id + ')');
            System.Diagnostics.Debug.WriteLine("Дата и время последнего изменения: " + Result.Timestamp);
            If Result.Content <> "" Then
                System.Diagnostics.Debug.WriteLine("Содержимое документа: " + Result.Content);
                If Result.HighlightedContent <> "" Then
                    System.Diagnostics.Debug.WriteLine("Содержимое с подсветкой искомого значения: " + Result.HighlightedContent);
                End If;
            End If;
        End If;
    End For;
End Sub;

См. также:

ISolrMbObjectsSearchContext