管理されたメタデータ フィールド値に対してクエリを実行する

最終更新日: 2010年4月15日

適用対象: SharePoint Server 2010

この記事の内容
CAML クエリ
検索クエリ

Microsoft SharePoint Server 2010 では、管理メタデータ列内の値でタグ付けされたアイテムを表す結果を返すことを目的とするクエリを構築する場合は注意が必要です。SharePoint Server 2010 では、Collaborative Application Markup Language (CAML) クエリを記述するか API (SPQuery オブジェクトなど) を使用してアイテムを特定のリストから取得するか、または API (Query など) を使用して検索クエリを実行するかに関係なく、範囲設定されたメタデータ値または範囲設定されていないメタデータ値を TermStore データベースから返すことができます。

CAML クエリ

管理メタデータ列内の特定の値でタグ付けされた SPList オブジェクトからアイテムを返す Collaborative Application Markup Language (CAML) クエリを記述する場合、照合する用語の参照 ID を指定する必要があります。参照 ID はサイト コレクションに固有です。指定された用語には、その用語が使用されるサイト コレクションごとに異なる参照 ID があります。用語の参照 ID を取得するには、GetWssIdsOfKeywordTerm() メソッドを使用できます。また、用語がキーワードの場合 (用語の IsKeyword プロパティが true に指定されている場合) は、GetWssIdsOfKeywordTerm() メソッドを使用できます。場合によっては、同じサイトコレクションで、1 つの用語に複数の参照 ID が存在することがあります。たとえば、結合された用語には、サイト コレクションで使用されていた各用語につき 1 つの参照 ID がありますが、その後、その用語が結合されて 1 つの用語になります。用語の参照 ID を確認した後に、Collaborative Application Markup Language (CAML) クエリの IN 句で ID を結合し、その用語でタグ付けされたアイテムを照会できます。以下のコードは、フィールド ItemType に参照 ID 14 と参照 ID 15 を持つ、リスト内のアイテムを照会する Collaborative Application Markup Language (CAML) クエリです。

<Query><Where><In><FieldRef LookupId="TRUE" Name="ItemType" /><Values><Value Type="Integer">14</Value><Value Type="Integer">15</Value></Where></Query>

複数の用語の参照 ID を含むクエリを構築できます。一般的な作業として、指定された用語またはその子孫のどちらかの用語でタグ付けされたアイテムを取得するクエリが構築されます。true を TaxonomyField.GetWssIdsOfKeywordTerm の bool includeDescendants パラメーターに渡すことで、指定した GUID を持つ用語の参照 ID、およびそのすべての子用語の ID を取得できます。

検索クエリ

検索では、管理メタデータ フィールドに対応するインデックス付きプロパティが自動的に作成されます。これにより、特定の管理メタデータ値でタグ付けされたアイテムのクエリ検索が容易になります。詳細については、表 1 を参照してください。

表 1. 検索クエリ プロパティ

Property

説明

ows_tax_idFieldName

クロールされた各アイテムについて、FieldName フィールド内の用語の ID にインデックスを付けます。これは管理プロパティ owsTaxIdFieldName にマップされます。これにより、そのフィールド内で、指定された用語 ID を持つ用語でタグ付けされたクロールされたアイテムを照会できます。

ows_FieldName

クロールされたアイテムについて、FieldName フィールド内の用語のラベルにインデックスを付けます。ここでは、アイテムのタグ付けに使用された用語のラベルのみが含まれます。代替ラベルにインデックスは付けられません。

ows_taxid_MetadataAllTagsInfo

クロールされたアイテムについて、すべての用語の ID に、そのすべてのメタデータ フィールドにわたってインデックスを付けます。このプロパティは管理プロパティ owsTaxIdMetadataAllTagsInfo にマップされます。これにより、任意のフィールド内で、指定された用語 ID を持つ用語でタグ付けされたクロールされたアイテムを照会できます。

owsMetadataFacetInfo

この取得可能なプロパティは、すべてのメタデータ フィールドにわたって、アイテム上のすべての用語に関する情報を含むデータ構造を維持します。このデータ構造の形式を次に示します。ColmunInternalName|ColumnDisplayName|CompressedGuid(StoreId)|CompressedGuid(TermSetId)|CompressedGuid(TermId)|CurrentLabel;#

表 2 に掲載された例は、キーワード turtle を含み、さらに特定のフィールド/値の組合せでタグ付けされたアイテムを検索する検索クエリ文字列を示しています。

表 2. 検索クエリ文字列の例

クエリ文字列

メモ

フィールド ItemType 内に 1 つの用語 "参照資料" のみ

http://contoso/searchcenter/pages/results.aspx?k=turtle&r="owstaxIdItemType"=#052263385-1fc3-4323-8d6b-50c8f6c3c45d:"参照資料"

クエリ文字列内の用語 ID の前にある #0 は、指定された用語 ID のみに対するクエリであることを意味します。

フィールド ItemType 内に用語 "参照資料" またはその子孫のどちらか

http://contoso/searchcenter/pages/results.aspx?k= turtle &r="owstaxIdItemType"=#52263385-1fc3-4323-8d6b-50c8f6c3c45d:"参照資料"

用語 ID の前の # は、指定された用語 ID またはその用語のどちらかの子用語の ID を照会することを意味します。

用語のすべてのフィールドにわたって 1 つの用語

http://contoso/searchcenter/pages/results.aspx?k= turtle &r=owstaxIdMetadataAllTagsInfo=#052263385-1fc3-4323-8d6b-50c8f6c3c45d:"参照資料"

次のコード例は、メタデータ フィールド値での照会方法を示しています。

using System;
using System.IO;
using System.Globalization;
using Microsoft.SharePoint;
using Microsoft.SharePoint.Taxonomy;

namespace Microsoft.SDK.SharePointServer.Samples
{
// We are trying to get all the Wss IDs of this term when used as a keyword.
            int[] wssIds = TaxonomyField.GetWssIdsOfKeywordTerm(site, term.Id, 500);
            Console.Write("The wss ID's of your term are");
            if (wssIds.Length == 0)
            {
                Console.Write(" empty");
            }
            else
            {
                foreach (int wssId in wssIds)
                {
                    Console.WriteLine(" " + wssId.ToString());
                }
            }

            Console.WriteLine(".");
        }

        /// <summary>
        /// This method writes to the console the Wss ID values of the managed metadata term
        /// on the specified SPSite.
        /// </summary>
        private void TestGetWssIdsOfTerm(SPSite site, Term term)
        {
            if (term == null)
            {
                throw new ArgumentException("Parameter term cannot be null");
            }
            if (site == null)
            {
                throw new ArgumentException("Parameter site cannot be null");
            }

            // We are trying to get all the Wss IDs of this term without its children.
            int[] wssIds = TaxonomyField.GetWssIdsOfTerm(site, term.TermStore.Id, term.TermSet.Id, term.Id, false /*includeDescendants*/, 500);
            Console.Write("The wss ID's of your term are");
            if (wssIds.Length == 0)
            {
                Console.Write(" empty");
            }
            else
            {
                foreach (int wssId in wssIds)
                {
                    Console.Write(" " + wssId.ToString());
                }
            }

            Console.WriteLine(".");
        }
    }
}

関連項目

概念

メタデータを管理する

メタデータおよび分類プログラミング モデル