ISolrSearchResults.FacetSearchResults

Синтаксис Fore

FacetSearchResults: ISolrFacetSearchResults;

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

FacetSearchResults: Prognoz.Platform.Interop.BISearch.ISolrFacetSearchResults;

Описание

Свойство FacetSearchResults возвращает результат фасетного поиска.

Комментарии

Результат фасетного поиска будет доступен, если в контексте поиска свойству ISolrSearchContext.SearchType было установлено значение SolrSearchType.FacetOnly или SolrSearchType.FacetAndSearch.

Пример Fore

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

Sub UserProc;
Var
    MB: IMetabase;
    SharedParams: ISharedParams;
    SearchEngine: ISolrSearchEngineService;
    Schema: ISolrSearchEngineSchema;
    SearchExecutor: ISearchExecutor;
    SearchContext: ISolrSourceDataSearchContext;
    Results: ISolrSearchResults;
    FacetResults: ISolrFacetSearchResults;
    FacetResult: ISolrFacetFieldResults;
    i, j: 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);
    SearchContext := SearchExecutor.CreateContext As ISolrSourceDataSearchContext;
    SearchContext.Locale := LocaleCodeID.Russian;
    SearchContext.Text := "Куб";
    SearchContext.SearchType := SolrSearchType.FacetOnly;
    //Поиск
    Results := SearchExecutor.Search(SearchContext) As ISolrSearchResults;
    FacetResults := Results.FacetSearchResults;
    //Просмотр результатов фасетного поиска
    For i := 0 To FacetResults.Count - 1 Do
        FacetResult := FacetResults.Item(i);
        Debug.WriteLine("Поле: " + FacetResult.Id + ". Значения: ");
        Debug.Indent;
        For j := 0 To FacetResult.Count - 1 Do
            Debug.WriteLine("Количество фасетных результатов: " + FacetResult.Item(j).FacetCount.ToString +
                ". Значение фасетного поля: " + FacetResult.Item(j).FacetValue);
        End For;
        Debug.Unindent;
    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: ISolrSourceDataSearchContext;
    Results: ISolrSearchResults;
    FacetResults: ISolrFacetSearchResults;
    FacetResult: ISolrFacetFieldResults;
    i, j: 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];
    SearchContext := SearchExecutor.CreateContext() As ISolrSourceDataSearchContext;
    SearchContext.Locale := LocaleCodeID.lcidRussian;
    SearchContext.Text := "Value";
    SearchContext.SearchType := SolrSearchType.sstFacetOnly;
    //Поиск
    Results := SearchExecutor.Search(SearchContext) As ISolrSearchResults;
    FacetResults := Results.FacetSearchResults;
    //Просмотр результатов фасетного поиска
    For i := 0 To FacetResults.Count - 1 Do
        FacetResult := FacetResults.Item[i];
        System.Diagnostics.Debug.WriteLine("Поле: " + FacetResult.Id + ". Значения: ");
        System.Diagnostics.Debug.Indent();
        For j := 0 To FacetResult.Count - 1 Do
            System.Diagnostics.Debug.WriteLine("Количество фасетных результатов: " + FacetResult.Item[j].FacetCount.ToString() +
                ". Значение фасетного поля: " + FacetResult.Item[j].FacetValue);
        End For;
        System.Diagnostics.Debug.Unindent();
    End For;
End Sub;

См. также:

ISolrSearchResults