全文検索を使用する¶
検索関数を使用すると、 IP、 VARIANT、 OBJECT 列のフィールドを含め、1つまたは複数のテーブルから、指定した列の文字データ(テキスト)と ARRAY アドレスを検索できます。この関数は、指定された検索語のリストに基づいて、指定された列または文字列のテキストを検索します。この関数は、検索セマンティクスに基づいてテキストが指定された検索語に一致する場合は TRUE を返します。
多くの場合、 SEARCH 関数を呼び出すには、 SELECT リストか、 SELECT ステートメントの WHERE 句で指定します。関数が WHERE 句フィルターとして使用されている場合、関数が TRUE を返すと、クエリは行を返します。
SEARCH 関数にはセットアップも追加権限も必要ありません。列のデータにアクセスする権限を持つロールを使用している場合、 SEARCH 関数を使用してそのデータを検索することができます。
次のセクションでは、 SEARCH 関数についての詳細と、この関数を使用した場合のクエリパフォーマンスの最適化について説明します。
SEARCH 関数の使用¶
SEARCH 関数 は、 VARIANT、 OBJECT、 ARRAY の列のフィールドを含む、1つ以上のテーブルから指定された列の文字データ(テキスト)を検索します。
When you use the SEARCH function, a text analyzer breaks the text into tokens, which are discrete units of text, such as words or numbers. A default analyzer is applied if you don't specify one. The analyzer extracts tokens from both the search terms and the data.
If tokens extracted from the search terms match tokens extracted from a specified column or field according to the search semantics, the function returns TRUE. The SEARCH_MODE function argument specifies one of the following search modes:
'OR'- The function uses disjunctive semantics. There is a match if any of the tokens extracted from the columns or fields being searched match any of the tokens extracted from the search string. For example, if thesearch_stringvalue is'blue red green', the function returns TRUE for a row that containsblueORredORgreenin any of the columns or fields being searched.'AND'- The function uses conjunctive semantics. There is a match if the tokens extracted from at least one of the columns or fields being searched matches all of the tokens extracted from the search string. The matching tokens must all be in one column or field; they can't be spread across multiple columns or fields. For example, if thesearch_stringvalue is'blue red green', the function returns TRUE for a row that containsblueANDredANDgreenin at least one of the columns or fields being searched.'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 検索最適化 をテーブル内の特定の列または列のセットに対して有効にすることができます。検索最適化を有効にすると、新しい 検索アクセスパス が構築され、維持されます。