[+/-]
MATCH
(
col1
,col2
,...)
AGAINST (expr
[search_modifier
])
search_modifier:
{ IN BOOLEAN MODE | IN NATURAL LANGUAGE MODE | IN NATURAL
LANGUAGE MODE WITH QUERY EXPANSION | WITH QUERY EXPANSION }
MySQL は、次のようなフルテキストのインデックス設定および検索をサポートします。
MySQL の全文インデックスは、型
FULLTEXT
のインデックスです。
全文インデックスは
MyISAM
テーブルとのみ使用されており、CHAR
、VARCHAR
、または
TEXT
カラムのためにだけ作成されます。
FULLTEXT
インデックスの定義は、テーブルを作成するときに、CREATE
TABLE
ステートメントで提示することができるほか、ALTER
TABLE
または
CREATE INDEX
を使用してあとで付け加えることも可能です。
大きなデータセットに関しては、FULLTEXT
インデックスを持たないテーブルにロードし、そのあとでインデックスを作成するほうが、すでに
FULLTEXT
インデックスを持つテーブルにロードするよりも断然速く読み込めます。
全文検索は MATCH() ...
AGAINST
シンタックスを用いて行われます。MATCH()
は、検索用にカラムに名称をつける、カンマで区切られたリストを使用します。AGAINST
は検索する文字列と、実行する検索のタイプを示すオプションの修飾子を利用します。検索文字列は、変数やカラム名ではなく、リテラル文字列でなければなりません。全文検索には
3 種類あります :
ブール検索は、特別なクエリー言語の規則を使用した検索文字列を解釈します。文字列は検索の対象になる言葉を含みます。また、単語は整合行で提示または不提示にされなければならない、または、通常より高く、または低く加重するべき、等の条件を指定する演算子も含むことができます。「some」
や 「then」
のような一般的な単語はストップワードで、検索文字列にあってもマッチしません。IN
BOOLEAN MODE
修飾子はブール検索を特定します。詳細は
項7.8.2. 「ブール全文検索」 をご覧ください。
自然言語の検索は、検索文字列を人間の自然な言語でのフレーズ
(フリーテキストのフレーズ)
として解釈します。これには特別な演算子はありません。ストップワードリストは適用されます。また、行の
50%
以上にある言葉は常用語と判断され、検出はされません。全文検索は、IN
NATURAL LANGUAGE MODE
修飾子が与えられている、または修飾子がまったくない場合は、自然言語検索になります。
クエリー拡張検索は、自然言語検索が改変されたものです。自然言語検索を行うには、検索文字列が使用されます。そして、検索によって返されたもっとも関連性の強い行からの言葉が検索文字列に加えられ、再度検索されます。クエリーは
2
度目の検索からの行を返します。IN
NATURAL LANGUAGE MODE WITH QUERY EXPANSION
または
WITH QUERY EXPANSION
修飾子は、クエリー拡張検索を特定します。詳細は
項7.8.3. 「クエリー拡張を伴う全文検索」
をご覧ください。
IN NATURAL LANGUAGE MODE
および IN NATURAL LANGUAGE MODE WITH
QUERY EXPANSION
修飾子は、MySQL 5.1.7
から追加されました。
全文検索の制約は、項7.8.5. 「全文制限」 に挙げられています。