jumper

コラム

MySQLの全文検索

2018年08月27日
MySQLの全文検索

MySQLでもよく使われる検索方法といえばLIKE検索になります。

しかしこの検索方法は負荷が多く、検索速度でデメリットを感じることも多いものです。LIKE検索ではインデックスが使えないため、速度面だけでなく、利用についてはよく検討することが必要でした。
以前はMySQLでの全文検索はサードパーティーを利用することも検討のひとつでしたが、バージョン5.6からMySQLでも日本語全文検索が本格的に導入されました。MySQLの全文検索についてみてみましょう。

MySQLの全文検索について

MySQLで導入された全文検索はインデックスを活用し、文字単位で近似値順に値を取得する方法になります。マッチ率の高い順に検索されることで、あいまい検索にも対応できます。検索エンジンはN-gramになります。N-gramでは文字を順にインデックスしていきますので、高速で検索結果が取得できます。しかし、検索対象のボリュームが多くなるにしたがって精度が落ち、速度も低下するという欠点もあります。それでもLIKE検索とは比べるまでもなく、単語辞書も不要であることは大きなメリットです。

FULLTEXTインデックスの作成

実際に全文検索するためには対象となるフィールド(カラム)にFULLTEXTインデックスを設定します。FULLTEXT INDEXをテーブル定義で設定します。
その設定は非常に簡単で、

FULLTEXT INDEX カラム WITH PARSER ngram

のようにインデックスを作成します。
なお、基本設定では4文字以上を検索対象となっています。それ以下で検索したい場合はMySQLの設定で

innodb_ft_min_token_size=2

のように文字数を変更する必要があります。

MATCH...AGAINSTを使った検索

検索方法も簡単です。

SELECT * FROM テーブルWHERE match(対象フィールド) against(検索対象ワード)

このようにSQL文を発行します。
また、+演算子をつけることで必須文字を設定できます。またブランク(空白文字列)はORと同じ意味を持ちます。
例えば

against('A B' in boolean mode)

とするとAかBを検索できます。

実際の運用上はフレーズ検索を活用することが必要になり、対象の文字をどのように区切るかで結果に差が出てきます。
とはいえ、従来のMySQLではサードパーティーの検索エンジンを利用していたことを考えると、MySQL単独で全文検索が行える点は大きなメリットです。

まとめ

MySQLには以前より全文検索の機能はあったのですが、日本語に使えるほど実用性は高くありませんでした。そのためMroongaなどのような検索エンジンを使うことで全文検索を実現していました。しかし、サードパーティーのエンジンを使うのはやはり運用上のコストがかかります。MySQLのデフォルトエンジンで全文検索が可能になったことは大きな利点です。

MySQLでは現在バージョンが8になり、より機能が充実してきています。全文検索も5.6、5.7と確実にレベルアップしてきています。一時期はMariaがMySQLの後継と目されてきていましたが、根強いMySQL利用者も多く、必ずしもMySQLの代替が現れることもないかもしれません。今後もMySQLの動向には目が離せません。


ソフトエイジェンシー関連製品URL

https://www.softagency.co.jp/products/mysql

CONTACT

製品・サービスに関するご質問、お見積もり、お問い合わせなど、お気軽にご連絡ください。

 050-5505-5509

受付時間 9:30 - 12:00, 13:00 - 17:00
(土日祝および年末年始を除く)