Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (日本語) » SQL Anywhere サーバ - SQL リファレンス » SQL の使用 » SQL 言語の要素 » 探索条件

 

CONTAINS 探索条件

構文
CONTAINS ( column-name [,...], contains-query-string )
contains-query-string :
simple-expression
| or-expression
simple-expression :
primary-expression
| and-expression
or-expression :
simple-expression { OR | | } contains-query-string
primary-expression :
basic-expression
| FUZZY " fuzzy-expression "
| and-not-expression
and-expression :
primary-expression [ AND | & ] simple-expression
and-not-expression :
primary-expression [ AND | & ] { NOT | - } basic-expression
basic-expression :
term
| phrase
| ( contains-query-string )
| near-expression
fuzzy-expression :
term
| fuzzy-expression term
term :
simple-term
| prefix-term
prefix-term : 
simple-term*
phrase :
" phrase-string "
near-expression :
term NEAR[distance] term
| term { NEAR | ~ } term
phrase-string :
term
| phrase-string term
simple-term : A string separated by whitespace and special characters that
represents a single indexed term (word) to search for.
distance : a positive integer
パラメータ
  • and-expression   and-expression は、primary-expressionsimple-expression が両方ともテキスト・インデックスで見つかる必要があることを指定するために使用します。

    デフォルトでは、単語や式の間に演算子が指定されていない場合は、and-expression があるものとして処理されます。たとえば、'a b' は、'a AND b' と解釈されます。

    アンパサンド (&) は AND の代わりとして使用でき、式や単語のどちら側にも配置できます (たとえば、'a &b')。

    特殊文字を使用できる構文を参照してください。

  • and-not-expression   and-not-expression は、primary-expression がテキスト・インデックスに存在し、なおかつ、basic-expression がテキスト・インデックスに存在してはならないことを示すために使用します。これは「否定」とも呼ばれています。

    否定を示すのにハイフンを使用する場合、そのハイフンの左がスペース、右が単語であることが必要です。それ以外の場合、ハイフンは否定と解釈されません。たとえば、'a -b''a AND NOT b' と同義ですが、'a - b' ではハイフンが無視され、この文字列は 'a AND b' と同義になります。'a-b' はフレーズ '"a b"' と同義です。ハイフン (-) を使用できる構文を参照してください。

  • or-expression   or-expression は、simple-expression または contains-query-string がテキスト・インデックスに少なくとも 1 つ存在する必要があることを示すために使用します。たとえば、'a|b' は、'a OR b' と解釈されます。特殊文字を使用できる構文を参照してください。

  • fuzzy-expression   fuzzy-expression は、指定した単語と似ている単語を検索するために使用します。あいまい一致は、NGRAM テキスト・インデックスに対してのみサポートされています。あいまい検索を参照してください。

  • near-expression   near-expression は、互いの距離が近い単語を検索するために使用します。これは「近接検索」とも呼ばれています。たとえば、'b NEAR[5] c' は、互いの距離が 5 語以下の b と c の出現を探します。単語の順序に意味はなく、'b NEAR c''c NEAR b' と同義です。

    NEAR を distance なしで指定すると、デフォルトである 10 語が適用されます。

    NEAR の代わりとしてチルダ (~) を指定することもできます。これは、距離を指定せずに NEAR を指定することと同義で、デフォルトの 10 語が適用されます。

    'a NEAR[1] b NEAR[1] c' のように、NEAR 式を連ねて使用することはできません。

    特殊文字を使用できる構文近接検索を参照してください。

  • prefix-term   prefix-term は、指定したプレフィクスで始まる単語を検索するために使用します。たとえば、'datab*' は datab で始まる単語を検索します。これは「プレフィクス検索」とも呼ばれています。プレフィクス検索では、単語のアスタリスクより左の部分に対して一致が実行されます。アスタリスク (*) を使用できる構文プレフィクス検索を参照してください。

備考

CONTAINS 探索条件は、引数としてカラム・リストと contains-query-string を取ります。これは、探索条件 (述部とも呼ばれる) を指定できる場所ならどこでも使用でき、TRUE または FALSE を返します。contains-query-string は、クエリ実行時に認識できる値を持つ、定数文字列または変数である必要があります。

複数のカラムが指定された場合は、それらがどれも同じベース・テーブルを参照している必要があります。テキスト・インデックスが複数のベース・テーブルにわたることはありません。ベース・テーブルは FROM 句で直接参照できます。または、ビューや派生テーブルで DISTINCT、GROUP BY、ORDER BY、UNION、INTERSECT、EXCEPT またはロー制限が使用されない場合は、ベース・テーブルをビューまたは派生テーブルで使用することもできます。

クエリ文字列に英数字以外の文字を使用する場合は、次の点に注意が必要です。

  • アスタリスクが単語内にあると、エラーが返されます。

  • 英数字以外の文字 (特殊文字を含む) を fuzzy-expression に使用しないでください。このような文字は、ホワイトスペースとして扱われ、単語区切りとして機能します。

  • 可能であれば、特殊文字ではない英数字以外の文字をクエリ文字列に含めないでください。特殊文字ではない英数字以外の文字があると、それを含む単語がフレーズとして扱われ、その文字の位置で単語が区切られます。たとえば、'things we've done''things "we ve" done' と解釈されます。

フレーズの内部にあっても特殊文字として解釈されるのは、アスタリスクのみです。それ以外の特殊文字がフレーズの内部にあると、ホワイトスペースとして扱われ、単語区切りとして機能します。

contains-query-string は、大きく分けて次の 2 ステップで解釈されます。

  • ステップ 1:演算子の解釈と優先度の適用   このステップでは、キーワードが演算子として解釈され、優先度の規則が適用されます。CONTAINS 探索条件における演算子の優先度を参照してください。

  • ステップ 2:テキスト設定オブジェクトの設定の適用   このステップでは、テキスト設定オブジェクトの設定が単語に適用されます。たとえば、NGRAM テキスト・インデックスでは、単語は N-gram 表現に分解されます。このステップで、単語長の設定値を超えているクエリ単語またはストップリストに載っているクエリ単語が削除されます。単語が削除された場合のクエリ文字列の解釈の詳細については、テキスト設定オブジェクトの例を参照してください。

CONTAINS 探索条件における演算子の優先度

クエリの評価中、式は次の優先順位に従って評価されます。

  1. FUZZY、NEAR

  2. AND NOT

  3. AND

  4. OR

アスタリスク (*) を使用できる構文

アスタリスクは「プレフィクス検索」で使用します。アスタリスクは、クエリ文字列の末尾、または、スペース、アンパサンド、パイプ記号、閉じカッコ、または終了引用符の直前に指定できます。それ以外の位置にアスタリスクを指定すると、エラーが返されます。

次の表は、アスタリスクの使用法として可能なものを示しています。

クエリ文字列 同義の文字列 解釈

'th*'

th で始まる単語を検索します。

'th*&best'

'th* AND best' および 'th* best'

th で始まる単語と、単語 best を検索します。

'th*|best'

'th* OR best'

th で始まる単語、または単語 best を検索します。

'very&(best|th*)'

'very AND (best OR th*)'

単語 very と、単語 best または th で始まる単語を検索します。

'"fast auto*"'

auto で始まる単語が直後に続く、単語 fast を検索します。

'"auto* price"'

単語 price が直後に続く、auto で始まる単語を検索します。

注意

アスタリスクを含むクエリ文字列の解釈は、テキスト設定オブジェクトの設定によって異なります。プレフィクス検索を参照してください。

ハイフン (-) を使用できる構文

ハイフンは、単語や式の「否定」に使用でき、NOT と同義です。ハイフンが否定と解釈されるかどうかは、クエリ文字列内での位置によります。たとえば、ハイフンの直後に単語や式が続く場合、そのハイフンは否定と解釈されます。ハイフンが単語内に埋め込まれている場合は、そのままハイフンとして解釈されます。

否定を示すために使用する場合、ハイフンの直前にホワイトスペース、直後に式がある必要があります。

fuzzy-expression のフレーズ内で使用すると、ハイフンはホワイトスペースとして扱われ、単語区切りとして機能します。

次の表に、ハイフンを使用できる構文を示します。

クエリ文字列 同義の文字列 解釈

'the -best'

'the AND NOT best', 'the AND -best', 'the & -best', 'the NOT best'

単語 the と、best ではない単語を検索します。

'the -(very best)'

'the AND NOT (very AND best)'

単語 the と、very でも best でもない単語を検索します。

'the -"very best"'

'the AND NOT "very best"'

単語 the と、フレーズ very best ではないものを検索します。

'alpha-numerics'

'"alpha numerics"'

単語 numerics が直後に続く、単語 alpha を検索します。

'wild - west'

'wild west'および 'wild AND west'

単語 wild と、単語 west を検索します。

特殊文字を使用できる構文

次の表に、アスタリスクとハイフンを除くすべての特殊文字を使用できる構文を示します。アスタリスクとハイフンの場合については、アスタリスク (*) を使用できる構文ハイフン (-) を使用できる構文を参照してください。

以下に示されている特殊文字は、フレーズ内に出現した場合は特殊文字とは見なされず、削除されます。

注意

文字列リテラルの指定に関連する制約事項は、クエリ文字列にも該当します。たとえば、アポストロフィはエスケープする必要があります。文字列リテラルのフォーマットの詳細については、文字列リテラルを参照してください。

文字または構文 使用例と備考
アンパサンド (&)

アンパサンドは AND と同義で、次のような指定が可能です。

  • 'a & b'
  • 'a &b'
  • 'a&b'
  • 'a& b'
パイプ記号 (|)

パイプ記号は OR と同義で、次のような指定が可能です。

  • 'a|b'
  • 'a |b'
  • 'a | b'
  • 'a| b'
二重引用符 (")

二重引用符は、順序と相対的な距離が重要な単語並びを含める場合に使用します。たとえば、クエリ文字列 'learn "full text search"' において、"full text search" はフレーズです。この例において、learn はこのフレーズの前後どちらにあっても、別のカラムにあってもかまいませんが (テキスト・インデックスが複数カラムに対して構築されている場合)、完全に一致するフレーズが 1 つのカラム内で見つかる必要があります。

丸カッコ ()

丸カッコは、式の評価順がデフォルトの順序とは違う場合に、その順序を指定するために使用します。たとえば、'a AND (b|c)' は「a と、b または c」と解釈されます。

デフォルトの評価順の詳細については、CONTAINS 探索条件における演算子の優先度を参照してください。

チルダ (~)

チルダは NEAR と同義で、特別な構文規則はありません。クエリ文字列 'full~text''full NEAR text' と同義で、「単語 text から 10 語以内の距離にある単語 full」と解釈されます。

角カッコ [ ]

角カッコはキーワード NEAR と組み合わせて distance の指定に使用します。角カッコをそれ以外の目的で使用すると、エラーが返されます。

参照