検索結果に基づいてアイテムのURLを取得してください
このページの翻訳はAIによって自動的に行われました。可能な限り正確な翻訳を心掛けていますが、原文と異なる表現や解釈が含まれる場合があります。正確で公式な情報については、必ず英語の原文をご参照ください。
検索結果を使ってアイテムURLを生成できます。これによりデータベース呼び出しが減り、各検索結果にリンクを表示してサイト訪問者を関連コンテンツへ誘導できます。このトピックでは、アイテムURLを取得する3つの異なる方法を紹介します。
実際のアイテムに基づいてURLを作成します
検索結果でアイテムを取得した場合、Sitecore.Links.LinkManager.GetItemUrlを使ってアイテムURLを取得することができます。
URLを構築する前にアイテムを取得するには:
- 元の GetItem 方法を使って SearchResultItem を入手してください。
あるいは、設定を上書きしたりSearchResultItemクラスに追加したい場合、それらの要件を満たすカスタムSearchResultItemクラスを作成することもできます。例えば:
public class CustomSearchResultItem { …
XmlIgnore IndexField(BuiltinFields.UniqueId) DataMember TypeConverter(typeof(IndexFieldItemUriValueConverter)) public virtual ItemUri Uri { get; set; }
public virtual Item GetItem() { if (this.Uri == null) { return null; }
return Factory.GetDatabase(this.Uri.DatabaseName).GetItem(this.Uri.ItemID, this.Uri.Language, this.Uri.Version); } }
次に、CustomSearchResultItemクラスのGetItem法を使って次のアイテムを得ます。
IQueryable
BaseLinkManager linkManager = ... var options = linkManager.GetDefaultUrlBuilderOptions(); // Populate parameters of 'options'
var url = linkManager.GetItemUrl(actualItem, options);
UrlLink計算インデックスフィールドを有効にしてください
計算されたインデックスフィールドからアイテムURLを取得するには:
-
UrlLink計算されたインデックスフィールドを有効にし、urllinkインデックスフィールドに格納するには、設定パッチファイルを作成し、App_Config\Includeフォルダにパッチを当ててください。
<configuration xmlns
="http://www.sitecore.net/xmlconfig/" xmlns="http://www.sitecore.net/xmlconfig/role/ xmlns="http://www.sitecore.net/xmlconfig/search/">!注siteName属性を使って、他の方法で解決できない場合に使うフォールバックサイトを指定することができます。 siteNameを指定することは単一サイトの解法でのみ機能し、複数サイトの解法では使えません。
インデックスを再構築した後、インデックスされた文書にはこの項目へのリンクを格納する追加のurllink_sフィールドが設けられます。
-
検索結果のURLにアクセスするには、プロパティにIndexField("urllink")属性があるか、プロパティ名がフィールド値名と一致している場合、またはカスタムSearchResultItemクラスを使ってURLにアクセスしてください。すなわちUrlLink。
public class CustomSearchResultItem { …
IndexField("urllink") public virtual string Url { get; set; } }
-
インデックス値にアクセスするには、CustomSearchResultItemクラスのUrlプロパティを使用します。
IQueryable
query = context.GetQueryable ().Where( ); var result = query.ToList(); var -urlLink = result.First().Url; !注このフィールドはSitecore.ContentSearch.SearchTypes.SearchResultItemのUrlプロパティを通じてインデックス値にアクセスすることもできます。
カスタム計算インデックスフィールドを実装してください
リンクの生成方法をより細かくコントロールしたい場合は、カスタムで計算されたインデックスフィールドを作成できます。
カスタム計算インデックスフィールドを実装するには:
-
CustomUrlLinkのようなカスタムクラスを作成し、インデックス構成で登録します。
namespace <YOUR_NAMESPACE>.ComputedFields { public class CustomUrlLink: AbstractComputedIndexField { private readonly BaseLinkManager _linkManager;
...
public override object ComputeFieldValue(IIndexable indexable) { Item item = indexable as SitecoreIndexableItem;
if (item == null) { return null; }
var urlOptions = _linkManager.GetDefaultUrlBuilderOptions(); // Populate parameters of 'urlOptions'
return _linkManager.GetItemUrl(item, urlOptions); } } }
インデックスを再構築した後、インデックスされた文書には追加のcustomurllink_sフィールドがあり、この項目へのリンクを保存します。
-
IndexField("customurllink")属性を持つプロパティ、またはフィールド値の名前に合致する名前を持つCustomSearchResultItemクラスを作成し、アイテムURLにアクセスするためにCustomUrlLinkします。
public class CustomSearchResultItem { …
IndexField("customurllink") public virtual string Url { get; set; } }
-
CustomSearchResultItemクラスのUrlプロパティを使ってインデックス値にアクセスできます。
IQueryable
query = context.GetQueryable ().Where( ); var result = query.ToList(); var customUrlLink = result.First().Url;