フルテキスト検索とは、テキストデータ内で全文検索または検索を行う操作を指します。特定のキーワード、フレーズ、またはテキスト式を含むテキスト内容を見つけるために使用されます。フルテキスト検索は、テキスト全体をより包括的に検索し、検索条件に一致する結果を返すことができます。
構文
以下の構文を使用して全文インデックスクエリを実行する場合、指定された列とキーワードまたはフレーズに基づいて全文検索を実行でき、特定の検索修飾子を使用して検索モード(つまり検索条件またはルール)を調整できます。
MATCH (column_name [, column_name ...]) AGAINST (expr [search_modifier])
search_modifier:
IN NATURAL LANGUAGE MODE
| IN BOOLEAN MODE
関連パラメータの説明は以下の通りです:
column_name:全文検索を実行する列を指定します。複数の列を指定する場合は、列の間に半角カンマを使用して区切ります。expr:検索するキーワードまたはフレーズを指定します。search_modifier:オプションで、検索モードを指定します。値は以下のとおりです:IN NATURAL LANGUAGE MODE:デフォルト値で、自然言語検索モードを使用して検索を実行することを指定します。IN BOOLEAN MODE:ブールモードを使用して検索を実行することを指定します。現在のバージョンでは、最も一般的な3種類のブール演算子と、演算子のネストがサポートされています。具体的には以下のとおりです:+:AND、すなわち共通部分集合を表します。-:非、差集合を表します。空の演算子:単独で使用する場合は
OR、和集合を表します。例えばA BはA OR Bを表します。和記号との混合使用は、存在する文の関連性を高めますが、ORの意味を失うことになります。例えば+A Bの場合、Aが存在しなければならず、文中のAとBの関連性を計算します。():演算子のネストを表します。外側に演算子がない場合、ORの意味を持ちます。例えば+A (ネストされた句)は、Aが存在するか、ネストされた句があることを表します。説明
OceanBaseデータベースV4.3.5では、V4.3.5 BP1以降のバージョンから
IN BOOLEAN MODEがサポートされています。
例:
出力される文にはcomputerが含まれていなければなりません。
SELECT * FROM my_table WHERE MATCH (doc) AGAINST ("+computer" IN BOOLEAN MODE);出力される文にはcomputerが含まれていなければならず、weatherは含まれていてはなりません。
SELECT * FROM my_table WHERE MATCH (doc) AGAINST ("+computer -weather" IN BOOLEAN MODE);出力される文にはcomputerが含まれていなければならず、oceanbaseの方がより適合します。
SELECT * FROM my_table WHERE MATCH (doc) AGAINST ("+computer oceanbase" IN BOOLEAN MODE);
その他のMATCH AGAINST式の詳細については、MATCH AGAINSTを参照してください。
ベクトル化クエリ
全文インデックスを含むクエリについては、ベクトル化または非ベクトル化を選択できます。/*+ opt_param('rowsets_enabled', '[true | false]')*/ ヒントを使用して、ベクトル化を有効または無効にすることができます。
注意
ヒントが指定されていない場合、ベクトル化の有効化はベクトル化エンジンのシステムパラメータ設定によって決まり、デフォルトでは有効になっています。
例:
ベクトル化クエリを有効にします。
SELECT /*+ opt_param('rowsets_enabled', 'true') */ title, body FROM articles WHERE MATCH(title, body) AGAINST('tutorial');ベクトル化クエリを無効にします。
SELECT /*+ opt_param('rowsets_enabled', 'false') */ title, body FROM articles WHERE MATCH(title, body) AGAINST('tutorial');
例
テーブル
tbl1を作成し、同時に全文インデックスfull_idx1_tbl1も作成します。CREATE TABLE tbl1(col1 INT PRIMARY KEY, col2 VARCHAR(100), col3 TEXT, FULLTEXT INDEX full_idx1_tbl1(col2, col3));テーブル
tbl1にテストデータを追加します。INSERT INTO tbl1 (col1, col2, col3) VALUES (1, 'Hello World', 'This is a test'), (2, 'OceanBase', 'OceanBase Database is a native, enterprise-level distributed database developed independently by the OceanBase team'), (3, 'Database Management', 'Learn about SQL and database administration'), (4, 'Full Text Searching', 'Master the art of full text searching');実行結果は次のとおりです:
Query OK, 4 rows affected Records: 4 Duplicates: 0 Warnings: 0MATCH句でテーブルtbl1内のcol2列とcol3列を検索対象として指定し、検索キーワードには 'OceanBase' を使用します。また、検索修飾子IN NATURAL LANGUAGE MODEを使用しているため、自然言語検索モードで検索が実行されます。
SELECT * FROM tbl1
WHERE MATCH (col2, col3) AGAINST ('OceanBase' IN NATURAL LANGUAGE MODE);
実行結果は次のとおりです:
+------+-----------+---------------------------------------------------------------------------------------------------------------------+
| col1 | col2 | col3 |
+------+-----------+---------------------------------------------------------------------------------------------------------------------+
| 2 | OceanBase | OceanBase Database is a native, enterprise-level distributed database developed independently by the OceanBase team |
+------+-----------+---------------------------------------------------------------------------------------------------------------------+
1 row in set