WHERE 句 (Windows Search)

クエリによって返される結果にドキュメントが含まれるかどうかを判断する条件は、WHERE 句によって指定されます。 最上位レベルでは、WHERE 句の構文には次の 2 つの部分があります。

...WHERE [<group_aliases>] <search_condition>
...WHERE ReuseWhere(<WHEREID>)

句の省略可能な <group_alias> 部分は、1 つ以上の列のグループにエイリアスを割り当てることで複雑なクエリを簡略化します。 これにより、URL で指定された複数の列で同じ情報を検索する複雑なクエリの読みやすさが向上します。 グループエイリアスの詳細については、「 WITH -- AS Group Alias Predicate」を参照してください。

<WHERE 句の検索条件>部分は、検索の一致条件を指定する 1 つ以上の検索述語です。 検索述語は、何らかの値に関する事実をアサートする式です。

検索条件の結果はブール値で、ドキュメントが指定した検索条件を満たしている場合は TRUE 、そうでない場合は FALSE になります。 結果が TRUE の場合は、ドキュメントが返されます。 結果が FALSE の場合、ドキュメントは返されません。 Microsoft Windows Search クエリで返されるドキュメントには、検索条件との一致に応じてランク値が割り当てられます。 各クエリ検索条件には、返されるランク値の変更をサポートする RANKBY 句を含めることができます。

ReuseWhere 関数を使用すると、同じ検索条件の一部を使用する複数のクエリがより効率的になります。 クエリの WHERE 句は、クエリ内で一致する項目のセットを指定します。 後続のクエリでは、新しいクエリ WHERE 句の ReuseWhere 関数を使用して、前の評価に対して実行された作業を共有できます。

検索述語

検索条件は、ユーザーが検索する対象を記述する 1 つ以上の述語または検索条件で構成されます (たとえば、WHERE System.DateCreated >'2006-04-19')。 検索述語は、論理演算子 ANDOR、または NOT を使用して組み合わせることができます。 省略可能な単項演算子 NOTAND でのみ使用でき、述語または検索条件の論理値を否定する場合にのみ使用できます。 かっこを使用して、論理用語をグループ化して入れ子にすることができます。

次の表は、論理演算子の優先順位を示しています。

順序 (優先順位) 論理演算子
First (最高) NOT
Second AND
3 番目 (最低) OR

 

同じ型の論理演算子は連想演算子であり、指定された計算順序はありません。 たとえば、(A AND B) AND (C AND D) は、論理結果に変更を加えずに (A AND D) AND (B AND C) を計算できます。

重要

不正解: WHERE NOT CONTAINS ('computer')

正解: WHERE CONTAINS ('software') と CONTAINS ('computer') を含まない

 

複雑なクエリでは、一部の列では他の列よりも一致に重点を置く必要があります。 たとえば、"ソフトウェア設計" について説明するドキュメントを検索する場合、ドキュメント のタイトルで検索語句を見つけることは、ドキュメントのテキスト内の個々の単語を見つけるよりも一致する可能性が高くなります。 この方法でドキュメントのランク付けに影響を与えるために、Microsoft Windows Search クエリ言語では検索条件の重み付けがサポートされています。 列の重み付けの詳細については、「 CONTAINS 述語 」と「 FREETEXT 述語」を参照してください。

Windows Search には、フルテキスト検索、非フルテキスト検索、フォルダー深度検索の 3 つの検索述語グループがあります。 フルテキスト検索述語は通常、コンテンツ、タイトル、およびその他の列の意味と一致し、言語的な一致 (代替語の形式、語句、近接検索など) をサポートします。 これに対し、フルテキスト以外の検索述語は、指定された列の値と一致し、特別な言語処理は含まれませんが、場合によっては文字ベースのパターン マッチングが提供されます。 フォルダーの深さの述語では、検索スコープを指定したパスに制限します。

注意

フルテキスト以外の述語がそのドキュメントに対して TRUE と評価されるためにクエリからドキュメントが返された場合、ランク値は 1000 として計算されます。 ランク強制関数を使用すると、ランク値を変更できます。

 

次の表では、フルテキスト検索、非フルテキスト検索、およびフォルダー深度検索述語について説明します。

フルテキスト述語 Description
CONTAINS ドキュメント テキスト列 (タイトル、コンテンツなど) 内の用語の複雑な検索をサポートします。 変化した形の検索語句を検索し、用語の近接性をテストし、論理比較を実行できます。 検索語句にはワイルドカード文字を含めることができます。
FREETEXT 検索語句の意味に一致するドキュメントを検索します。 関連する単語と類似の語句は一致し、ランク列は、ドキュメントが検索語句とどの程度一致するかに基づいて計算されます。 検索語句にワイルドカード文字を含めることはできません。

 

非フルテキスト述語 Description
LIKE 列の値は、ワイルドカード文字を使用した単純なパターン マッチングを使用して比較されます。
リテラル値の比較 列の値は、文字列、日付、タイム スタンプ、数値、およびその他のリテラル値と比較されます。 この述語は、等値と不等値 (より大きい、より小さいなど) をサポートします。
複数値 (ARRAY) の比較 複数値の列は、リテラルの複数値配列と比較されます。
NULL ドキュメントに定義されていない列値は、 NULL 述語を使用して検出できます。

 

フォルダーの深さ Description
SCOPE 特定のフォルダーとすべてのサブフォルダーを含む、指定したパスのディープ トラバーサルを実行します。
ディレクトリ 指定したパスのシャロー トラバーサルを実行し、特定のフォルダーのみを検索します。

 

WHERE 句の例については、前の表でリンクされている個々の述語トピックを参照してください。

リファレンス

ReuseWhere 関数

行セット プロパティ

FROM 句

検索 SQL 構文の概要

WITH -- AS グループエイリアス述語

SCOPE 述語と DIRECTORY 述語

RANK BY 句

概念

フルテキスト述語

非フルテキスト述語