SharePoint 2013 検索結果 Web パーツでカスタムの管理プロパティを表示する

こんにちは、SharePoint サポートの佐伯です。
今回の投稿では、検索結果 Web パーツでカスタムの管理プロパティを表示する方法についてご紹介します。

SharePoint サイトでコンテンツの検索を行う際、リストに追加したカスタム列も検索結果に表示させたいことがあると思います。
その場合、カスタム列を検索の管理プロパティにマッピングすることで、検索結果でカスタム列に入力された情報を取得することが可能です。また、表示テンプレート (*1) と呼ばれる検索結果の表示を定義したファイルを編集することで、取得したカスタム列の情報を表示させることができます。
カスタム列とカスタム管理プロパティの作成方法、カスタムの管理プロパティを表示する表示テンプレートの編集方法および適用方法について、一連の流れで手順を記載いたします。ご要件に合わせて適宜変更してください。ご実施の際は、検証環境で十分な動作確認を行ってください。

<目次>
1) カスタムの管理プロパティの作成
2) カスタムの管理プロパティを表示する表示テンプレートの編集
3) カスタムの管理プロパティを表示する表示テンプレートの適用

1) カスタムの管理プロパティの作成
リストまたはライブラリでカスタムの列を作成し、カスタムの管理プロパティにマッピングします。カスタム列を作成する際、リスト列を作成するかサイト列を作成する方法があります。それぞれの列で管理プロパティを作成する手順を記載します。なお、複数のリストまたはライブラリで同じ列を使用する場合は、サイト列を作成する方法が便利です。

■ リスト列を作成する場合の手順
1. 目的のリストでリスト列を作成します。
1-1. リストの [リストの設定] を開き、[列の作成] をクリックします。
1-2. 列名を TestField1 とし、その他の項目を設定します。
2. テスト用にリスト アイテムを作成し、追加した列にも値を設定しておきます。
3. フル クロールを実行します。フル クロールを実行すると、上記で作成した列がクロールされたプロパティとして反映されます。
3-1. サーバーの全体管理サイトにアクセスし、[アプリケーション構成の管理] – [サービス アプリケーションの管理] より、該当の Search Service Application をクリックします。
3-2. 左のサイド リンク バーから [コンテンツ ソース] をクリックします。
3-3. 該当のコンテンツ ソースの名前をポイントし、表示された矢印をクリックして [フル クロールの開始] をクリックします。
3-4. フル クロールが完了後、左のサイド リンク バーから [検索スキーマ] をクリックし、[クロールされたプロパティ] をクリックします。
3-5. 作成した列の名前をもとに検索し、カスタム列がクロールされたプロパティとして反映されていることを確認します。(例 ows_TestField1)
4. カスタムの管理プロパティを作成し、上記のクロールされたプロパティをマッピングします。
4-1. 左のサイド リンク バーから [検索スキーマ] をクリックします。
4-2. [新しい管理プロパティ] をクリックします。
4-3. 以下の項目を設定します。
プロパティ名 : TestProperty1
主な特徴 : [取得可能] にチェックを入れます (これにより、検索結果で値を取得して表示することができます)
4-4. [クロールされたプロパティへのマッピング] で、[マッピングの追加] をクリックし、手順 3 で反映されたクロールされたプロパティ ows_TestField1 を追加します。
4-5. [OK] をクリックします。
5. カスタムの管理プロパティにマッピングされた情報を反映させるため、再度フル クロールを実行します。

■ サイト列を作成する場合の手順
1. サイトでサイト列を作成します。
1-1. [サイトの設定] を開き、[Web デザイナー ギャラリー] – [サイト列] をクリックします。
1-2. [作成] をクリックします。
1-3. 列名を TestField1 とし、その他の項目を設定します。
2. 目的のリストにサイト列を追加して、リスト列を作成します。
2-1. リストの [リストの設定] で [サイト内の既存の列から追加] をクリックします。
2-2. [利用可能なサイト列] で TestField1 を選択して追加します。
2-3. [OK] をクリックします。
3. テスト用にリスト アイテムを作成し、追加した列にも値を設定しておきます。
4. フル クロールを実行します。フル クロールを実行すると、上記で作成した列がクロールされたプロパティとして反映されます。
4-1. サーバーの全体管理サイトにアクセスし、[アプリケーション構成の管理] – [サービス アプリケーションの管理] より、該当の Search Service Application をクリックします。
4-2. 左のサイド リンク バーから [コンテンツ ソース] をクリックします。
4-3. 該当のコンテンツ ソースの名前をポイントし、表示された矢印をクリックして [フル クロールの開始] をクリックします。
4-4. フル クロールが完了後、左のサイド リンク バーから [検索スキーマ] をクリックし、[クロールされたプロパティ] をクリックします。
4-5. 作成した列の名前をもとに検索し、カスタム列がクロールされたプロパティとして反映されていることを確認します。(例 ows_q_TEXT_TestField1)
5. カスタムの管理プロパティを作成し、上記のクロールされたプロパティをマッピングします。
5-1. 左のサイド リンク バーから [検索スキーマ] をクリックします。
5-2. [新しい管理プロパティ] をクリックします。
5-3. 以下の項目を設定します。
プロパティ名 : TestProperty1
主な特徴 : [取得可能] にチェックを入れます (これにより、検索結果で値を取得して表示することができます)
5-4. [クロールされたプロパティへのマッピング] で、[マッピングの追加] をクリックし、手順 4 で反映されたクロールされたプロパティ ows_q_TEXT_TestField1 を追加します。
5-5. [OK] をクリックします。
6. カスタムの管理プロパティにマッピングされた情報を反映させるため、再度フル クロールを実行します。

2) カスタムの管理プロパティを表示する表示テンプレートの編集
検索結果でカスタムの管理プロパティを取得して表示を行うように表示テンプレートを編集します。SharePoint 既定の表示テンプレートを編集する場合とカスタムの表示テンプレートを作成する場合の手順をそれぞれ記載します。

■ 既定の表示テンプレートを編集する場合の手順
1. 既定の表示テンプレートをダウンロードします。
1-1. [サイトの設定] を開き、[Web デザイナー ギャラリー] – [マスター ページ] をクリックします。
1-2. マスター ページ ギャラリーの [Display Templates]、[Search] フォルダを展開します。
1-3. 既定の表示テンプレート ファイル (例 Item_Default.html) のコピーをダウンロードします。(*2)
2. 表示テンプレート ファイルを編集します。
2-1. ファイルを開いて下記のように編集します。
編集内容1) <mso:ManagedPropertyMapping msdt:dt="string"> に、検索結果に表示する管理プロパティのマッピングを設定します。今回表示を追加するカスタムの管理プロパティのマッピングを追加します。
<mso:ManagedPropertyMapping msdt:dt="string">'Title':'Title','Path':'Path', ... 省略 ... , 'TestProperty1':'TestProperty1' </mso:ManagedPropertyMapping>
編集内容2) カスタムの管理プロパティを取得する JavaScript のコードを記述します。例えば、下記のコードを _#=ctx.RenderBody(ctx)=#_ の後に追記します。 (*3)
<!--#_
var testProp1 = ctx.CurrentItem.TestProperty1;
_#-->
_#=testProp1=#_
2-2. ファイルを保存します。ファイルは文字コード UTF-8 で保存してください。
3. マスター ページ ギャラリーの [Display Templates]、[Search] フォルダに編集したファイルを上書きアップロードします。

■ カスタムの表示テンプレートを作成する場合の手順
1. 既定の表示テンプレートをダウンロードします。
1-1. [サイトの設定] を開き、[Web デザイナー ギャラリー] – [マスター ページ] をクリックします。
1-2. マスター ページ ギャラリーの [Display Templates]、[Search] フォルダを展開します。
1-3. 既定の表示テンプレート ファイル (例 Item_Default.html) のコピーをダウンロードします。(*2)
2. 表示テンプレート ファイルを編集します。
2-1. ダウンロードしたファイルの名前を変更します。Item_Custom.html に変更します。
2-2. ファイルを開いて下記のように編集します。
編集内容1) <body> の直後にある <div> の id に、このファイルの名前を記述します。
<div id="Item_Custom">
編集内容2) <title> には表示テンプレートのタイトルを入力します。
<title>カスタム アイテム</title>
編集内容3) <mso:ManagedPropertyMapping msdt:dt="string"> に、検索結果に表示する管理プロパティのマッピングを設定します。今回表示を追加するカスタムの管理プロパティのマッピングを追加します。
<mso:ManagedPropertyMapping msdt:dt="string">'Title':'Title','Path':'Path', ... 省略 ... , 'TestProperty1':'TestProperty1' </mso:ManagedPropertyMapping>
編集内容4) カスタムの管理プロパティを取得する JavaScript のコードを記述します。例えば、下記のコードを _#=ctx.RenderBody(ctx)=#_ の後に追記します。 (*3)
<!--#_
var testProp1 = ctx.CurrentItem.TestProperty1;
_#-->
_#=testProp1=#_
2-3. ファイルを保存します。ファイルは文字コード UTF-8 で保存してください。
3. マスター ページ ギャラリーの [Display Templates]、[Search] フォルダに編集したファイルをアップロードします。

3) カスタムの管理プロパティを表示する表示テンプレートの適用
検索結果を描画する際に、単一の表示テンプレートを使用するか、または検索結果の種類 (*4) に合わせて表示テンプレートを使用するかを検索結果 Web パーツの設定で選択することができます。
単一の表示テンプレートを使用する場合と検索結果の種類に合わせて表示テンプレートを使用する場合で手順が少々異なります。それぞれの手順を以下に記載します。

■ 検索結果で単一の表示テンプレートを使用する場合の手順
1. 単一の表示テンプレートのみを使用して検索結果の表示が行われるよう検索結果 Web パーツを設定します。
1-1. 検索結果 Web パーツが配置されたページを開き、[歯車] - [ページの編集] をクリックします。
1-2. 検索結果 Web パーツで [Web パーツの編集] をクリックします。
1-3. [表示テンプレート] を展開し、 [単一のテンプレートを使用してアイテムを表示する] にチェックを入れます。
1-4. [アイテム表示テンプレート] で目的の表示テンプレートを選択します。
1-5. [OK] をクリックして検索結果 Web パーツを保存します。
1-6. ページを保存します。

■ 検索結果の種類に合わせて表示テンプレートを使用する場合の手順
1. 検索結果の種類に合わせて表示テンプレートが使用されるよう検索結果 Web パーツを設定します。
1-1. 検索結果 Web パーツが配置されたページを開き、[歯車] – [ページの編集] をクリックします。
1-2. 検索結果 Web パーツで [Web パーツの編集] をクリックします。
1-3. [表示テンプレート] を展開し、 [検索結果の種類を使用したアイテムの表示] にチェックを入れます。
1-4. [OK] をクリックして検索結果 Web パーツを保存します。
1-5. ページを保存します。
2. 目的の表示テンプレートを適用させるカスタムの検索結果の種類を作成します。
2-1. [サイトの設定] を開き、[サイト コレクションの管理] – [検索結果の種類] または [検索] – [検索結果の種類] をクリックします。
2-2. [新しい検索結果の種類] をクリックします。
2-3. 以下の項目を設定します。
(例 リスト アイテムの検索結果に対して、目的の表示テンプレートを適用する場合)
名前 : リスト アイテムの検索結果
結果を一致させるソース : すべてのソース
検索するコンテンツの種類 : SharePoint リスト アイテム
表示テンプレートの選択 : 目的の表示テンプレート
2-4. [保存] をクリックします。

<既定の表示テンプレート ファイルを編集した場合の補足事項>
検索サービスによって提供されている検索結果の種類 (*5) では、検索結果が該当のコンテンツの種類であった場合、既定の各表示テンプレートが使用されるよう設定が行われております。例えば、検索結果がディスカッションであれば既定の表示テンプレート Item_Discussion、Excel ファイルであれば Item_Excel を使用して表示が行われます。
そこで、既定の表示テンプレートに、カスタムの管理プロパティのマッピングとこのプロパティを表示する JavaScript のコードを追加し、上書きアップロードすることで、そのままカスタムの管理プロパティの表示が行われるように感じるかもしれません。
しかし、これらの既定で用意されている検索結果の種類は、検索サービス単位で定義されており、検索結果で取得される管理プロパティは検索サービス単位で定義されています。サイト コレクション単位で定義する表示テンプレートにマッピング情報を追加した場合も、ファーム全体の共通設定と認識されず、検索結果で取得されません。
検索結果の種類に合わせて表示テンプレートを使用する設定を行った上で、表示テンプレートに追加したカスタムの管理プロパティのマッピング情報を検索結果に反映させる場合は、サイト コレクション単位またはサイト単位でカスタムの検索結果の種類を追加します。

*1 : 表示テンプレートとは、検索結果の表示を定義したファイルです。詳細はこちらをご覧ください。
*2 : サイト コレクションで発行インフラストラクチャ機能が非アクティブな場合、表示テンプレートの html ファイルは作成されません。詳細はこちらをご覧ください。
*3 : 上述の表示テンプレート ファイルに実装する内容は一例となりますので、ご要件に合わせて編集してください。こちらもご覧ください。
*4 : 検索結果の種類とは、対象となる検索結果の条件と、その条件を満たす場合に実行するアクションを設定したものです。検索結果のアイテムに合わせて、表示の際に使用する表示テンプレートを変えることができます。詳細はこちらをご覧ください。
*5 : 検索サービスによって提供されている検索結果の種類は、[検索結果の種類] 画面の [検索サービスによって提供] に表示されている一覧から確認できます。

今回の投稿は以上です。

これまで投稿してきた検索の設定やカスタマイズについて、以下の記事でご紹介しておりますので、ご参考にしていただけますと幸いです。
SharePoint 2013 検索の設定やカスタマイズに関する投稿まとめ