MATCH
(
col1
,col2
,...)
AGAINST (expr
[search_modifier
])
search_modifier:
{
IN NATURAL LANGUAGE MODE
| IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
| IN BOOLEAN MODE
| WITH QUERY EXPANSION
}
MySQL では、次のような全文インデックス設定および検索がサポートされています。
MySQL の全文インデックスは、型
FULLTEXT
のインデックスです。全文インデックスは、
InnoDB
またはMyISAM
テーブルでのみ使用でき、CHAR
、VARCHAR
、またはTEXT
カラムにのみ作成できます。FULLTEXT
インデックスの定義は、テーブルの作成時にCREATE TABLE
ステートメントで指定することも、あとでALTER TABLE
またはCREATE INDEX
を使用して追加することもできます。データセットが大きい場合は、
FULLTEXT
インデックスが付いていないテーブルにロードしてから、そのあとでインデックスを作成した方が、既存のFULLTEXT
インデックスが付いているテーブルにロードするよりも断然速いです。
全文検索は、MATCH() ...
AGAINST
構文を使用して実行されます。MATCH()
には、検索対象のカラム名をカンマで区切ったリストを指定します。AGAINST
には、検索する文字列と、実行する検索のタイプを示すオプションの修飾子を指定します。検索文字列は、クエリー評価時に定数である文字列値にする必要があります。たとえば、テーブルカラムは、行ごとに異なる可能性があるため除外されます。
全文検索には、次の 3 つの種類があります。
-
自然言語の検索では、検索文字列が人間の自然な言語でのフレーズ (フリーテキストのフレーズ) として解釈されます。特別な演算子はありません。ストップワードリストが適用されます。これらは、
InnoDB
検索インデックスの場合はinnodb_ft_enable_stopword
、innodb_ft_server_stopword_table
、およびinnodb_ft_user_stopword_table
、MyISAM
検索インデックスの場合はft_stopword_file
によって制御されます。詳細は、セクション12.9.4「全文ストップワード」を参照してください。IN NATURAL LANGUAGE MODE
修飾子が指定されている場合または修飾子がまったく指定されていない場合は、全文検索が自然言語検索になります。詳細は、セクション12.9.1「自然言語全文検索」を参照してください。 ブール検索では、特別なクエリー言語のルールを使用して検索文字列が解釈されます。文字列には、検索対象の単語が含まれます。また、一致する行に単語が存在しなければならない、または存在してはならないように、あるいは通常よりも単語の重みが高くまたは低くなるように、要件を指定する演算子を含めることもできます。特定の共通単語 (ストップワード) は、検索インデックスから省略され、検索文字列に存在しない場合は一致が行われません。
IN BOOLEAN MODE
修飾子は、ブール検索を指定します。詳細は、セクション12.9.2「ブール全文検索」を参照してください。クエリー拡張検索は、自然言語検索を改善したものです。自然言語検索を実行する際は、検索文字列が使用されます。その後、検索で返されたもっとも関連性の高い行からの単語が検索文字列に追加され、再度検索が実行されます。クエリーでは、2 回目の検索からの行が返されます。
IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION
またはWITH QUERY EXPANSION
修飾子は、クエリー拡張検索を指定します。詳細は、セクション12.9.3「クエリー拡張を使用した全文検索」を参照してください。
FULLTEXT
クエリーのパフォーマンスについては、セクション8.3.4「カラムインデックス」を参照してください。
InnoDB
FULLTEXT
インデックスの処理に関するより技術的な詳細は、セクション14.2.13.3「FULLTEXT インデックス」を参照してください。
全文検索上の制約については、セクション12.9.5「全文制限」に一覧表示されています。
myisam_ftdump
ユーティリティーは、MyISAM
全文インデックスの内容をダンプします。これは、全文クエリーのデバッグ時に役立つことがあります。セクション4.6.2「myisam_ftdump — 全文インデックス情報の表示」を参照してください。