はじめに
MySQLで、全文検索ができるって知ってましたか?
今回はMySQLでの全文検索のやり方について簡単に紹介していきます!!
【YouTube動画】 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編は一旦ここで終わりですが、他に何か紹介して欲しいことがあれば、ご連絡お願いします!