もぐナビの検索をリニューアルしました
10月中旬に、もぐナビの検索をリニューアルしました。
イートスマートのサービスでは、データベースに主にPostgreSQLを利用しています。
これまで検索を行う場合は、PostgreSQLで全文検索を可能にするpg_bigmというモジュールを導入して利用してきました。
今回のリニューアルでは、pg_bigmからElasticsearch+Kuromojiへの移行を行いました。
リニューアルの背景
pg_bigmは名前の通り2-gram(バイグラム)という方法で全文検索を行います。今回のリニューアルでは、2-gramからKuromojiによる形態素解析を利用した全文検索へ変更しました。
2-gramと形態素解析はそれぞれ利点・欠点が挙げられます。今回のリニューアルでは、関係の無いキーワードでヒットすることを減らし検索の精度を上げるために形態素解析の導入を行いました。
もぐナビが扱う商品のメーカー・ブランドには、「ファミリーマート」「ファミマ」や「マクドナルド」「マック」「マクナル」のように複数の呼び方が存在するものがあります。
類義語による検索の実現も、今回のリニューアルで目指しました。
環境構築
今回はdockerを利用して環境を構築しました。
環境の構築には公式から提供されたものを利用しました。
これにKuromojiのインストール等の初期設定を行い、オリジナルのイメージを作成しました。
また、既存の辞書へ、メーカー・ブランド名を元に独自に追加も行いました。
課題
辞書のメンテナンス
日々新たな商品が発売されたりブランドが登場します。
これらは既存の辞書では適切に処理出来なくなる事が予想されるため、継続的な辞書のメンテナンスが必要になります。
これには別途集計している検索ログを活用し、ヒットしなかったキーワードの確認と適切なキーワードの登録を行う仕組みづくりに取り組みます。
ひらがな・カタカナによる検索
例えば「チョココロネ」の商品情報を検索するため「ちょこころね」と入力すると、「ちょこ」「ころね」ではなく「こころ」と分解されます。
これではユーザーは目的の商品を見つける事が出来ません。