SharePoint 2013 コンテンツ検索 Web パーツでプロパティのマッピングを編集する

こんにちは、SharePoint サポートの佐伯です。
今回の投稿では、コンテンツ検索 Web パーツで取得する検索結果の管理プロパティのマッピングの設定について記述します。

コンテンツ検索 Web パーツでは、表示する管理プロパティを Web パーツの編集画面の [プロパティのマッピング] で選択することができます。プロパティのマッピングの設定項目は、検索結果の描画で使用する表示テンプレート (詳細はこちら) によって異なります。目的に合った表示テンプレートを選択し、プロパティのマッピングを設定します。

例えば、[プロパティのマッピング] にそれぞれ管理プロパティを設定すると、下記のような検索結果となります。

プロパティのマッピング項目は、表示テンプレート内の <mso:ManagedPropertyMapping>~</mso:ManagedPropertyMappin>で定義されます。
例) <mso:ManagedPropertyMapping msdt:dt="string">'Link URL'{リンクの URL}:'Path','Line 1'{行 1}:'Title','Line 2'{行 2}:'','FileExtension','SecondaryFileExtension'</mso:ManagedPropertyMapping>
詳しくは、' <項目名> '{ <Web パーツの設定画面での項目の表示名> }:' <既定で選択させる管理プロパティ名> ' のような記述となります。

SharePoint サイトでは、既定でいくつかの表示テンプレートが用意されていますが、表示テンプレートを作成または編集することでプロパティのマッピング項目を変更することが可能です。なお、検索を実行すると、プロパティのマッピングで選択した管理プロパティはクライアントに返されますが、それらをコンテンツ検索 Web パーツで表示させるには、取得した管理プロパティの値を画面上に表示させる JavaScript の実装が必要となります。

例をあげて、編集方法を見ていきましょう。

<目次>
(1)プロパティのマッピングの項目の初期値を設定する方法
(2)プロパティのマッピングの項目を追加する方法

(1)プロパティのマッピングの項目の初期値を設定する方法
表示テンプレート "左に画像、右に 3 行を表示" (Item_Picture3Lines.html) を例に説明します。

■既定の表示テンプレートの場合
既定では、表示テンプレート内のプロパティのマッピングは下記になります。"行 3" に注目してください。

<mso:ManagedPropertyMapping msdt:dt="string">'Picture URL'{画像の URL}:'PublishingImage;PictureURL;PictureThumbnailURL','Link URL'{リンクの URL}:'Path','Line 1'{行 1}:'Title','Line 2'{行 2}:'Description', 'Line 3'{行 3}:'' ,'SecondaryFileExtension','ContentTypeId'</mso:ManagedPropertyMapping>

[プロパティのマッピング] は下記のように表示され、"行 3" は管理プロパティが設定されていない状態となります。

"行 3" に管理プロパティを設定する場合は、[アイテム表示テンプレートのフィールドに対し、管理プロパティのマッピングを変更します。] にチェックを入れ、管理プロパティを設定します。

■表示テンプレートをカスタマイズする場合
既定の状態では "行 3" は何も設定されていない状態でしたが、初期値を設定してみましょう。"行 3" の既定の管理プロパティを LastModifiedTime にする場合は、以下のように記述します。

<mso:ManagedPropertyMapping msdt:dt="string">'Picture URL'{画像の URL}:'PublishingImage;PictureURL;PictureThumbnailURL','Link URL'{リンクの URL}:'Path','Line 1'{行 1}:'Title','Line 2'{行 2}:'Description', 'Line 3'{行 3}:'LastModifiedTime' ,'SecondaryFileExtension','ContentTypeId'</mso:ManagedPropertyMapping>

すると、"行 3" に既定で管理プロパティ LastModifiedTime が設定された状態となります。

なお、[アイテム表示テンプレートのフィールドに対し、管理プロパティのマッピングを変更します。] にチェックを入れることで、各項目に設定された管理プロパティを変更することができます。

(2)プロパティのマッピングの項目を追加する方法

表示テンプレート "2 行" (Item_TwoLines.html) を例に説明します。
■既定の表示テンプレートの場合
既定では、表示テンプレート内のプロパティのマッピングは下記になります。"リンクの URL"、"行 1"、"行 2" に注目してください。

<mso:ManagedPropertyMapping msdt:dt="string"> 'Link URL'{リンクの URL}:'Path','Line 1'{行 1}:'Title','Line 2'{行 2}:'' ,'FileExtension','SecondaryFileExtension'</mso:ManagedPropertyMapping>

[プロパティのマッピング] は下記のように表示され、[アイテム表示テンプレートのフィールドに対し、管理プロパティのマッピングを変更します。] にチェックを入れると、"リンクの URL"、"行 1"、"行 2" でそれぞれ管理プロパティが設定できる状態となります。

■表示テンプレートをカスタマイズする場合
プロパティのマッピング項目として "行 3" を追加してみましょう。下記のように記述します。

<mso:ManagedPropertyMapping msdt:dt="string">'Link URL'{リンクの URL}:'Path','Line 1'{行 1}:'Title','Line 2'{行 2}:'', 'Line 3'{行 3}:'' ,'FileExtension','SecondaryFileExtension'</mso:ManagedPropertyMapping>

すると、"行 3" の項目が追加され、この項目にも管理プロパティを設定することができます。

なお、プロパティのマッピングを追加したことにより、"行 3" に設定した管理プロパティが検索結果としてクライアントに返されるようになりますが、これを表示するには、この管理プロパティをコンテンツ検索 Web パーツ上に表示させる実装を行う必要があります。
下記はサンプルとなりますが、"行 3" に設定した管理プロパティを取得し表示する実装 (青文字箇所) を追加します。

<div id="TwoLines"><!--#_var encodedId = $htmlEncode(ctx.ClientControl.get_nextUniqueId() + "_2lines_");var linkURL = $getItemValue(ctx, "Link URL");linkURL.overrideValueRenderer($urlHtmlEncodeValueObject);var iconURL = Srch.ContentBySearch.getIconSourceFromItem(ctx.CurrentItem);var line1 = $getItemValue(ctx, "Line 1");var line2 = $getItemValue(ctx, "Line 2");var line3 = $getItemValue(ctx, "Line 3");line1.overrideValueRenderer($contentLineText);line2.overrideValueRenderer($contentLineText);line3.overrideValueRenderer($contentLineText);var containerId = encodedId + "container";var pictureLinkId = encodedId + "pictureLink";var pictureId = encodedId + "picture";var dataContainerId = encodedId + "dataContainer";var line1LinkId = encodedId + "line1Link";var line1Id = encodedId + "line1";var line2Id = encodedId + "line2";var line3Id = encodedId + "line3";_#--><div class="cbs-Item" id="_#= containerId =#_" data-displaytemplate="Item2Lines"><a class="cbs-ItemLink" title="_#= $htmlEncode(line1.defaultValueRenderer(line1)) =#_" id="_#= pictureLinkId =#_"><img class="cbs-Thumbnail" src="_#= $urlHtmlEncodeString(iconURL) =#_" alt="_#= $htmlEncode(line1.defaultValueRenderer(line1)) =#_" id="_#= pictureId =#_" /></a><div class="cbs-Detail" id="_#= dataContainerId =#_"><a class="cbs-Line1Link ms-noWrap ms-displayBlock" href="_#= linkURL =#_" title="_#= $htmlEncode(line1.defaultValueRenderer(line1)) =#_" id="_#= line1LinkId =#_">_#= line1 =#_</a><!--#_if(!line2.isEmpty){_#--><div class="cbs-Line2 ms-noWrap" title="_#= $htmlEncode(line2.defaultValueRenderer(line2)) =#_" id="_#= line2Id =#_">_#= line2 =#_</div><!--#_}_#--><!--#_if(!line3.isEmpty){_#--> <div class="cbs-Line2 ms-noWrap" title="_#= $htmlEncode(line3.defaultValueRenderer(line3)) =#_" id="_#= line3Id =#_">_#= line3 =#_</div><!--#_}_#--></div></div></div>

※検索結果のレイアウトやデザインを変更したい場合は、HTML や CSS をご要件に合わせて編集してください。

補足情報
[プロパティのマッピング] の項目には表示させずに、検索実行時に取得させる管理プロパティの種類を増やす場合は、<mso:ManagedPropertyMapping>~</mso:ManagedPropertyMapping> 内に管理プロパティ名のみを追加します。(例 IsDocument を追加)

<mso:ManagedPropertyMapping msdt:dt="string">'Link URL'{リンクの URL}:'Path','Line 1'{行 1}:'Title','Line 2'{行 2}:'','FileExtension','SecondaryFileExtension', 'IsDocument' </mso:ManagedPropertyMapping>

検索結果の描画を行うロジック上で拡張子をもとに表示内容を変更したい場合やドキュメントであるかを判定させる処理を入れる場合などでは、実装上固有の管理プロパティを取得させることが決まるため、Web パーツの編集画面の [プロパティのマッピング] で編集をさせないよう、上記のようにマッピングを定義する方法が考えられます。

ご注意
コンテンツ検索 Web パーツで [アイテム表示テンプレートのフィールドに対し、管理プロパティのマッピングを変更します。] にチェックを入れ、プロパティのマッピングを設定している場合、Web パーツ固有のプロパティのマッピング情報が登録されます。
この場合、既に Web パーツに適用している表示テンプレートのプロパティのマッピング項目を編集した後は、この変更内容を反映させるため、Web パーツのプロパティのマッピングを再設定する必要があります。

今回の投稿は以上です。
検索の設定やカスタマイズについては、下記のブログ記事をご参考にしていただけますと幸いです。
SharePoint 2013 検索の設定やカスタマイズに関する投稿まとめ