メタデータ ナビゲーションとフィルター処理
最終更新日: 2010年4月19日
適用対象: SharePoint Server 2010
この記事の内容
メタデータ ナビゲーションとフィルター処理
ヒント
メタデータ ナビゲーションとフィルター処理のプログラミング
メタデータ ナビゲーションとフィルター処理には、Microsoft SharePoint Server 2010 リスト ビューをそのアイテム メタデータでフィルター処理する方法が用意されています。リスト所有者は、この機能を使用して、リストのフィールドをキー ナビゲーション フィールドとして昇格し、そのリストを表示するユーザーに、現在のリスト ビューをフィルター処理してフィールドに目的の値があるアイテムを表示できるフィルター処理ユーザー インターフェイス (UI) を表示できます。メタデータ ナビゲーションとフィルター処理は、リスト レベルのインデックスと連動して、数千万個のアイテムを含んでいる非常に大きいリストでも、シームレスな参照をサポートします。この機能は、アイテムが複数のフィールドに対して適切にタグ付けられている場合は、タグ付けられていないリスト ビューのアイテムよりも本質的に発見しやすくすることによって、メタデータとタグ付けの使用を促進します。
メタデータ ナビゲーションとフィルター処理
メタデータ ナビゲーションとフィルター処理には、次のものが含まれています。
リスト アイテムのメタデータに基づいてリスト ビューを参照し、フィルター処理するための新しい UI
リストでナビゲーション フィールドとして昇格されているフィールドに応じて、リスト インデックスを自動的に作成するプロセス
可能な場合は、リスト ビューの調整を回避するために実行されているクエリに最適なインデックスを作成するプロセス
新しいユーザー インターフェイス
新しいユーザー インターフェイスには、ナビゲーション階層とキー フィルターがあります。
ナビゲーション階層は、ユーザーが親のリストを表示したときにツリー ビューに表示されるフィールドです。このフィールドの値は、フォルダー構造と同様に参照でき、クリックして、対応する値と一致するドキュメントを表示できます。優れたフォルダー構造と同様、優れたナビゲーション階層のフィールドでは、コンテンツを管理しやすいチャンクに分割します。
キー フィルターは、ツリー レベルの下に表示されるフィールドです。キー フィルターは、現在のビューのコンテンツを絞り込むのに使用できる補助フィルターです。
自動インデックス作成
リストの [メタデータ ナビゲーションの設定] ページでは、現在選択しているナビゲーション階層フィールドとキー フィルター フィールドに一致するようにリストにインデックスを自動的に作成するかどうかも指定できます。この設定が有効な場合 (リストで既定の状態のままの場合)、[メタデータ ナビゲーションの設定] ページを保存すると、次の処理が実行されます。
単一列インデックスが、すべてのサポートされているキー フィルター フィールドに対して作成されます。ただし、Content Type フィールドと Choice フィールドを除きます。
ナビゲーション階層とキー フィルターのサポートされているすべての組み合わせに対して、複合インデックスが作成されます。
ほとんどのシナリオでは、現在選択しているナビゲーション階層フィールドとキー フィルター フィールドの設定に一致するようにリストにインデックスを自動的に作成するかどうかを指定する設定をそのままにすることをお勧めします。リストにインデックスが作成されていない場合、そのリストに対するすべてのクエリにインデックスが作成されません。大きいリスト、つまり、サイトのリスト ビュー クエリのしきい値に定義されている数量を超えるアイテムを含んでいるリストに対するインデックスのないクエリは、Microsoft SharePoint Server 2010 でサポートされていません。一部の高度なシナリオでは、この設定をオフにして、インデックスを手動で構成することが適切な場合があります。次の点に注意する必要があります。
SharePoint Server 2010 では、1 つのリストにつき最大 20 個のインデックスをサポートしています。メタデータ ナビゲーションとフィルター処理では、選択されたナビゲーション階層フィールドとキー フィルター フィールドの有効なすべての組み合わせについて、この 20 個のインデックスの領域に十分な空きがない場合は、インデックスを作成できません。
大きいリストで新しいインデックスを作成することは、禁止されています。ただし、ファーム管理者と、サービス時間帯の範囲内で作業している場合を除きます。
インデックスの種類とサポートされているフィールド
表 1 では、メタデータ ナビゲーションに参加できるフィールドの種類と参加できる容量を示します。
表 1. メタデータ ナビゲーションに参加できるフィールドの種類
フィールドの種類 |
ナビゲーション階層としてサポートされている |
キー フィルターとしてサポートされている |
単一列インデックスをサポートしている |
複合インデックスをサポートしている |
---|---|---|---|---|
Content Type |
はい |
はい |
はい |
はい |
Choice (単一値) |
はい |
はい |
はい |
いいえ |
Managed Metadata (単一値) |
はい |
はい |
はい |
はい |
Managed Metadata (複数値) |
はい |
はい |
はい* |
いいえ |
Person or Group (単一値) |
いいえ |
はい |
はい |
はい |
Person or Group (複数値) |
いいえ |
はい |
いいえ |
いいえ |
Date and Time |
いいえ |
はい |
はい |
はい |
Number |
いいえ |
はい |
はい |
はい |
注意
*複数値のルックアップ フィールドでは、そのフィールドのデータベースでの格納方法に応じて自動的にインデックスが作成されるので、20 個のインデックス制限には影響しません。ただし、このフィールドは複合インデックスに参加できません。
インデックス付きクエリ
メタデータ ナビゲーションとフィルター処理では、リスト ビューが読み込まれるたびに最も役に立つインデックスを可能な限り配置しようとします。ユーザーがリスト ビューを読み込むたびに、または新しいフィルターの適用、フィルターのクリア、フィールドでの並べ替えの適用によってリスト ビューを更新するたびに、バックグラウンドでは要求を調査し、大きいリストの調整を回避しながらデータベースでクエリを実行する方法を決定するいくつかのロジックが実行されます。これは、必ずしも簡単ではありません。クエリの実行方法が複数存在し、各方法によって結果が異なる可能性があります。このプロセスは次のようになります。
ユーザーがリスト ビュー ページに移動するか、リスト ビューを更新すると、ページでは、リスト ビュー Web パーツに表示されているアイテムを取得するためにリストに対して Collaborative Application Markup Language (CAML) クエリが実行されます。このクエリは、ナビゲーション階層で選択された値に基づく 1 つ以上のフィルター、1 つ以上のキー フィルター選択、ビュー定義に指定されている 1 つ以上のフィルター、またはリスト ビュー Web パーツの列フィルターで指定されている 1 つ以上のフィルターを含んでいる可能性があります。現在のリストが大きい場合、この CAML クエリは、SPThrottledQueryException をスローする場合があります。この例外は、クエリで適切に選別できないことを意味します。つまり、クエリは、管理者によって定義されたリスト ビュー クエリのしきい値を超えるデータベースのアイテムを調査します。この例外が発生した場合、手順 2. 以降の手順が実行されます。
メタデータ ナビゲーションは、CAML クエリの各フィルター操作 (または句) を調査し、そのフィルター操作を満たすために使用される可能性があるリスト上に作成された対応するインデックスを持つものを決定します。たとえば、ModifiedBy 列にインデックスがあり、現在のリスト ビューが [更新者] 列に対してフィルター処理する場合、そのインデックスはクエリによって使用される可能性があります。
これらの有効なインデックスとフィルターの組み合わせごとに、メタデータ ナビゲーションは、現在の CAML クエリを書き換えて、そのインデックスが使用されるようにします。
メタデータ ナビゲーションとフィルター処理は、インデックス付きのクエリを、SPThrottledQueryException が生成されないクエリが見つかるまで実行します。すべてのクエリでこの例外が発生した場合は、フォールバック クエリを作成して実行します。
注意
メタデータ ナビゲーションとフィルター処理は、SharePoint Server 2010 で作成されたほとんどのサイトで既定で有効です。このプロセスは、機能が実際に構成されているかどうかに関係なく、これらのサイトの各リストで実行されます。
フォールバック クエリ
メタデータ ナビゲーションとフィルター処理では、適切に選別できる、インデックス付きクエリとして現在のユーザー要求を表すことができないと判断した場合、フォールバック クエリを作成して実行します。フォールバック クエリは、元のユーザー クエリの修正版で、リスト全体ではなく、リストの一部に対してのみクエリを実行します。フォールバック クエリの目的は、大きいリストの調整が原因で元のクエリを実行できない場合でも、役に立つ一部の結果セットをユーザーに示すことです。また、フォールバック クエリは、リストのデータの分布がゆがんでいること、ユーザーが実行しているクエリは、結果の完全なセットを返すことができない、つまり、ユーザーが必要とするコンテンツにアクセスできない可能性があることをリスト所有者に通知する警告として機能します。フォールバック クエリは、そのクエリによってスキャンしたリストの一部に、元のユーザー クエリに一致する結果を含んでいるアイテムがない場合は、0 という結果を返すことがあります。
フォールバック クエリの結果は、ユーザーが要求しているアイテムの一部だけなので、一部の結果セットだけが表示されていること、および追加のフィルターを適用して完全なセットを取得する必要があることが画面上のメッセージによってユーザーに通知されます。ユーザーが追加のフィルターを指定するたびに、SPThrottledQueryException を生成せずに、適切に選別できるフィルターとインデックスの組み合わせを見つける機会をクエリ エンジンに提供できます。フォールバック クエリには 2 種類あり、それは、推奨する順にインデックス付きフォールバック クエリと簡易フォールバック クエリです。
**インデックス付きフォールバック クエリ。**この種類のフォールバック クエリは、リスト上の 1 つのインデックスに対して動作し、そのインデックスでフィルター処理された値に一致する、N 個の最近作成されたアイテムを調査します。インデックス付きフォールバック クエリのセマンティクスを使用するには、ユーザーのクエリには、インデックス付き列に対するフィルターが必要で、フィルターとインデックスの組み合わせは、いくつかの追加の制約を満たす必要があります。表 2 に示すフィルターとインデックスの組み合わせだけが、インデックス付きフォールバック クエリに参加できます。
表 2. フォールバック クエリで許可されるフィルターとインデックスの組み合わせ
インデックスの種類
インデックスのフォールバックをサポートするクエリ
Content Type
1 つの値
Choice 単一値
1 つの値
Managed Metadata 単一値
1 つの値
多くの値
Managed Metadata 複数値
1 つの値
多くの値
Person or Group 単一値
1 つの値
Date and Time
1 つの値
一定範囲の値
Number
1 つの値
一定範囲の値
Managed Metadata 単一値、Date and Time との複合インデックス
Managed Metadata 列での 1 つの値
Date and Time 列での 1 つの値あるいは一定範囲の値
Managed Metadata 単一値、Number との複合インデックス
Managed Metadata 列での 1 つの値
Number 列での 1 つの値あるいは一定範囲の値
Managed Metadata 単一値、Content Type との複合インデックス
Managed Metadata 列での 1 つの値
Content Type 列での 1 つの値
Managed Metadata 単一値、Person or Group との複合インデックス
Managed Metadata 列での 1 つの値
Person or Group 列での 1 つの値
Content Type、Date and Time との複合インデックス
Content Type 列での 1 つの値
Date and Time 列での 1 つの値あるいは一定範囲の値
Content Type、Number との複合インデックス
Content Type 列での 1 つの値
Number 列での 1 つの値あるいは一定範囲の値
Content Type、Person or Group との複合インデックス
Content Type 列での 1 つの値
Person or Group 列での 1 つの値
注意
表 2 の "1 つの値" は、10 など、CAML で句を使用して表現できるフィルターを意味します。"多くの値" は、1011 など、CAML で句を使用して表現できるフィルターを意味します。"一定範囲の値" は、2010-02-04T08:00:00Z など、CAML で句を使用して表現できるフィルターを意味します。
一部のインデックス付きの組み合わせでは、クエリの形式が指定の形式でない場合、インデックス付きフォールバック クエリを実行できません。たとえば、複合インデックスが単一値の分類フィールドと日付フィールドに存在し、ユーザーのクエリが、CAML 句で分類フィールドからの複数の値を使用している場合、インデックス付きクエリではなく簡易フォールバック クエリが実行されます。
**簡易フォールバック クエリ。**インデックス付きフォールバックをサポートしているインデックス付きフィルター句のないクエリは、簡易フォールバック クエリを実行する必要があります。簡易フォールバック クエリは、リスト内で最近作成された上位 N 個のアイテムに対して動作します。この N 個のアイテムに、ユーザー クエリのクエリ パラメーターに一致するアイテムがない場合は、返される結果がありません。
注意
インデックス付きフォールバック クエリと簡易フォールバック クエリの両方で、"N" は、(リスト ビュー クエリのしきい値 * .20) です。リスト ビュー クエリのしきい値は管理者が構成できますが、.20 乗数は変更できません。
ヒント
メタデータ ナビゲーションは、管理されたメタデータ フィールドと組み合わせて使用するのが最適です。管理されたメタデータ フィールドには、信頼性、階層構造、および採用しやすさが備わっているので、効果的にリストのコンテンツを管理しやすいチャンクに分割できます。
リスト ビュー ページで開発者ダッシュボードとメタデータ ナビゲーションを一緒に使用して、ユーザー クエリの代わりに実行されたインデックス付きクエリとフォールバック クエリの背後にある CAML と SQL を確認できます。
管理者は、リスト内のデータがインデックスとフィールド値に対して適切に分布しておらず、リストのユーザーが必要とするドキュメントにアクセスできるようにデータの再分布が必要であることを示す警告として、フォールバック クエリを使用できます。詳細ログが有効な場合、フォールバック クエリが実行されるたびに ULS ログ エントリが書き込まれます。正常性ルールを開発して、これらのログ エントリを途中で取得し、対処することができるようにフォールバック クエリが実行されていることを示す警告を管理者に表示できます。
メタデータ ナビゲーションとフィルター処理のプログラミング
メタデータ ナビゲーションとフィルター処理のオブジェクト モデルは、主に Microsoft.Office.DocumentManagement.MetadataNavigation 名前空間にあります。このモデルには、次の型があります。
表 3. メタデータ ナビゲーションとフィルター処理のプログラミング モデル
型 |
説明 |
---|---|
メタデータ ナビゲーション コントロールと HTTP 要求中のリスト ビュー Web パーツの状態を追跡します。 |
|
MetadataNavigationItem オブジェクトの階層を示します。 |
|
MetadataNavigationHierarchy オブジェクトに関連付けられている SPItem オブジェクトを表します。 |
|
メタデータ ナビゲーションを有効で実現可能なサブセットにフィルター処理するために使用されるキー フィルターを表します。 |
|
SPList オブジェクトでの MetadataNavigationItem オブジェクトのどの設定が、リスト ビューでのメタデータ階層とフィルターの表示を管理するか設定します。 |