結果タイププロジェクションの有効化と無効化

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

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

Content Search LINQ APIは、Solr Query APIのflパラメーターを使用して、Solrが検索結果で返すフィールドの一覧を指定します。

メモ

この機能( result type projectionと呼ばれます)はデフォルトで有効になっていますが、無効にすることもできます。

このパラメータを使用すると、クエリのパフォーマンスはいくつかの点で向上します。

  • Solrが検索結果を提供するために使用するリソースが削減されます。

  • Sitecoreが検索結果の処理に使用するリソースが削減されます。

  • クエリの実行にかかる時間が改善されました。

たとえば、次のコードがあるとします。

public class SimpleResultItem
{
 [IndexField("_name")]
 public string Name { get; set; }

 [IndexField("_uniqueid")]
 public virtual ItemUri Uri { get; set; }

 [IndexField("_template")]
 public virtual ID TemplateId { get; set; }
}

次に、次のLINQクエリを実行します。

SimpleResultItem[] result = context.GetQueryable<SimpleResultItem>()
       .Where(i => i.Name == "home").ToArray();

その後、検索ログで、次のSolrクエリに変換されることがわかります。

q=_name:(home) AND _val_:__boost&fl=_name,_template,_uniqueid,_datasource&

取得するフィールドのリストは、結果タイプで使用可能なプロパティに基づいて解決されました。これがresult type projectionです。 _uniqueidフィールドと _datasourceフィールドは、システムの使用に必須であるため、常にリストに表示されます。

次の例は、匿名型でSelect(…) メソッドを使用するクエリです。

var result = context.GetQueryable<SimpleResultItem>()
        .Where(i => i.Name == "home")
        .Select(i => new {i.Name}).ToArray();

Solrからは3つのフィールドのみを取得します。

q=_name:(home) AND _val_:__boost&fl=_name,_uniqueid,_datasource&

実際には、検索と結果の取得に別々のタイプを使用できます。これは、検索に使用できる豊富なプロパティ セットを持つと同時に、無駄のない検索結果を取得できるため便利です。次の例では、クエリは検索にデフォルトのSearchResultItemタイプを使用し、結果の取得にSimpleResultItemを使用します。

SimpleResultItem[] result = context.GetQueryable<SearchResultItem>()
 .Where(i => i.Content == "sitecore")
 .Filter(i => i.Paths.Contains(contentItemId))
 .Cast<SimpleResultItem>().ToArray();

これは、次のように変換されます。

q=_content:(sitecore) AND val_:__boost&fq=_path:(0de95ae441ab4d019eb067441b7c2450)&fl=_name,_template,_uniqueid,_datasource&

SearchResultItem型には20を超えるプロパティがありますが、プロバイダーはSimpleResultItem型のオブジェクトを設定するのに十分な4つのフィールドのみを要求します。

結果タイププロジェクションの無効化

結果タイプの投影はデフォルトで有効になっています。ただし、以前のSitecoreバージョンとの下位互換性を維持するために、無効にすることができます。結果タイプが次のいずれかの条件を満たす場合、タイプ投影は無効になります。

  • 型にはインデクサーがあります

  • 型には、CollapsedIndexFieldAttribute属性でマークされたプロパティがあります

  • タイプのフィールド数が、Sitecore設定の "ContentSearch.Solr.MaxNumberOfFieldsToProject" 設定で定義された制限に達している

クエリ レベルでプロジェクションを強制的に有効または無効にするには、適切なパラメーターを使用してResultTypeProjectionExecutionContext実行コンテキストをGetQueryableメソッドに渡します。

var disableProjection = ResultTypeProjectionExecutionContext.Switch(isEnable: false);
         
SimpleResultItem[] result = context.GetQueryable<SimpleResultItem>(disableProjection)
 .Where(i => i.Name == "home").ToArray();

Solrクエリーには、次のflパラメーターが含まれていません。

q=_name:(home) AND _val_:__boost&fq=_indexname:(sitecore_master_index)&
この記事を改善するための提案がある場合は、 お知らせください!