CONTAINSSEMANTIC 述語は WHERE 句の一部であり、インデックス付きコンテンツ内でのセマンティック検索をサポートします。 この句を使用すると、正確なキーワード一致ではなく、セマンティック類似性に基づいてテキストまたは画像を検索できます。
CONTAINSSEMANTIC 述語の基本的な構文を次に示します。
...CONTAINSSEMANTIC (ContentType, [<fulltext_column or #list>,] search_text_phrase, LCID) ...
ContentType パラメーターは、検索対象がテキストか画像かを指定します。 使用できる値は、"text" または "image" です。
fulltext_column参照は省略可能です。 これを使用すると、CONTAINSSEMANTIC 述語がテストされる 1 つの列または列グループに検索を制限できます。 fulltext_columnを "*" と指定すると、インデックス付きテキスト プロパティがすべて検索されます。 列がテキスト プロパティである必要はありませんが、列が他のデータ型の場合、結果は意味がない可能性があります。 列名は、通常の識別子または区切り 識別子のいずれかであり、コンマで条件から区切る必要があります。 fulltext_columnが指定されていない場合は、ドキュメントの本文である System.Search.Contents 列が使用されます。
述語の LCID 部分は、検索ロケールを指定します。 これにより、検索エンジンは、検索クエリに適切なワード ブレーカーと変曲形を使用するように指示されます。 ロケールを指定するには、Windows 標準言語コード識別子 (LCID) を指定します。 たとえば、1033 は米国英語の LCID です。 LCID を CONTAINSSEMANTIC 句のかっこ内の最後の項目として配置します。 検索と言語に関する重要な情報については、「 ローカライズされた検索の使用」を参照してください。
従来のインデックス作成と検索は、Windows でサポートされているすべての言語パックでシームレスに動作し続けます。 ただし、改善された検索は、次の言語にのみ最適化されています。
| Language | LCID 値 |
|---|---|
| 英語 (米国) | 1041 |
| 英語 (CA) | 4105 |
| 英語 (AU) | 3081 |
| 英語 (GB) | 2057 |
| フランス語 (FR) | 1036 |
| フランス語 (CA) | 3084 |
| ドイツ語 (DE) | 1031 |
| スペイン語 (ES) | 3082 |
| スペイン語 (MX) | 2058 |
| 日本語 (JP) | 1041 |
| 簡体中国語 | 2052 |
注
既定の検索ロケールは、システムの既定のロケールです。
LCID 値の詳細については、「 Windows 言語コード識別子 (LCID) リファレンス」を参照してください。
search_text_phrase部分は、単一単語の単一引用符または語句の二重引用符で囲む必要があり、論理演算子 AND または OR を使用して結合される 1 つ以上のコンテンツ検索用語で構成されます。 AND 演算子の後に省略可能な単項演算子 NOT を使用して、コンテンツ検索用語の論理値を否定できます。
注
NOT 演算子は AND の後でのみ実行できます。 一致条件が 1 つしかない場合、または OR 演算子の後に NOT 演算子を使用することはできません。
かっこを使用して、コンテンツ検索用語をグループ化および入れ子にすることができます。 次の表では、論理演算子の優先順位について説明します。
| 順序 (優先順位) | 論理演算子 |
|---|---|
| 第一位(最高) | NOT |
| Second | AND |
| 3 番目 (最低) | OR |
同じ型の論理演算子は連想であり、指定された計算順序はありません。 たとえば、(A AND B) AND (C AND D) は、論理結果に変更を加えずに (B AND C) AND (A AND D) 計算できます。
Example
次の例は、 CONTAINSSEMANTIC 句を使用して、"family on a beach" という語句に関連するドキュメントと画像のクエリを示しています。
SELECT * FROM SystemIndex
WHERE CONTAINSSEMANTIC('text', *, 'family on a beach', 1033)
OR CONTAINSSEMANTIC('image', *, 'family on a beach', 1033)
RANK BY MERGE(merge_operation)