1. Search

構成

日本語翻訳に関する免責事項

このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。

このSearch APIは、デフォルト値とフィルターを使用して、すべての検索にデフォルトの検索設定を適用します。

デフォルトのSearch構成設定

デフォルトの検索設定は、SearchDefaultsというMの設定から取得されます。設定の名前は、検索関連のAPIリソースにnameというパラメーターとして渡される変数です。UIコンポーネントは、REST呼び出しを実行するときに、その設定で設定を検索し、それをSearchコントローラーに渡します。

Sitecore Content Hubの例はSearchConfiguration.json、これは設定のPortalConfigurationセクションにあります。

警告

APIは、クエリで指定された関連パスのみをロードするように設定されています。クエリで関連するパス関係を指定しない場合、応答は何も返しません。

検索設定スキーマには、次のプロパティがあります。

財産

形容

Name

設定の名前。

Take

返される結果の既定の数。これは、検索要求にページングが含まれていない場合にのみ使用されます。デフォルトでは、ページあたりのアイテムの最大数は50で、ページの最大数は100です。

Filters

各クエリに適用するフィルター。複数のフィルターが指定されている場合は、AND演算子を使用してまとめて評価されます。

Facets

ファセットとして使用される定義。スキーマは、ファセットが結果エンティティにリンクされる方法を決定します (たとえば、分類関係を使用して)。

Followups

フォローアップファセットの設定。ファセット・フィルターが特定の定義に適用されている場合、検索クエリーに他のファセットを追加することもできます。

PropertiesToLoad:

結果に含まれるプロパティ。

relationsToLoad

結果に含まれる関係。

renditionsToLoad

レンディションを持つエンティティの結果に含めるレンディション。

ResultTypes

結果として返されるエンティティの種類。検索クエリには、これらの種類のエンティティのみが返されるようにするためのフィルターが追加されます。

SuperFacets

定義にスーパーファセットのフラグが設定されている場合、検索応答にはそのスーパーファセットに関する追加情報が含まれます。

Sorting

デフォルトのソート方法。

{
    "name": "SearchConfiguration",
    "take": 10,
    "filters": [
        {
            "name": "relations.FinalLifeCycleStatusToAsset.parents",
            "operator": "Equals",
            "valueExpression": "String(\"StatusValue\") == \"Approved\""
        }
    ],
    "facets": [
        {
            "name": "M.Campaign"
        },        
        {
            "name": "M.AssetOriginator",
           "limit": 3,
            "sorting": "Alphabetical",
            "direction": "Ascending"
        }
    ],
    "followups": [        
        {
            "name": "M.AssetType",
            "valueExpression": "string(\"ClassificationName\") == \"Video\"",
            "followupName": "Ms.BitRate"
        }
    ],
    "superfacets": [
        {
            "definition": "M.Brand"
        }
    ],
    "propertiesToLoad": [
        "FileName",
        "Renditions"
    ],
    "resultTypes": [
        "M.Asset"
    ],
    "sorting": [
        {
            "property": "ModifiedOn",
            "direction": "Descending"
        }
    ]
}

ファセット

ファセットを定義する最も簡単な方法は、定義名を使用することです。ファセットは、Content Hubスキーマによって異なります (たとえば、定義がIsTaxonomyItemDefinitionとしてマークされているなど)。

ファセットには2つのタイプがあります。

  • 標準ファセット (リレーション)

  • フィールドファセット (プロパティ)

標準ファセット

{
  "name": "M.Campaign"
}

フィールドファセット

{
  "name": "FileExtension",
  "type": 1
}

limitパラメーターを使用して、ファセットによって返される値の数を制限できます。このパラメータのデフォルト値は10です。

メモ

limitパラメーターを0に設定すると、ファセットは使用可能なすべての値を返します。

各ファセットには、そのファセットに対して返される項目がページ上でどのように順序付けられるかを決定するためのsortingパラメーターを指定できます。このパラメータの可能な値は次のとおりです。

  • Count (デフォルト)

  • Alphabetical

  • Field

ファセットのソート順を制御するには、directionパラメータを追加します。このパラメータにはAscendingまたはDescendingの値を指定する必要があります。

手記

アルファベット順の並べ替えは、すべてのファセット値が返される場合にのみ役立ちます。

フィルター

フィルターは、JSON構成設定またはクエリ共同作成者フレームワークを使用して定義できます。

フィルターで使用される各値式は、1つのIdに解決される必要があります。

この例では、definition_name == "M.Asset" にフィルターを適用します。

{
    "name": "relations.FinalLifeCycleStatusToAsset.parents",
    "operator": "Equals",
    "valueExpression": "String(\"StatusValue\") == \"Approved\""
}

上記の例では、ライフサイクルステータスapprovedIdにフィルターを適用しています。(シングルId)。

値式を使用しない場合、nameは定義名として扱われ、フィルターはその定義に基づきます。

{
  "name": "M.Asset"
}

また、フィルターのフィルターを作成し、それらの内部フィルターに適用するオペレーターを選択することもできます。

{
  "operator": "OR",
  "filters": [
    {
      "name": "relations.FinalLifeCycleStatusToAsset.parents",
      "operator": "Equals",
      "valueExpression": "String(\"StatusValue\") == \"Created\""
    },
    {
      "name": "relations.FinalLifeCycleStatusToAsset.parents",
      "operator": "Equals",
      "valueExpression": "String(\"StatusValue\") == \"Rejected\""
    }
  ]
}

コードを使用したデフォルトのフィルター

コードを使用してフィルターを適用することもできます。

この例では、ORフィルタが複数の定義名と、M.Asset (ライフサイクル ステータスapproved) の特定の名前に適用されます。

フィルターは次のようになります。

(definition = "M.Sku" OR definition = "M.Product" OR definition = "M.Campaign" OR definition = "M.Recipe" OR (definition = M.Asset AND LifeCycleStatus = Approved))

      public class SearchConfigurationQueryContributor : IQueryContributor
    {
        private readonly IQuerying _querying;

        public SearchConfigurationQueryContributor(IQuerying querying)
        {
            this._querying = querying;
        }

        public Base.Search.Filters.FilterBase AddQuery(QueryContext context)
        {
            CompositeFilter filter = new CompositeFilter(FilterCombineMethod.Or);

            var qb = new QueryBuilder();

            //First step is to resolve final lifecycle status = Approved. (we are only gonna show approved stuff in the search.)
            long? approvedId = this._querying.Basic.Entities.SingleId(qb.Definition.Name == Stylelabs.M.Content.Constants.FinalLifeCycleStatusDefinition.DefinitionName &&
                qb.String(Stylelabs.M.Content.Constants.FinalLifeCycleStatusDefinition.StatusValue) == Stylelabs.M.Content.Constants.FinalLifeCycleStatusDefinition.ApprovedStatus);

            if (!approvedId.HasValue)
                throw new InvalidOperationException("Could not resolve approved status.");

            //These are the definitions we will apply a simple filter for (OR between definitions)
            string[] definitionsToDisplay = new string[] { "M.Sku", "M.Product", "M.Campaign", "M.Recipe" };
            foreach(string definition in definitionsToDisplay)
            {
                filter.Add(new FieldFilter<string>(Stylelabs.M.Base.ElasticSearch.Constants.PropertyNames.DefinitionName) { Value = definition });
            }

            //For asset we will only display the approved ones
            var assetFilter = new CompositeFilter(FilterCombineMethod.And);
            assetFilter.Add(new FieldFilter<string>(Stylelabs.M.Base.ElasticSearch.Constants.PropertyNames.DefinitionName) { Value = "M.Asset" });
            assetFilter.Add(new FieldFilter<long>("relations.FinalLifeCycleStatusToAsset.parents") { Value = approvedId.Value });
            filter.Add(assetFilter);

            return filter;
        }
    }

このquerycontributerにより、クエリに適用されるフィルターに直接影響を与えることができます。これらのフィルターは、クライアント側では表示されません。(たとえば、QueryString、QueryBuilderなど)

querycontributerクラスの準備ができたら、次のステップはプロジェクトのApplicationModuleに登録することです

        public override void OnConfiguration(IContainer container)
        {
            base.OnConfiguration(container);

            IQueryConfiguration queryConfiguration = container.Resolve<IQueryConfiguration>();
            queryConfiguration.QueryContributorRegistry.Add<SearchConfigurationQueryContributor>("SearchConfiguration");
        }

複数のクエリ コントリビューターを、構成のフィルターと共に組み合わせることができます。クエリ共同作成者は、常にフィルターを追加するSearchConfigurationの名前に関連付けられています。

この記事を改善するための提案がある場合は、 お知らせください!