ここ最近、検索カスタマイズの仕事をしていました。
コンテンツ Web パーツの 表示テンプレートは、今までにある程度、触っていましたが、今回、検索に関する表示テンプレートを初めて、本格的に取り組みました。
今回は、表示テンプレートについてではなく、検索リクエストについてのお話です。
検索結果ページを編集すると分かりますが、検索結果の一覧は、「検索結果」Web パーツによって表示されます。
ひと検索の場合は、「ひとの検索の主要結果」Web パーツですね。
この 2つの Web パーツの実体は同じで、ResultScriptWebPart で構成されています。
・ResultScriptWebPart class
http://msdn.microsoft.com/en-us/library/microsoft.office.server.search.webcontrols.resultscriptwebpart(v=office.15).aspx
実際には、Web パーツの設定で、クエリの選択 (検索先) などで、異なる設定が埋め込まれていて、それによって動作の違いが生まれています。
さて、今回は、ひとの検索のカスタマイズを手掛けていたのですが、検索リクエストや検索結果を確認する時に、有用なツールと言えば SharePoint 2013 Search Query Tool ですね。
いつの間にか、バージョンが 2.2 になっていました・・・
・SharePoint 2013 Search Query Tool
https://sp2013searchtool.codeplex.com/

このツールは、SharePoint 2013 で提供されている検索 REST API を利用しているので、リモートからリクエスト出来るので、オンプレミスでも SharePoint Online でも使えるという点でとても良いツールです。
・SharePoint 検索 REST API の概要
http://msdn.microsoft.com/ja-jp/library/office/jj163876(v=office.15).aspx
前職時代に関わった案件でも、開発段階からトラブルシューティングまで、かなりお世話になったものです。
唯一の難点?を挙げるとしたら、お客様環境などで、勝手にダウンロードして実行出来ないようなシチュエーションでは利用出来ないことです。
まぁそんな時はブラウザ上で、直接、検索 REST API をリクエストすれば良いので、致命的に困ることは無いです。
普通に、以下のような URL に対して、検索キーワード等のパラメータを指定するだけです。
http://<サーバー名>/_api/search/query

そんなこんなで、いろいろとカスタマイズを実装していると、今まで、全く意識していなかったのですが、ひとの検索では、通常の文書の検索と違って、微妙にパラメータが異なることに気が付きました。
既定の「ローカル SharePoint の結果」検索先にはユーザープロファイルは含まれていないので、検索先が異なるのは当たり前なのですが、検索結果の内容に影響がある設定としては、ひとのあいまい検索、および、重複の削除でしょうか。
通常の文書検索では、ひとのあいまい検索は無効で、重複の削除は有効になっています。
そして、検索 REST API での既定の設定はこの文書検索と同じになっているようです。
実際にひとの検索の検証やテストしていて、検索結果ページでの結果と検索 REST API での結果に相違があって、どうにもこうにも悩んでいた所、気が付いた訳です。
ところで、「検索結果」Web パーツの設定は、Web パーツの編集での、Web パーツの設定だけだと思っていますか?



いやいや、検索での重要なパラメータは、Web パーツ定義ファイルの DataProviderJSON というプロパティの中に隠れています。
検索結果」Web パーツと「ひとの検索の主要結果」Web パーツでの違いについては、こちらの通りです。

この中で、EnablePhonetic と EnableNicknames がひとのあいまい検索の設定で、TrimDuplicates が重複の削除の設定です。
ちなみに、重複の削除については、2014年7月 CU の適用により、「クエリの変更」から「設定」タブの中で UI 上で設定変更可能になっているようです。
例えば、ひとのあいまい検索を無効化するには、Web パーツをエクスポートして、Web パーツ定義ファイルの該当箇所を修正した上で、Web パーツのアップロードによりインポートすることで、変更を反映することが出来ます。
なお、この時に操作方法によっては、「絞り込み」Web パーツと「検索ボックス」Web パーツの設定で、「検索結果」Web パーツとの関連付けが失われることがあるので、その場合には、再設定が必要になります。
この他に、興味深い設定として、FallbackLanguage というのがあります。
こちらは、既定では -1 になっていて、ブラウザの言語の優先順位に従って自動的に言語が選択される形になりますが、明示的に ロケール ID を設定すると、指定した言語を固定して検索させることが出来ます。
ということで、小話と言いつつ、少々書き過ぎたような気がしますが、しばらく、検索小話は続く予定です。
Kokuho Hi (Sonorite / SharePoint Technology Center)