適用対象:SQL Server
Azure SQL データベース
Azure SQL Managed Instance
サポートされているドキュメント型について、varbinary(max)(FILESTREAM を含む)または image のバイナリ データ列内の Author や Title などの特定のプロパティに対するプロパティ スコープ検索をサポートするように、全文インデックスを構成できます。 この構成がない場合、全文クエリは文書全体に対して汎用的な検索を行い、プロパティ内容と本文内容を区別しません。 この物件範囲を限定した捜索は 「物件検索」と呼ばれます。
特定の種類のドキュメントでプロパティ検索が可能かどうかは、対応する フィルター (IFilter) によって異なります。 ドキュメントの種類によっては、ドキュメント本文の内容に加えて、そのドキュメントの種類に対して定義されている検索プロパティの一部またはすべてが、対応する IFilter によって抽出されます。 フルテキスト インデックスの作成時に IFilter によって抽出されたプロパティに対してのみプロパティ検索をサポートするように、フルテキスト インデックスを構成することができます。 多くの文書プロパティを抽出するIFilterの中には、.docx、.xlsx、.pptxなどのMicrosoft Office文書タイプのIFilterがあります。 一方で、XML IFilterはプロパティを発行しません。
検索プロパティでのフルテキスト検索のしくみ
Full-Text 検索は、登録済みの各プロパティに内部プロパティIDを割り当て、そのIDを全文インデックスに保存することでプロパティ検索をサポートします。
内部プロパティID
Full-Text Engine は、登録されている各プロパティに対して内部プロパティ ID を適宜割り当てます。この内部プロパティ ID は、特定の検索リスト内のプロパティを一意に識別するためのもので、検索プロパティ リストで固有の ID になります。 また、1 つのプロパティを複数の検索プロパティ リストに追加した場合、その内部 ID がリスト間で異なる可能性があります。
プロパティを検索リストに追加したときに、Full-Text Engine によって 内部プロパティ ID がプロパティに適宜割り当てられます。 この内部プロパティ ID は、該当する検索プロパティ リスト内のプロパティを一意に識別する整数です。
次の図は、Title と Keywords の 2 つのプロパティを指定する検索プロパティ リストの論理的なビューを示しています。 キーワードのプロパティリスト名は Tagsです。 これらのプロパティは同じプロパティ集合に属し、そのGUIDは f29f85e0-4ff9-1068-ab91-08002b27b3d9です。 Title のプロパティ整数識別子は 2、Tags (Keywords) のプロパティ整数識別子は 5 です。 Full-Text Engine は、各プロパティを、検索プロパティ リストで一意となる内部プロパティ ID に適宜関連付けます。 Title プロパティの内部プロパティ ID は 1、Tags プロパティの内部プロパティ ID は 2 になります。
内部プロパティ ID は、プロパティのプロパティ整数識別子とは異なる場合があります。 特定のプロパティを複数の検索プロパティ リストに登録した場合、検索プロパティ リストごとに異なる内部プロパティ ID が割り当てられる可能性があります。 たとえば、ある検索プロパティ リストでは内部プロパティ ID が 4 である一方で、別の検索プロパティ リストでは内部プロパティ ID が 1 であったり 3 であったりする場合があります。 これに対し、プロパティ整数識別子はプロパティに固有な識別子であるため、プロパティがどこで使用されるかに関係なく同じ値になります。
登録物件索引
フルテキスト インデックスが検索プロパティ リストに関連付けらた後で、プロパティに固有の検索語句のインデックスを作成するために、インデックスを再作成する必要があります。 フルテキスト インデックスの作成中、すべてのプロパティの内容が他の内容と共にフルテキスト インデックスに格納されます。 登録されたプロパティに含まれている検索語句のインデックスを作成しているときには、フルテキスト インデクサーによって、対応する内部プロパティ ID も語句と共に格納されます。 一方、プロパティが登録されていない場合は、文書本文の一部のように全文インデックスに保存され、内部プロパティIDの値はゼロになります。
次の図に、フルテキスト インデックスに示された検索語句の論理ビューを示します。このフルテキスト インデックスは、前の図に示した検索プロパティ リストに関連付けられています。 サンプル文書であるドキュメント1には、3つのプロパティ(タイトル、著者、キーワード)と文書本文が含まれています。 検索プロパティ リストに指定されている Title と Keywords のプロパティの場合、検索語句がフルテキスト インデックスの対応する内部プロパティ ID に関連付けられています。 これに対し、Author プロパティの内容については、ドキュメントの本文の一部であるかのようにインデックスが作成されます。 これは、プロパティを登録することにより、プロパティに格納されている内容の量に応じてフルテキスト インデックスのサイズが増加することを示しています。
タイトルプロパティ内の検索語(Favorite、 Biking、 Trails)は、このインデックスのタイトルに割り当てられた内部プロパティIDに関連付けられています。1. キーワードプロパティ内の検索語(biking および mountain)は、このインデックスのタグに割り当てられた内部プロパティIDに関連付けられています。 著者プロパティ(Jane および Doe)および文書本文の検索語では、内部プロパティIDは0です。
bikingという用語はタイトルプロパティ、キーワード(タグ)プロパティ、文書本文に現れます。 Title または Keywords (Tags) プロパティで biking のプロパティ検索をすると、このドキュメントが検索結果に表示されます。
bikingの一般的な全文クエリも、インデックスがプロパティ検索用に設定されていないかのようにこのドキュメントを返します。 著者の物件で biking を検索してもこの書類は返ってきません。
プロパティスコープのフルテキスト クエリでは、フルテキスト インデックスの現在の検索プロパティ リストに登録されている内部プロパティ ID が使用されます。
物件検索を可能にすることの影響
1 つまたは複数のプロパティを対象とした検索をサポートするようにフルテキスト インデックスを構成すると、検索プロパティ リストに指定したプロパティの数および各プロパティの内容に応じて、インデックスのサイズが増加します。
Microsoft Word、Excel、PowerPointの典型的なコーパスをテストする際に、全文インデックスを標準的な検索プロパティのインデックスとして設定しました。 これらのプロパティをインデックス化することで、全文索引のサイズが約5%増加しました。 このおおよそのサイズ増加は、ほとんどの文書コーパスで典型的なものと考えられます。 しかし最終的には、そのサイズ増加は、特定の文書コーパスにおけるプロパティデータ量と全体のデータ量の比較によって決まります。
物件検索リストを作成し、物件検索を有効にします
プロパティ検索を有効にするには、検索プロパティリストを作成し、リストに1つ以上のプロパティを追加し、そのリストを全文索引に関連付けます。
検索プロパティリストの作成
Transact-SQL またはSQL Server Management Studioを使って検索物件リストを作成しましょう。
Transact-SQL で物件検索リストを作成してください
CREATE SEARCH PROPERTY LIST文を使い、リストに少なくとも名前を付けてください。
SQL Server Management Studioで検索プロパティリストを作成する
オブジェクト エクスプローラーで、サーバーを展開します。
[データベース]を展開し、検索プロパティ リストを作成する対象のデータベースを展開します。
[ストレージ]を展開し、 [検索プロパティ リスト]を右クリックします。
[新しい検索プロパティ リスト]をクリックします。
プロパティ リストの名前を指定します。
必要に応じて、他のユーザーをプロパティ リストの所有者として指定します。
次のいずれかのオプションを選択してください。
[空の検索プロパティ リストを作成する]
[既存の検索プロパティ リストから作成する]
詳細については、CREATE SEARCH PROPERTY LISTを参照してください。
[OK] を選択します。
検索プロパティリストにプロパティを追加する
プロパティを検索するには、 検索プロパティ リスト を作成し、検索可能にする 1 つまたは複数のプロパティを指定する必要があります。 プロパティを検索プロパティ リストに追加すると、プロパティはその特定のリスト用に登録されます。 プロパティを検索プロパティ リストに追加するには、次の値が必要です。
プロパティ セット GUID
それぞれの検索プロパティは、関連するプロパティのグループを含む単一のプロパティ セットに属します。 各プロパティ セットは、グローバルに一意な識別子 (GUID) によって識別されます。
プロパティ整数識別子
それぞれの検索プロパティは、プロパティ セット内で一意な識別子を持っています。 特定のプロパティでは、識別子が整数または文字列である場合があります。ただし、フルテキスト検索では、整数識別子のみがサポートされます。
プロパティ名
これは、プロパティを検索するフルテキスト クエリでユーザーが指定する名前です。 プロパティ名には途中に空白を使用できます。 最大長は 256 文字です。
プロパティ名として、次のいずれかを指定できます。
System.AuthorやSystem.Contact.HomeAddressなど、Windowsの標準的な名称。ユーザーにとって覚えやすくわかりやすい名前。 いくつかのプロパティは "Author" や "Home Address" などの一般的なわかりやすい名前に関連付けられていますが、ユーザーにとって最も適した任意の名前を指定できます。
注
プロパティ セット GUID とプロパティ識別子の特定の組み合わせは、特定の検索プロパティ リスト内で一意である必要があります。 つまり、同じ物件を異なる名前や説明で複数回追加することはできません。
プロパティの説明 (省略可能)
検索プロパティを検索プロパティ リストに追加するとき、オプションで説明を記述できます。 例えば、名前からは明らかでないプロパティに関する情報を提供したい場合や、そのプロパティのプロパティ集合を記述したい場合などです。
検索プロパティリストの値を取得する
プロパティ集合 の検索(GUID)やプロパティ整数IDの検索については、こちらをご覧ください。
Transact-SQL で物件を検索物件リストに追加します
記事検索プロパティのプロパティ セット GUID およびプロパティ整数 ID の確認方法で説明されている方法のいずれかを使用して取得した値を、ALTER SEARCH PROPERTY LIST ステートメントで使用します。
次の例では、これらの値を使用してプロパティを検索プロパティ リストに追加する方法を示しています。
ALTER SEARCH PROPERTY LIST DocumentTablePropertyList
ADD 'Title' WITH (
PROPERTY_SET_GUID = 'F29F85E0-4FF9-1068-AB91-08002B27B3D9',
PROPERTY_INT_ID = 2,
PROPERTY_DESCRIPTION = 'System.Title - Title of the item.'
);
SQL Server Management Studioの検索プロパティリストにプロパティを追加してください
[検索プロパティ リストのプロパティ] ダイアログ ボックスを使用して、検索プロパティを追加および削除します。 オブジェクト エクスプローラーでは、関連するデータベースの [ストレージ] ノードの下に [検索プロパティ リスト] があります。
検索プロパティリストを全文索引と関連付ける
検索プロパティ リストに登録されているプロパティを対象としたプロパティ検索をフルテキスト インデックスでサポートするためには、検索プロパティ リストとインデックスを関連付けた後、インデックスを再作成する必要があります。 フルテキスト インデックスを再作成すると、登録された各プロパティに含まれている検索語句に対して、プロパティ固有のインデックス エントリが作成されます。
全文索引がこの検索プロパティリストに関連付けられている限り、全文クエリはPROPERTY述語のCONTAINSオプションを使って、その検索プロパティリストに登録されているプロパティを検索できます。
フルテキスト インデックスに関連付けられている検索プロパティ リストを変更した場合は、インデックスを一貫性のある状態に保つために、インデックスの再構築が必要になります。 インデックスは即座に切り捨てられ、完全作成が実行されるまで空になります。 検索プロパティリストの変更が索引の再構築を引き起こす場合の詳細については、 ALTER FULLTEXT INDEXの「注記」を参照してください。
Transact-SQL で検索プロパティ リストを全文インデックスに関連付ける
ALTER FULLTEXT INDEX 句で SET SEARCH PROPERTY LIST = <property_list_name> ステートメントを使用します。
SQL Server Management Studioで検索プロパティリストを全文インデックスと関連付けます
[フルテキスト インデックスのプロパティ] ダイアログ ボックスの [全般] ページで、 [検索プロパティ リスト] の値を指定します。
CONTAINS を含むクエリ検索プロパティ
プロパティ スコープのフルテキスト クエリのための CONTAINS の基本的な構文を次に示します。
SELECT column_name
FROM table_name
WHERE CONTAINS (PROPERTY(column_name, 'property_name'), '<contains_search_condition>');
たとえば、次のクエリは、 Titleデータベースの Document テーブルの Production.Document 列内で、インデックス化されたプロパティ AdventureWorks に対する検索を実行します。 このクエリは、Title または Maintenance という文字列が Repair プロパティに含まれているドキュメントのみを返します。
USE AdventureWorks2025;
GO
SELECT Document
FROM Production.Document
WHERE CONTAINS (PROPERTY(Document, 'Title'), 'Maintenance OR Repair');
GO
この例では、ドキュメントの IFilter で Title プロパティが抽出されること、Title プロパティが検索プロパティ リストに追加されること、および検索プロパティ リストがフルテキスト インデックスに関連付けられていることを前提としています。
物件検索リストの管理
検索プロパティリストを作成した後、閲覧、変更、削除が可能です。
検索プロパティリストの表示と変更
Transact-SQL またはSQL Server Management Studioのいずれかを使って検索物件リストを閲覧・変更できます。
Transact-SQL で検索物件リストを閲覧・変更します
ALTER SEARCH PROPERTY LIST文を使って検索プロパティの追加または削除を行います。
SQL Server Management Studioで検索プロパティリストを閲覧・変更
オブジェクト エクスプローラーで、サーバーを展開します。
[データベース]を展開し、データベースを展開します。
[記憶域]を展開します。
[検索プロパティ リスト] を展開して、検索プロパティ リストを表示します。
プロパティ リストを右クリックし、 [プロパティ]をクリックします。
[検索プロパティ リスト エディター] ダイアログ ボックスで、プロパティ グリッドを使用して、検索プロパティを追加または削除します。
- ドキュメントプロパティを削除するには、プロパティの左側にある行ヘッダーを選択し、DELキーを押します。
ドキュメントプロパティを追加するには、リストの
*の右側にある空の行を選び、新しいプロパティの値を入力します。これらの値の詳細については、「 検索プロパティ リスト エディター」を参照してください。 Microsoftによって定義されたプロパティの値を取得する方法については、Find property set GUIDsおよび検索プロパティの整数IDを参照してください。 独立系ソフトウェア ベンダー (ISV) によって定義されたプロパティの詳細については、そのベンダーのマニュアルを参照してください。
[OK] を選択します。
検索プロパティリストを削除する
リストが全文インデックスに紐づいている限り、データベースからプロパティリストを削除することはできません。
Transact-SQL で検索プロパティリストを削除する
DROP SEARCH PROPERTY LIST ステートメントを使用します。
SQL Server Management Studioで検索プロパティリストを削除する
オブジェクト エクスプローラーで、サーバーを展開します。
[データベース]を展開し、データベースを展開します。
[ストレージ]を展開し、 [検索プロパティ リスト] ノードを展開します。
削除したいプロパティリストを右クリックし、「 削除」を選択します。
[OK] を選択します。