SharePoint 2013 の検索でユーザー コンテキスト (セグメンテーション) を使用する

原文の記事の投稿日: 2012 年 12 月 3 日 (月曜日)

検索で現在のユーザーを表すコンテキストを使用する手法は、FAST Search for SharePoint 2010 で最初に導入されました。そのしくみを詳しく知りたい方は、http://blogs.technet.com/b/speschka/archive/2009/12/09/using-custom-properties-to-create-a-fast-search-for-sharepoint-2010-user-context.aspx (英語) の投稿を参照してください。SharePoint 2013 にはまったく同じ機能はありませんが、ユーザーのセグメンテーションと呼ばれる機能に置き換わりました。ユーザー セグメントの概要としくみについては、検索チームのメンバーが既に http://blogs.msdn.com/b/adaptive_experiences_in_sharepoint_2013/archive/2012/11/14/set-up-user-segmentation-to-drive-adaptive-experiences-in-a-product-catalog-in-sharepoint-2013.aspx (英語) にすばらしい記事を掲載しているため、ここでは説明しません。このブログ エントリでは、その概要と使用例が非常にわかりやすく説明されているため、ぜひご覧ください。

この投稿は彼の功績を横取りするためのものではありません。私が行ったことを以下に示します。上記の投稿を読むと、現在のクエリに適用するユーザーのセグメンテーションを把握するにはカスタム Web パーツを記述する必要があると記載されており、そのパーツによってセグメンテーションが追加されることがわかります。そのブログでは、ブラウザーのプロパティに基づくユーザーのセグメンテーションの追加について説明しています。私は、現在のユーザーの部署に基づくユーザーのセグメンテーションを追加する Web パーツを記述することにしました。まだご存じない方のために説明すると、SharePoint 2013 では、Active Directory からプロファイルをインポートすると、一意の部署の値がすべて特別な用語ストアに自動的にインポートされます。そのため、現在のユーザーの部署に基づくカスタマイズを行うと非常に便利です。

ここで、"ユーザーの部署に基づいてコンテンツを提示するなら、対象ユーザーを使用すればよいのではないか" という疑問が生じるかもしれません。もっともな疑問ですが、そこには違いがあります。対象ユーザーの設定は単純なオン/オフの切り替えで、Web パーツを表示するかどうかを設定します。ユーザーのセグメンテーションでは、その情報をプロファイルなどから取得し、表示されるコンテンツをカスタマイズすることができます。クエリ ルールを使用しているため、ユーザーに対する 1 つ以上の追加のクエリを実行したり、昇格した結果を追加したり、さらにはクエリのランク付けを変更したりできます (たとえば、ユーザーの所属部署に基づいて、特定のコンテンツを検索結果の上位に表示する場合など)。これらは、SharePoint 2013 の検索で使用できる非常に便利な機能のほんの一部に過ぎません。

この機能の使用を支援するために、現在のユーザーの部署をユーザーのセグメンテーションに追加する Web パーツの Visual Studio プロジェクト全体 (コンパイル済みの Web パーツ アセンブリ、ソリューション、およびソース コード) を添付します。それをそのまま使用するか、ユーザーのセグメンテーションの管理用に Web パーツを改善したり独自の Web パーツを記述したりするための基礎として使用できます。先ほどリンクを示した投稿を読む際のユーザーのセグメンテーションとこの Web パーツの使用について強調したかった点が 2 つあります。

  • 作成したクエリ ルールは、既定で発行サイトのカタログに対してクエリを実行するように構成されます。このオプションのままにすると、検索結果は得られません。代わりに、すべてのソースに対してクエリを実行する [すべてのソース] オプションを選択します。その投稿に示されたクエリ ルールの構成の画像には、このように選択された状態が表示されていますが、その部分は明示されていません。これを機能させるには既定の動作を変更する必要があるため、ご注意ください。
  • その投稿では、別の Web パーツを使用して、ユーザーのセグメンテーションを使用する場合にスポットを当てるコンテンツの結果を表示する方法について説明しています。この場合 (その投稿で触れているように)、私の Web パーツは ContentBySearchWebPart を継承しているため、そのコントロールを使用して、ユーザーのセグメンテーションを設定することもスポットを当てるコンテンツを表示することもできます。その投稿の説明と少し異なるのは、Web パーツをページに追加するときに、その Web パーツの [設定] プロパティの値が 1 つ異なるという点だけです。[設定] で、[クエリ結果の提供元] プロパティを [この Web パーツ] に設定します。

これで準備完了です。検索におけるユーザーのセグメンテーションについて、皆さんにとって興味深いシナリオが見つかることを願っています。この Web パーツを記述していたときの私のシナリオでは、特別トレーニングの対象を "重役職" の部署に所属する従業員に設定していました。そのため、私の Web パーツが使用されているページにその従業員がアクセスすると、その従業員全員が受講する必要があるインサイダー取引に関する特別トレーニングを表す次のバナーとリンクが表示されます。

これはローカライズされたブログ投稿です。原文の記事は、「Using User Context (AKA Segmentation) in Search with SharePoint 2013」をご覧ください。