全文検索を使用する¶
検索関数を使用すると、 IP、 VARIANT、 OBJECT 列のフィールドを含め、1つまたは複数のテーブルから、指定した列の文字データ(テキスト)と ARRAY アドレスを検索できます。この関数は、指定された検索語のリストに基づいて、指定された列または文字列のテキストを検索します。この関数は、検索セマンティクスに基づいてテキストが指定された検索語に一致する場合は TRUE を返します。
多くの場合、 SEARCH 関数を呼び出すには、 SELECT リストか、 SELECT ステートメントの WHERE 句で指定します。関数が WHERE 句フィルターとして使用されている場合、関数が TRUE を返すと、クエリは行を返します。
SEARCH 関数にはセットアップも追加権限も必要ありません。列のデータにアクセスする権限を持つロールを使用している場合、 SEARCH 関数を使用してそのデータを検索することができます。
次のセクションでは、 SEARCH 関数についての詳細と、この関数を使用した場合のクエリパフォーマンスの最適化について説明します。
SEARCH 関数の使用¶
SEARCH 関数 は、 VARIANT、 OBJECT、 ARRAY の列のフィールドを含む、1つ以上のテーブルから指定された列の文字データ(テキスト)を検索します。
SEARCH関数を使用すると、テキストアナライザーはテキストをトークンに分割します。トークンとは、単語や数値など、テキストの個別の単位です。指定がない場合は、デフォルトのアナライザーが適用されます。アナライザーは、検索語とデータの両方からトークンを抽出します。
検索語から抽出されたトークンが、検索セマンティクスに従って指定された列またはフィールドから抽出されたトークンと一致する場合、この関数はTRUEを返します。SEARCH_MODE関数の引数は、以下の検索モードのいずれかを指定します。
'OR':この関数は分離的セマンティクスを使用します。検索対象の列またはフィールドから抽出されたトークンのいずれかが、検索文字列から抽出されたトークンのいずれかと一致する場合、一致が成立します。例えば、search_stringの値が'blue red green'の場合、この関数は、検索対象の列またはフィールドのいずれかにblueORredORgreenを含む行に対して TRUE を返します。'AND':この関数は接続的セマンティクスを使用します。検索される列またはフィールドの少なくとも1つから抽出されたトークンが、検索文字列から抽出されたトークンのすべてと一致する場合、一致となります。一致するトークンはすべて1つの列またはフィールドになければなりません。複数の列やフィールドにまたがってはなりません。例えば、search_stringの値が'blue red green'の場合、この関数は、検索対象の列またはフィールドの少なくとも1つにblueANDredANDgreenを含む行に対して TRUE を返します。'PHRASE':この関数はフレーズマッチのセマンティクスを使用します。検索される列またはフィールドの少なくとも1つから抽出されたトークンが、トークンの順序と隣接性を含め、検索文字列から抽出されたすべてのトークンと一致する場合に、一致が存在します。マッチングセマンティクスは、以下の違いを除けば、接続的セマンティクスと同じです。
トークンの順番は正確に一致していなければなりません。例えば、
search_stringの値が'blue,red,green'の場合、この関数はred,green,blueに対して FALSE を返します。検索データ内に追加のトークンを挟むことはできません。例えば、
search_stringの値が'blue,red,green'の場合、この関数はblue,yellow,red,greenに対して FALSE を返します。
'EXACT':この関数は完全一致のセマンティクスを使用します。検索対象の列またはフィールドの少なくとも1つから抽出されたトークンが、区切り文字を含む検索文字列から抽出されたすべてのトークンと完全に一致する場合、一致が成立します。マッチングルールは、以下の違いを除いて、フレーズ検索のセマンティクスと同じです。
トークン間の区切り文字列は正確に一致しなければなりません。例えば、
search_stringの値が'blue,red,green'の場合、この関数は、検索対象の列またはフィールドの少なくとも1つにblue,red,greenを含む行に対して TRUE を返します。この関数は、blue|red|greenやblue, red, greenのようなバリエーションに対して FALSE を返します。区切り文字が
search_string値の最初または最後の文字である場合、区切り文字はマッチングのための文字として扱われます。したがって、最初と最後のデリミターの左右にあるデリミターは、マッチする可能性があります。例えば、search_stringの値が'[blue]'の場合、この関数はfoo [blue] bar、[[blue]]、=[blue].に対しては TRUE を返しますが、(blue)やfoo blue barに対しては返しません。
以下の例では、デフォルトの SEARCH_MODE ('OR') とデフォルトのアナライザーで、 leopard テキスト内の文字列 snow leopard を検索しています:
SELECT SEARCH('leopard', 'snow leopard');
+-----------------------------------+
| SEARCH('LEOPARD', 'SNOW LEOPARD') |
|-----------------------------------|
| True |
+-----------------------------------+
次の例は、 lion というテキストから、 snow leopard という文字列を検索します。
SELECT SEARCH('lion', 'snow leopard');
+--------------------------------+
| SEARCH('LION', 'SNOW LEOPARD') |
|--------------------------------|
| False |
+--------------------------------+
次の例は、文字列 leopard の中から snow leopard を検索し、引数 SEARCH_MODE に 'AND' を指定します。
SELECT SEARCH('leopard', 'snow leopard', search_mode => 'AND');
+---------------------------------------------------------+
| SEARCH('LEOPARD', 'SNOW LEOPARD', SEARCH_MODE => 'AND') |
|---------------------------------------------------------|
| False |
+---------------------------------------------------------+
この関数の詳細とその他の例については、 SEARCH を参照してください。
SEARCH_IP 関数の使用¶
SEARCH_IP 関数 は、VARIANT、OBJECT および ARRAY 列のフィールドを含む、1つ以上のテーブルから、指定された文字列の有効な IPv4、IPv6 アドレスを検索します。検索は、指定した単一の IP アドレスに基づいて行われます。この IP アドレスが、指定された列またはフィールドの IP アドレスと完全に一致する場合、関数は TRUE を返します。
次の例は、 192.0.2.146 のテキストから、 IP アドレス 10.10.10.1 を検索します。
SELECT SEARCH_IP('192.0.2.146','10.10.10.1');
+---------------------------------------+
| SEARCH_IP('192.0.2.146','10.10.10.1') |
|---------------------------------------|
| False |
+---------------------------------------+
この関数の詳細とその他の例については、 SEARCH_IP を参照してください。
SEARCH 関数を使用するクエリの最適化¶
この関数を使用するクエリのパフォーマンスを向上させるために、オプションで FULL_TEXT 検索最適化 をテーブル内の特定の列または列のセットに対して有効にすることができます。検索最適化を有効にすると、新しい 検索アクセスパス が構築され、維持されます。