管理プロパティ (日付型) を使用したSharePoint 検索機能の動作変更について

こんにちは SharePoint サポートの森 健吾 (kenmori) です。

今回の投稿では、2015 年 2 月から 8 月にリリースされた更新プログラムで動作が変更された管理プロパティ (日付型) の検索結果に絞り込みについてご紹介させていただきます。

管理プロパティ (日付型) の絞り込み検索はシステム側の UTC (協定世界時) をベースにした絞り込みから、ユーザーのタイムゾーンをベースにした絞り込みに変更されました。コンテンツ検索 Web パーツなどで、{today} 変数を使用した検索を行っている場合は、更新プログラム適用後に異なるデータが出力される結果になるため、注意が必要になります。以下に詳細をご説明します。

目次
  導入 : 管理プロパティ (日付型) を使用した検索について
タイムゾーンについて
管理プロパティによる絞り込み検索におけるこれまでの動作変更について
クエリ変数 {today} について
  まとめ

導入 : 管理プロパティ (日付型) を使用した検索について

SharePoint では、検索ボックスやコンテンツ検索 Web パーツなどを使用し、管理プロパティを使用した絞り込みを加えた上での検索 (プロパティ検索) を実施できます。

例えば下記の使用例の通り、日付単位で検索結果を絞り込むことができます。

検索ボックスへの検索キーワード入力の使用例

コンテンツ検索 Web パーツ クエリ ビルダーの使用例

上記例のように LastModifiedTime (更新日時) が特定の日付 (例. 本日 {today}) といった検索キーワードを指定することで、検索コンテンツの日付での絞り込みに対応しています。(※時刻検索は対応していません。)

タイトル : キーワード クエリ言語 (KQL) 構文のリファレンス
アドレス : https://msdn.microsoft.com/ja-jp/library/office/ee558911.aspx#kql_property_restriction_queries
参考箇所 : KQL でのプロパティ制限クエリ

しかし、SharePoint はグローバル対応したアプリケーションです。以前よりサイトの表示上ではタイムゾーンを考慮した日付を表記しているのに対し、検索時には UTC をベースにした絞り込みが実施されており、表示と検索結果に相違が生じ、不自然であるというフィードバックを多数いただいておりました。

そこで、2015 年 2 月から 2015 年 8 月にかけて、何度か動作変更が施されました。結論としてはシステム側である UTC をベースにした絞り込みから、ユーザーのタイムゾーンを考慮にした絞り込みに変更されております。

本記事でご紹介している動作は、すでに SharePoint Online にも組み込まれております。

タイムゾーンについて

サイトにアクセスした際にタイムゾーンが決定される条件としては、下記の 2 点が考慮されます。

1. ユーザーごとのタイム ゾーンについて (優先)
2. サイトのタイム ゾーンについて

SharePoint の日付データは内部的に UTC で管理されており、ブラウザーで表示する画面においては、ユーザーまたはサイトが所属するタイムゾーンに応じて、内部で保持する UTC の日時を、タイムゾーンを考慮した時刻 (例. JST) に変換して表示する動作となります。

例)

2015/8/11 12:00 (DB UTC) => 2015/8/11 21:00 (UI JST)

1.    ユーザーごとのタイム ゾーンについて (優先)

個人ごとのプロファイルの編集画面において、サイトの管理者に指定されたタイムゾーン (既定) よりも、個人のタイムゾーン設定を優先させる設定を実施することができます。

その上で、指定したタイムゾーンの設定が、サイトにアクセスした際に適用されます。

2. サイトのタイム ゾーンについて

上記で “サイト管理者によって定義された地域設定を常に使用する” (既定) が選択されている場合は、[サイトの設定] – [地域の設定] で設定されている下記の設定値が表示上のタイムゾーンとして認識されます。

管理プロパティによる絞り込み検索におけるこれまでの動作変更について

検索における日付の絞り込み機能は、上記の通り 2015 年 2 月から 2015 年 7 月にかけて、何度か動作変更が施されています。

RTM からの動作

<日付と時刻>

更新日時が 2015/8/11 であるデータを検索する場合、現在表示されているタイムゾーン (例. JST) 上で 2015/8/11 であるデータ (赤破線枠) が抽出されると思われることでしょう。
しかし、実際は UTC が 2015/8/11 である黄色のハイライト部分が検索結果として表示されていました。

このため、8/11 のアイテムであるはずのアイテム 1, アイテム 2 は検索結果に表示されません。また、アイテム 6, アイテム 7 といった翌日のデータが結果に表示されます。

<日付のみ>

”日付のみ” を保持する列を定義し、その列で絞り込み検索することも多いと思います。

時刻を含めない場合には下記の通り、赤破線枠 (想定) と黄色のハイライト (実際の結果)の差が、より不自然となります。
日付データは時刻を持たなくても内部的には 0:00 を保持しています。そのため、UTC で判断した場合、前日の 15:00 と判断されます。この場合、8/11 を検索すると 8/12 のデータが取得され、全体的に 1 日ずれる結果となっていました。

このため、8/11 のアイテムであるはずのアイテム 1 は検索結果に表示されず、アイテム 6 が結果に表示されます。

2015 年 2 月 CU の動作

コンテンツ検索 Web パーツに限定して、上記の動作が改善されました。ただし、検索結果 Web パーツでは、初回表示以外では元の UTC での検索結果に戻るなど、完全には修正されていませんでした。

<日付と時刻>

<日付のみ>

2015 年 7 月 CU の動作

上述の検索結果 Web パーツの問題も修正されました。

注意

上記の動作変更により、1 日ずれることを想定して、コンテンツ検索 Web パーツなどで、 {today-1} のように 1 日差し引いて検索を実施している場合、修正プログラム適用後に異なるデータが出力される結果になりますため、ご注意ください。

クエリ変数 {today} について

コンテンツ検索 Web パーツなどで、現在の日付または数日前のコンテンツを取得したい場合も多いと思われます。この際に多く使用されるのが、クエリ変数 {today} です。

タイトル : SharePoint 2013 でクエリの変換と注文の結果を計画する
アドレス : https://technet.microsoft.com/ja-jp/library/JJ219620.aspx

RTM からの動作

この {today} は UTC で現在日時を取得しています。そのため、一日のうちの時間帯によって {today} が昨日 (0:00 から 8:59 まで) になったり、当日 (9:00 から 23:59 まで) になったりする制限があります。

そのため、同じ検索 Web パーツ上で時間帯によって検索処理に渡される日付が異なるということになり、取得するデータも異なってしまいます。

2015 年 8 月 CU からの動作

この不確定要素に対応するため、 {todaylocal} というクエリ変数が追加されました。
{todaylocal} は、ユーザーのタイムゾーンに合わせて本日の日付を返すクエリ変数となります。

そのため、使用しているユーザーの感覚どおりの日付が検索処理に渡されます。

まとめ

検索の日付の絞り込みがタイムゾーンを考慮する形式となりました。また、 {todaylocal} クエリ変数が追加されました。より強化された検索機能で、様々なソリューションを実現していただけますと幸いです。