LoginSignup
6
8

More than 3 years have passed since last update.

MySQLでもできる! 全文検索のやり方と条件検索!

Posted at

はじめに

MySQLで、全文検索ができるって知ってましたか?
今回はMySQLでの全文検索のやり方について簡単に紹介していきます!!

【YouTube動画】 MySQL 全文検索 高度な検索のやり方
MySQL 全文検索 高度な検索のやり方

MySQLの全文検索

全文検索とは、複数の文章群から特定の文字列を検索することです。
全文検索として、grep型とindex型があります。

grep型は実行時に中身を走査する方式で、検索対象が大きくなると、速度が低下します。
MySQLでいうとLINKE句を使って、文字列を検索することに相当します。

index型はDB登録時にIndexを作成する方式で、メモリ消費が多い代わりに、高速に検索できます。
MySQLで使用する場合は、MATCH句やAGAINST句を使って、検索します。

全文検索の実行方法

以下のようにして、全文検索用のインデックスを作成できます。

CREATE FULLTEXT INDEX idx on articles(body);

実行するときは、MATCHで検索対象のカラムを決め、AGAINSTで条件を決めます。

SELECT id, title, body FROM articles WHERE MATCH(body) AGAINST ('TEST HOGE')

検索モード

AGAINST内で検索モードを指定することができます。
デフォルトでは、Natural Language Modeになります。

  • Natural Language Mode

デフォルトで適用されるモードで、OR検索のみを実行します。
ただ、完全一致ではないため、以下のような文字もヒットします。

「ありがとう」で検索 -> 「ありがとう」だけでなく、「あり」も検索される
  • Boolean Mode

AND, NOT, グルーピングなど高度な検索が可能になります。
実行時は以下のように指定します。

SELECT id, title, body FROM articles WHERE MATCH(body) AGAINST ('TEST +HOGE' IN BOOLEAN MODE)
  • Natural Language Mode with Query Expansion

1度 Natural Language Modeと同じように検索します。
1度目の結果で、該当する文字周辺にあった文字も記録します。
そして、周辺にあった文字も含めて検索し直すことで、関連語を表示したり、スペルミスを修正することができます。
ただ曖昧検索ができる反面、2度実行するので、結果表示が遅くなります。

演算子について (Boolean Mode)

Boolean Modeで使用できる演算子について詳しくみていきます。

何も演算子を付けない場合、OR検索になります。

AGAINST ('TEST HOGE' IN BOOLEAN MODE)

+を付けると、AND検索ができるようになります。

AGAINST ('+TEST +HOGE' IN BOOLEAN MODE)

NOT検索は-ででき、グルーピングは()で括ります。

AGAINST ('(TEST HOGE) -TE' IN BOOLEAN MODE)

完全一致をするには、""で括る必要があります。

AGAINST ('"HOGE"' IN BOOLEAN MODE)

まとめ

今回はMySQLの全文検索について紹介しました。
使い所は悩みますが、意外と簡単にできます!

MySQL編は一旦ここで終わりですが、他に何か紹介して欲しいことがあれば、ご連絡お願いします!

twitteryoutubeでのコメントもお待ちしています!

6
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
8