%CONTAINSTERM
Synopsis
scalar-expression %CONTAINSTERM(word[,word...])
引数
scalar-expression | その値を 1 つ以上の word 文字列と比較するスカラ式 (通常はデータ列)。 |
word | scalar-expression の値と一致するアルファベット文字列、またはアルファベット文字列のコンマ区切りリスト。word は完全な単語、または (空白で区切られた複数の単語で構成される) 複数語句である必要があります。単語または句は一重引用符で区切る必要があります。複数語句の制限については、以下を参照してください。 |
概要
%CONTAINSTERM 述語により、word で指定する 1 つ以上の単語と一致するデータの値を選択できます。この比較演算は、単なる文字列一致演算でなく、単語を認識します。複数の word を指定すると、scalar-expression には指定したすべての単語の文字列が含まれる必要があります。単語の文字列の出現順は問われません。word がスカラ式のいずれのデータの値とも一致しない場合、%CONTAINSTERM は NULL 文字列を返します。
%CONTAINSTERM はコレクション述語です。これは SELECT 文の WHERE 節内でのみ使用できます。
%CONTAINSTERM は %Text 文字列または文字ストリーム・フィールドで使用できます。
文字列に%CONTAINSTERM を使用するには、%String プロパティを %Text に変更して、LANGUAGECLASS および MAXLEN プロパティ・パラメータを設定します。以下に例を示します。
Property MySentences As %Text(LANGUAGECLASS = "%Text.English",MAXLEN = 1000);
%TextOpens in a new tab プロパティには MAXLEN 値 (バイト) を指定する必要があります。
%CONTAINSTERM を使用して文字ストリーム・フィールドを検索するには、ストリーム・フィールドが %Stream.GlobalCharacterSearchable タイプとして定義されていることが必要です。以下に例を示します。
Property MyTextStream As %Stream.GlobalCharacterSearchable(LANGUAGECLASS = "%Text.English");
%CONTAINSTERM 述語は、WHERE 節のストリーム・フィールドで使用可能な述語の 1 つです。
使用できる言語は、英語、フランス語、ドイツ語、イタリア語、日本語、ポルトガル語、およびスペイン語です。詳細は、"インターシステムズ・クラス・リファレンス" の (%SYS の) %TextOpens in a new tab パッケージ・クラスのドキュメントを参照してください。
scalar-expression が %Text と %Stream.GlobalCharacterSearchable のいずれのデータ型でもない場合、システムは SQLCODE -309 エラーを生成します。
scalar-expression がコレクション値フィールド (プロパティ) でない場合は、システムは SQLCODE -472 エラーを生成します。
%CONTAINS および %CONTAINSTERM
%CONTAINS および %CONTAINSTERM 述語は、指定された word 引数に対して同じ単語認識比較を実行します。これらの演算子の違いは、複数語句に対する要件にあります。
-
%CONTAINSTERM 引数には、ノイズ語を含めることはできません。%CONTAINS 引数には、ノイズ語を含めることができます。
-
%CONTAINSTERM 引数の句は、NGRAMLEN の語数よりも小さい必要があります。%CONTAINS 引数の句に指定する語数は自由です。
%CONTAINSTERM 演算子は、特定のタイプの比較 (具体的には、非常に多くの検索セット) で優れたパフォーマンスを実現します。%CONTAINSTERM は日本語で比較を実行する場合に推奨されます。
%CONTAINSTERM 比較では scalar-expression の照合タイプが使用され、通常は、大文字と小文字が区別されません。そのため、CASEINSENSITIVE クラス・プロパティを %CONTAINSTERM 比較に適用することはできません。オプションで照合を %EXACT に設定すると、大文字と小文字を区別できます。
単語認識マッチング
Caché では、指定された単語のみが一致するように、句読点解析および語幹ルールを含めた言語解析ルールが使用されます。例えば、word 引数の “set” は、“set” または “Set” (大文字と小文字の区別なし)、および “sets” および “setting” などの語幹形式と一致します。ただし、その単語に指定された文字列が含まれていても、“setscrew”、“settle”、または“Seth” などの単語とは一致しません。
語幹ルールは、任意の 2 つの語幹の形式間におけるマッチングを規定します。語幹解析は、検索語と検索対象テキストの両方に対して実行されます。例えば、%CONTAINSTERM('jumping') と指定すると、テキスト内の単語 “jumps” と一致します。
この単語認識マッチングは、SQL 包含関係演算子 ([) により実行される文字ごとの文字列マッチングとは根本的に異なります。
包含関係比較の詳細は、"%CONTAINS" 演算子を参照してください。
コレクション述語
%CONTAINSTERM はコレクション述語です。これは、述語条件を指定できるコンテキストのほとんどで使用できます。詳細は、このドキュメントの "述語の概要" ページを参照してください。これは以下の制限に従います。
-
%CONTAINSTERM は、HAVING 節では使用できません。
-
%CONTAINSTERM は、JOIN 操作用のフィールドを選択する述語として使用することはできません。
-
OR 論理演算子を使用して %CONTAINSTERM を別の述語条件に関連付けることは、2 つの述語が異なるテーブル内のフィールドを参照している場合はできません。例えば、以下のような場合です。
WHERE t1.text %CONTAINSTERM('Continental United States') OR t2.Timezone BETWEEN 5 AND 8
この制限はオプティマイザがインデックスを使用する方法に依存するので、SQL はこの制限を、インデックスがテーブルに追加されるときにのみ適用できます。このタイプの論理は、すべてのクエリで使用しないことを強くお勧めします。
iKnow と iFind
Caché iKnow text analysis tool および iFind text search tool も単語認識解析を提供します。これらの機能は %TextOpens in a new tab クラスからは完全に独立しています。これらは他のテキスト解析とは大きく異なる、はるかに高度なテキスト解析を提供します。
例
以下の埋め込み SQL の例は、リテラル句を使用して %CONTAINSTERM 比較を実行します。
&sql(SELECT name,stats
INTO :badname, :badstat
FROM Sample.Employee
WHERE status %CONTAINSTERM('invalid value'))
以下の埋め込み SQL の例は、ホスト変数を使用して %CONTAINSTERM 比較を実行します。
SET text="invalid"
&sql(SELECT name,stats
INTO :badname, :badstat
FROM Sample.Employee
WHERE status %CONTAINSTERM(:text))
関連項目
-
%CONTAINS 述語
-
%SIMILARITY 関数
-
"Caché SQL の使用法" の “データベースの問い合わせ” の章の “フリー・テキスト検索を呼び出すクエリ”