SharePoint 2013 でクエリ ルールを使用してコンテキスト検索で人のメタデータを統合する

原文の記事の投稿日: 2012 年 8 月 20 日 (月曜日)

なにか長くてかっこ悪いタイトルになってしまったことを認めます。ここで私が言いたかったことは、次のように表現できます。数日前のことです。私の頭には 1 つの問題が飛び交っていました。その問題とは、次のようなものです。私には組織の中の別の部門、たとえば、営業部門、財務部門で働いている同僚がいます。誰かが "sales management pitch" のようなものを検索するためのクエリを入力した場合、私は営業 (Sales) 部で働いている人も表示できるようにしたいと考えました。これは、SharePoint 2013 の新しいクエリ ルール機能の使用方法として、非常に便利なものになりそうです。

まず、一歩引いて、この記事で使用する、関連する実現機能を見てみます。SharePoint 2013 では、Active Directory からプロファイルをインポートすると、[Managed Metadata Service] (Managed Metadata Service) 内に特別な用語セットが自動的に設定されます。実際に、[人] (People) と呼ばれるマスター グループが作成され、[部署] (Deparment)、[役職] (Job Title)、[場所] (Location) の 3 つの用語セットのデータが生成されます (メモ: 製品が提供されるときにこの 3 つすべてが存在していることは保証できません。3 つのうちの 2 つだけになる可能性があります)。プロファイルのインポート処理が実行されるときに、これらの各プロパティごとに、すべてのユーザーの間で一意の値が各用語セットのデータに挿入されます。これは、この問題の対処にとても役立ちます。私の MMS の部署リストの中に [営業] (Sales) が含まれているためです。これが含まれているのは、私には、AD の部署属性の値が [営業] (Sales) となっているユーザーがいるためです。

素晴らしい。次に進んで、クエリルールを作成しましょう。クエリ ルールに関する私の最初の投稿 (https://blogs.msdn.com/b/sharepoint_jp/archive/2012/09/20/sharepoint-2013-using-query-rules.aspx) で説明したとおり、まず、ルールを起動するときの条件を設定します。このケースでは、[詳細なクエリ テキスト照合] (Advanced Query Text Match) オプションを使用し、最後のオプションの [クエリには、この辞書内のエントリが 1 つ含まれています:] (Query contains an entry in this dictionary:) を選択します。ここで、ドロップ ダウン セレクターが表示されます。少し残念ですが、これは少し誤解を招きます。ここで本当にやりたいことは、そのすぐ下にある [分類法からインポート] (Import from taxonomy) リンクをクリックすることです。これをクリックすると、標準の MMS ピッカーが表示されます。そこで、私のローカルの MMS インスタンスを展開し、[部署] (Department) 用語セットをクリックします。クエリ テキストに私の組織内の部署を示す単語が含まれている場合にルールを起動するためです。

ルールの次の部分では、クエリ用語を確認するための 3 つすべてのチェックボックスをオンにします。つまり、クエリ全体が部署名に等しい場合、またはクエリが部署名で始まるか終わる場合に、ルールを起動します。最後に、ルール構成の最後の部分を設定します。一致がある場合は、一致を {subjectTerms} に割り当てて、残りの用語を {actionTerms} に割り当てます。ここで、上の "sales management pitch" の検索例を使って考えてみます。クエリ用語が、MMS の有効な部署の値である "sales" で始まるので、私のクエリ ルールは一致します。したがって、"sales" が {subjectTerms} に割り当てられ、"management pitch" が {actionTerms} に割り当てられます。この構成は次のようになります。

ここで、ルールが起動されたときに営業部の何人かの同僚をクエリ結果の上位に追加しようと思います。したがって、クエリ ルールの次の部分、つまり実行するアクションを設定します。[結果のブロックを追加] (Add Result Block) リンクをクリックし、そのダイアログを開きます。このケースでは、人の結果を表示する結果ブロックを追加するので、まず、[このソースを検索] (Search this Source) ドロップ ダウンをクリックし、検索ソースを [クエリの元のソース] (Query’s orginal source) から [ローカルのひとの結果 (システム)] (Local People Results (System)) に変更します。この設定を最初に行ったことで、クエリ ビルダーは、私がクエリを変更またはテストするときにこのソースを使用します。これが終了すると、私の一致ルールに基づいて、見つかった部署は特殊用語の "{subjectTerms}" に確かに入れられます。これを使用するために、[クエリビルダーを起動します] (Launch Query Builder) ボタンをクリックして、クエリを変更します。クエリ テキスト編集領域に既に入っているすべてのテキストを削除し、[プロパティ フィルター] (Property filter) ドロップ ダウンをクリックして、[--すべての管理プロパティを表示--] (--Show All Managed Properties—) オプションを選択します。これにより、ドロップ ダウンがすべての管理プロパティで再設定されるので、このリストから [部署] (Department) を選択します。修飾子ドロップ ダウンで、修飾子を [次を含む] (Contains) から [=] (Equals) に変更します。次に、値の選択ドロップ ダウンで、[{subjectTerms} – 部署からの一致する辞書エントリ] ({subjectTerms} – the matched dictionary entry from Department) を選択し、[プロパティ フィルターの追加] (Add property filter) ボタンをクリックします。この構成は次のようになります。

上手くできあがってきました。ここで、個人的な調整を加えたいと思います。そのためには、クエリ ビルダーの [並べ替え] (Sorting) タブをクリックします。このケースでは、単に既定の並べ替えモデルを使用することはしません。社会的距離によって並べ替えられた人を表示するためです。つまり、人を結果に表示するだけでなく、私との社会的距離に基づいてその距離が最も近い人から表示します。このため、以下の図のように、[ランク付けモデル] (Ranking Model) ドロップ ダウンを使用して、[ひとの検索の社会的距離モデル] (People Search Social Distance Model) を選択します。

これで、[テスト] (Test) タブをクリックし、新しいクエリを試すことができます。既定では、0 件の結果が表示されます。これは、{subjectTerms} 変数の値がないからです。実際のクエリ条件でテストするには、[詳細表示] (Show More) リンクをクリックし、[{subjectTerms}*:] 編集ボックスに「sales」と入力し、[クエリのテスト] (Test query) ボタンをクリックします。私はこれを別のランク付けモデルでテストし、すべてが望みどおりに動作することを確認したところ、結果は望みどおりでした。[OK] ボタンを押してクエリの変更内容を保存します。

ここで、クエリ ルールに最後の変更を加えます。それは、私のブロックの最下部にリンクを表示することです。クリックすると、見つかった部署で働くすべての人を検索できるリンクです。これに関する詳細を説明する前に、全面開示の観点から言っておくべきことがあります。最終結果を示す画像がありますが、これには、[詳細表示] (SHOW MORE) リンクが表示されています。この特定の投稿に掲載するために、私は実際には 2 つの画像を結合しました。1 つの画像には [詳細表示] (SHOW MORE) リンクがあり、もう 1 つには [詳細表示] (SHOW MORE) リンクがありませんでした。この理由は、ベータ 2 では、[詳細表示] (SHOW MORE) リンク機能の動作に一貫性がないためです。すべての欠陥が RTM によって解決される必要がありますが、現在のところ、このリンクは時々表示されるだけであり、表示されないことのほうが多い状態です。私は、たまたま、作業していた初期の結果セットのスクリーンショットを取っていました。これにはリンクが含まれます。この欠陥について私がここで述べるのは、皆様がベータ 2 で作業するときにリンクが表示されたりされなかったりした場合に、過度に苛立たないようにするためです。

とはいえ、前の段落で説明したこの機能を実装するために、[[詳細] リンクを選択すると、次の URL に移動します] ("More" link goes to the following URL) オプションを選択し、「peopleresults.aspx?k=Department:{subjectTerms}」と入力しました。また、3 つの一致を表示するようにして、前に説明したとおり、それらをすべての検索結果の最上部に表示するようにしました。完成した [結果のブロック] (Result Block) ダイアログは次のようになります。

これですべてが完了したのでテストに移ることができます。「sales management pitch」のクエリを実行した結果は、次のようになります。

この画像には [詳細表示] (SHOW MORE) リンクが表示されていますが、この時点で貼り付けなければならなかったものです。しかし、素晴らしいことに、Rocky が検索結果の一番上に表示されています。組織の中で私が彼のマネージャーとなっているためです。つまり、社会的距離のランク付けアルゴリズムが正常に機能していることがわかります。結果に表示された人の上にマウスを置くと、その人が最近公開したドキュメントの一覧が表示されます。

最後に、[詳細表示] (SHOW MORE) リンクをクリックすると、人の検索の結果ページが表示されます。そこでは、営業 (Sales) 部で働くすべての人が表示されます。そのいずれかの人の上にマウスを置くと、その人の業績、プロファイル ページなどを確認できます。

これで今回の演習は終了です。私たちは、非常に現実的な顧客の要件を受け止めました。そして、私たちは、SharePoint 2013 の新しいクエリ ルールとプロファイル インポート機能を使用して、コーディングをまったく必要とせずに "多くの" 機能を提供するソリューションを作成しました。皆様が引き続きクエリ ルールに注目し、クエリ ルールを使っていただけることを願っております。

これはローカライズされたブログ投稿です。原文の記事は、「Integrating People Metadata In Content Searches Using Query Rules in SharePoint 2013」をご覧ください。