この度、日本語に特化した全文検索エンジン「Mujo」をリリースしました。(製品概要)
コンテナで起動できるほどコンパクトで低レイテンシーな全文検索エンジンです。
Mujoというネーミングは学生の頃に習った諸行無常の”無常”から着想しています。
マスターデータが変わるタイミングでコンテナを作り直すという行為は、祇園精舎の鐘の声が聞こえてくるようですね(個人の感想です。そしてブラウザを閉じるのはお待ちください!)
以下のデモで住所の一部を入力してみてください。(例えば、”北海道平和”などと入力)
スマホのキーボードが出てこない場合はこちら。
日本郵便の郵便番号データを元に、12万5千件程度の住所データでインデックスを作成しており、テキストフィールドに入力された内容を形態素解析して検索しています。
このデモ用のアプリケーションは、以下の図の通り、Amazon LightsailのMicroコンテナサービスを利用して稼働しています。

MujoはgRPCでクライアントと通信をします。
gRPCにすることで、通信に係るオーバーヘッドを小さく抑えられるというのが大きな理由です。
このデモは、住所の入力部分をFlutter Webで作成しており、MujoとgRPCで直接コミュニケーションを取ることはできないため、Envoyをリバースプロキシとして配置しています。
例えば、アプリケーションサーバーのバックエンドにMujoを配置する場合は、gRPCで直接通信をすることができますので、通信に係るオーバーヘッドはほとんど無視できるレベルですし、gRPCならではのストリーム方式による検索も提供しています(後述)。
このデモのようなデータ量と計算リソースでも、Mujo内部の検索処理は、遅くとも数十ミリ秒で完了していますし、サジェストもそれほどストレスがなく返ってくるのではないでしょうか。
長くなりそうですので、製品の特徴をまとめます。
- 軽量且つ低レイテンシーな形態素解析型全文検索エンジン
- 初期データはコンテナのエントリーポイントでTSVあるいはCSVファイルを指定します
- ユーザー辞書をエントリーポイントで指定することも可能です
- コンテナを作り直すことで、壊れてもすぐに新しいデータで検索が始められます
- インデックスは永続化可能なボリュームに出力することもできます
- コンテナ起動中でもユーザー辞書とレコードの追加はできます(次回コンテナイメージをビルドするときは、その差分を含めてください)
- Protocol Bufferコンパイラーが提供されていれば、どのプログラム言語とも通信可能です
- SSLの双方向認証と通信の暗号化をサポートしています
- 全文検索エンジンにありがちないわゆるディープページングの遅延も解消
- gRPCのストリームによって、複数の検索を一回で要求し、検索が終わったタイミングでコールバックを受けることもできます
- 検索条件とページ数を指定して、ストリームで受信することもできます
- ・・・などなど
例えばネットスーパーなどでは、取り扱う商品が数万件程度でしょうから、検索一覧ページを構成するデータを全てMujoに格納してしまっても良いですし、電子帳簿から抽出したテキストをMujoにインデックシングすることで、利用者に自然言語による検索機能を提供することもできるでしょう。
価格、製品の詳細に関するお問い合わせは、弊社ホームページにてお受けしております。