2020年1月6日0件のコメントこんにちは、GMOアドマーケティングのK.Mです。最近は久しぶりにMySQLを使ってます。いえばMySQLといえば、バージョン5.7からInnoDBの全文検索機能に日本語パーサーが搭載されとても使いやすくなったと聞いていたので、本日はそれを試してみたいと思います。以前はサービスで本格的な全文検索をやりたいと思ったら、Elasticsearchなど専用の全文検索エンジンを立てたりとミドルウェア構成が一段リッチになるような印象もありましたが、もう少しお手軽に、既存RDBMSからSELECTしてくるくらいのイメージでスモールスタートしたいようなケースも結構ありそうです。いったときに検討できる一つの選択肢になるんじゃないかと思っています。既存テーブルを検索してみますMySQL5.7から日本語パーサーとしてN-gramとMeCabが使えます。N-gramの場合、デフォルトで有効になっているため特に準備など必要なく使い始めることができます。こんな感じのテーブルがあるとします。INDEXを貼ってみます。ngram;実践的にはここで、検索対象データを別の検索用テーブルへ抜き出して、ソーステーブルの更新をトリガーに検索用テーブルを更新するような構成にするのも良さそうです。更新が多いテーブル・カラムを検索対象としたいような場合は、ソーステーブルのパフォーマンスに悪影響を出さずに済み良さそうです。それでは検索してみます。MODEを使ってます。インデックスの内容を確認してみますさて、検索対象のテキストがどのようにパースされてインデックスに登録されているか知りたいときがあります。MeCabパーサー指定時などは知りたい機会が多そうです。INFORMATION_SCHEMA.INNODB_FT_INDEX_TABLE(およびINNODB_FT_INDEX_CACHE)に転置インデックスに関する情報が含まれており、これを参照することで確認できるようです。確認したい対象テーブルをあらかじめ構成変数innodb_ft_aux_tableにSETしておく必要があるようです。|+--------+--------------+-------------+-----------+--------+----------+このように、今回指定したN-gramパーサーのデフォルト値であるbi-gramでパースされていることが確認できます。|+------------------+-------+おわりに今回は、日本語パーサーが導入されたMySQL5.7の全文検索機能を試してみました。試せてない機能もまだまだたくさんありますが、肌感的には大変便利そうな感触を得ることができました。今後、サービスに全文検索機能を組み入れる機会などあれば検討できるように準備してみたいと思います。@gmoap_engineer本ブログで発信される情報は、各エンジニア個人の見解であり、弊社の公式見解ではありません。本ブログに掲載、引用等をしている商品またはサービス等の名称は、各社の商標または登録商標です。その他の事項について一切責任を負いかねます。発表する情報には注意を払っておりますが、公式発表、見解については、弊社WEBサイトおよびプレスリリースなどをご確認ください。GMOインターネットグループにおけるソーシャルメディア運用ポリシーについては次のページをご確認ください。本ブログに掲載のあるソフトウェアのダウンロードは自己責任で御願い致します。ソフトウェアのダウンロードの結果、ご利用者に何らかの損失・損害が生じたといえども、当社ではその責任を負いかねます。本ブログに掲載のあるソフトウェアを扱う際は、各ソフトウェアの公式リファレンスを参照のもとご使用下さい。ソフトウェアの実行の結果、ご利用者に何らかの損失・損害が生じたといえども、当社ではその責任を負いかねます。