結果タイプ投影の有効化および無効化

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

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

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

!注この機能( 結果タイプ投影と呼ばれます)はデフォルトで有効ですが、無効にすることもできます。

このパラメータを使用すると、クエリ性能はいくつかの点で向上します:

  • 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() .Where(i => i.Name == "home").ToArray();

検索ログで以下のSolrクエリに変換されていることがわかります:

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

取得すべきフィールドのリストは、結果型で利用可能なプロパティに基づいて解決されました。これが 結果型投影です。 _uniqueidおよび _datasourceフィールドはシステム使用上必要であり、常にリストに表示されます。

以下の例は、匿名型のSelect(…) メソッドを用いたクエリです:

var result = context.GetQueryable() .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() .Where(i => i.Content == "sitecore") .Filter(i => i.Paths.Contains(contentItemId)) .Cast().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(disableProjection) .Where(i => i.Name == "home").ToArray();

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

q=_name:(home) AND _val_:__boost&fq=_indexname:(sitecore_master_index)&…

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