クエリによって返される結果にドキュメントが含まれるかどうかを決定する条件は、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')。 検索述語は、論理演算子 AND、 OR、または NOT を使用して結合できます。 省略可能な単項演算子 NOT は 、AND でのみ使用でき、述語または検索条件の論理値を否定するためにのみ使用できます。 かっこを使用して、論理用語をグループ化して入れ子にすることができます。
次の表は、論理演算子の優先順位を示しています。
順序 (優先順位) | 論理演算子 |
---|---|
First (最高) | じゃない |
秒 | そして |
3 番目 (最低) | 又は |
同じ型の論理演算子は連想であり、指定された計算順序はありません。 たとえば、(A AND B) AND (C AND D) は、論理結果に変更を加えずに (A AND D) AND (B AND C) を計算できます。
Von Bedeutung
不正解: WHERE NOT CONTAINS ('computer')
正解です。WHERE CONTAINS ('software') AND NOT CONTAINS ('computer')
複雑なクエリでは、一部の列では他の列よりも一致に重点を置く必要があります。 たとえば、"ソフトウェア設計" について説明するドキュメントを検索する場合、ドキュメントタイトルで検索用語を見つけることは、ドキュメントのテキスト内の個々の単語を見つけるよりも一致する可能性が高くなります。 この方法でドキュメントのランク付けに影響を与えるために、Microsoft Windows Search クエリ言語では検索条件の重み付けがサポートされています。 列の重みの詳細については、「 CONTAINS 述語 」および「 FREETEXT 述語」を参照してください。
Windows Search には、フルテキスト検索、非フルテキスト検索、フォルダー深度検索の 3 つの検索述語グループがあります。 フルテキスト検索述語は通常、コンテンツ、タイトル、およびその他の列の意味と一致し、言語的一致 (代替の単語形式、語句、近接検索など) をサポートします。 これに対し、フルテキスト以外の検索述語は、指定された列の値と一致し、特別な言語処理は含まれませんが、場合によっては文字ベースのパターン マッチングが提供されます。 フォルダーの深さの述語は、検索範囲を指定したパスに制限します。
注
フルテキスト以外の述語がそのドキュメントに対して TRUE に評価されるためにクエリからドキュメントが返された場合、ランク値は 1000 として計算されます。 ランク強制関数を使用すると、ランク値を変更できます。
次の表では、フルテキスト、非フルテキスト、およびフォルダー深度検索述語について説明します。
フルテキスト述語 | 説明 |
---|---|
含む | ドキュメント テキスト列 (タイトル、コンテンツなど) 内の用語の複雑な検索をサポートします。 変更された検索語句の形式を検索し、用語の近接性をテストし、論理的な比較を実行できます。 検索語句にはワイルドカード文字を含めることができます。 |
FREETEXT | 検索語句の意味に一致するドキュメントを検索します。 関連する単語と同様の語句は一致し、ランク列は、ドキュメントが検索語句とどの程度一致するかに基づいて計算されます。 検索語句にワイルドカード文字を含めることはできません。 |
非フルテキスト述語 | 説明 |
---|---|
という感じで | 列の値は、ワイルドカード文字を使用した単純なパターン マッチングを使用して比較されます。 |
リテラル値の比較 | 列の値は、文字列、日付、タイムスタンプ、数値、およびその他のリテラル値と比較されます。 この述語は、等値と等しくない (より大きい、より小さいなど) をサポートします。 |
複数値 (ARRAY) の比較 | 複数値の列は、リテラルの複数値配列と比較されます。 |
ヌル | ドキュメントに対して未定義の列値は、 NULL 述語を使用して検出できます。 |
フォルダーの深さ | 説明 |
---|---|
スコープ | 特定のフォルダーとすべてのサブフォルダーを含む、指定したパスのディープ トラバーサルを実行します。 |
ディレクトリ | 特定のフォルダーのみを検索して、指定したパスの浅いトラバーサルを実行します。 |
例示
WHERE 句の例については、前の表でリンクされている個々の述語トピックを参照してください。
関連トピック