MySQL 8.0 リファレンスマニュアル


12.10 全文検索関数

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 テーブルでのみ使用でき、CHARVARCHAR、または TEXT カラムにのみ作成できます。

  • MySQL には、中国語、日本語および韓国語 (CJK) をサポートする組込みの全文 ngram パーサーと、日本語用のインストール可能な MeCab 全文パーサープラグインが用意されています。 解析の相違点については、セクション12.10.8「ngram 全文パーサー」セクション12.10.9「MeCab フルテキストパーサープラグイン」 で概説します。

  • FULLTEXT インデックスの定義は、テーブルの作成時に CREATE TABLE ステートメントで指定することも、あとで ALTER TABLE または CREATE INDEX を使用して追加することもできます。

  • データセットが大きい場合は、FULLTEXT インデックスが付いていないテーブルにロードしてから、そのあとでインデックスを作成した方が、既存のFULLTEXT インデックスが付いているテーブルにロードするよりも断然速いです。

全文検索は、MATCH() ... AGAINST 構文を使用して実行されます。 MATCH() には、検索対象のカラム名をカンマで区切ったリストを指定します。 AGAINST には、検索する文字列と、実行する検索のタイプを示すオプションの修飾子を指定します。 検索文字列は、クエリー評価時に定数である文字列値にする必要があります。 たとえば、テーブルカラムは、行ごとに異なる可能性があるため除外されます。

全文検索には、次の 3 つの種類があります。

  • 自然言語の検索では、検索文字列が人間の自然な言語でのフレーズ (フリーテキストのフレーズ) として解釈されます。 二重引用符 (") 文字を除き、特殊演算子はありません。 ストップワードリストが適用されます。 ストップワードリストの詳細は、セクション12.10.4「全文ストップワード」 を参照してください。

    IN NATURAL LANGUAGE MODE 修飾子が指定されている場合または修飾子がまったく指定されていない場合は、全文検索が自然言語検索になります。 詳細は、セクション12.10.1「自然言語全文検索」を参照してください。

  • ブール検索では、特別なクエリー言語のルールを使用して検索文字列が解釈されます。 文字列には、検索対象の単語が含まれます。 また、一致する行に単語が存在しなければならない、または存在してはならないように、あるいは通常よりも単語の重みが高くまたは低くなるように、要件を指定する演算子を含めることもできます。 特定の共通単語 (ストップワード) は、検索インデックスから省略され、検索文字列に存在しない場合は一致が行われません。 IN BOOLEAN MODE 修飾子は、ブール検索を指定します。 詳細は、セクション12.10.2「ブール全文検索」を参照してください。

  • クエリー拡張検索は、自然言語検索を改善したものです。 自然言語検索を実行する際は、検索文字列が使用されます。 その後、検索で返されたもっとも関連性の高い行からの単語が検索文字列に追加され、再度検索が実行されます。 クエリーでは、2 回目の検索からの行が返されます。 IN NATURAL LANGUAGE MODE WITH QUERY EXPANSION または WITH QUERY EXPANSION 修飾子は、クエリー拡張検索を指定します。 詳細は、セクション12.10.3「クエリー拡張を使用した全文検索」を参照してください。

FULLTEXT クエリーのパフォーマンスについては、セクション8.3.5「カラムインデックス」を参照してください。

InnoDB FULLTEXT インデックスの詳細は、セクション15.6.2.4「InnoDB FULLTEXT インデックス」 を参照してください。

全文検索上の制約については、セクション12.10.5「全文制限」に一覧表示されています。

myisam_ftdump ユーティリティーは、MyISAM 全文インデックスの内容をダンプします。 これは、全文クエリーのデバッグ時に役立つことがあります。 セクション4.6.3「myisam_ftdump — 全文インデックス情報の表示」を参照してください。


関連キーワード:  関数, 検索, 全文, インデックス, 空間, リファレンス, クエリー, セクション, 参照, 作成