この記事を読んだ方がいい人
最小コストで全文検索可能なデータストアを構築したい人
LIKE検索の部分一致が限界を迎えた、もしくは迎えそうでElasticsearchとか怖い人
全文検索のことを少しだけ知っている人
この記事を読まない方がいい人
潤沢な資産の持ち主でフルマネージドなサービスも呼吸をするように課金できる人
最新の技術を使わないと体調が悪くなる人
mecabの導入方法を明確に知りたい人(この記事はうまくいかなかったお話です)
mecabとは
テキストのパーサーの一種です。
全文検索を可能にするには文章を意味のある単語ごとに分解してインデックスしてあげること必要です。
意味のある単語ごとに分解、サラッと言いましたがWEB技術のふるさとの英語圏では基本的に単語がスペース区切りなのです。
しかし日本語の場合そうはいきません。
そのため日本語に特化したパーサーが必要になります。
AWSで導入するには
mecabはMySQLの全文検索機能の拡張機能として提供されています。
まずここで一つ目の壁が現れます。
それはRDSを使えないこと。
mecabパーサーはMySQLに対応した機能ではあるものの追加機能としてのインストールが必要です。
RDSはここの自由度がないのでEC2インスタンスにMySQLをホストする必要があります。
mecabの設定
一応公式がMySQL8系にmecabをインストールする手順が記載されています。
ただここで問題が発生しました。
MySQLのサーバー上にインストールされているmecabをおMySQLのプラグインとしてインストールする必要があります。
mysql>INSTALL PLUGIN mecab SONAME 'libmecab.so';
Can't find symbol '_mysql_plugin_interface_version_'
エラー原因の考察
AWSでEC2にMySQLを直接インストール、Dockerコンテナ上にインストール、ローカルでDockerコンテナ上にインストールいくつかのパターンを試してみましたが、
EC2上のCentOSに直接インストールした場合のみインストールが成功しました。
ただローカルのDocker環境ではどうやってもインストールが失敗します。
以下の情報にはローカルとEC2環境では一切差分がありませんでした。
- mecabrc(パーサーの構成ファイル)
- mecab-ipadic(辞書ファイル)の中の内容
- mecab-devel(辞書ファイルのバイナリ)
- mecabインストール場所(
/usr/local/bin/mecab
) - MySQLのbasedir(
/usr/
)
バイナリを扱っているためOS起因の挙動の違いかなという予測で一旦調査はストップしました。
というのもここ最近メンテナンスはされていないようなのであまり期待してもいかがなものかという結論です。
まとめ
理論上導入できるであろうという仮説でしばらく粘ってみましたが解決には至りませんでした。
次にローコストなのはOSSのElasticsearchをEC2にホストすることなのかなと思います。