Skip to content

検索システム

背景

Qudenの検索システムは、クリップに関連する様々な情報(タイトル、概要、コメント、ステップ内のテキストなど)を横断的に検索し、迅速に必要なクリップを見つけることを目的としています。将来的には、LLM(Large Language Models)の情報源としても活用されることを目指しています。

システム概要

このシステムは、MongoDB Atlas の検索機能である MongoDB Atlas Search を利用して実装されています。中心となるのは items コレクションで、必要な情報を集約したビューを Atlas 上に作成し、そこに検索用のインデックスを設定しています。この検索用ビューは、Atlas Triggers を用いて各コレクションの更新時にリアルタイムで同期され、常に最新の状態を保持しています。

システムアーキテクチャ

基本的には下図のようにMongo Atlas Search内の機能を利用して検索インデックスの構築・更新、検索クエリの解析、クエリ結果のスコアリングなどを行なっています

Quden 検索システム アーキテクチャhttps://www.figma.com/file/bFLAOKw4nItP4UMkGOn0hT/Quden検索基盤ブレスト?type=whiteboard&node-id=48-352&t=bgtOUqo8TjUv1olk-4



各コンポーネントの役割

  • itemsSearchView collection
    • クリップ検索を行うための Materialized view
    • items コレクションを中心に、stepitems / comments などの情報が付加されている
  • itemsSearchView SearchIndex
    • 検索用のインデックス
  • Atlas triggers
    • items stepitems comments collection の変更をリアルタイムに検知し、Materialized viewを更新
  • NestJS(backend)
    • 検索ワードから $search クエリへ変換し、Atlas へクエリを投げる
    • 検索結果を整形し、フロントエンドに返す

MaterializedView と検索インデックスの同期方法など内部の詳細を知りたい方は、MongoDB Atlas Search のアーキテクチャを参考

開発環境の設定

MongoDB Atlas Search は local DB では使用できないため、Atlas 上で検索インデックスの作成・クエリを行う必要があります。 local 環境で再現するためには toruca-backend-core/src/config/configuration.ts を変更するなどして、staging の Mongo を参照するようにしてください

デプロイメントプロセス

backend / frontend は通常通り

Atlas Triggers, Search Index は Mongo Atlas のコンソール上で管理しているので、そちらで編集してください (本当は Terraform で管理したいところ)

Materialized View の作成は Migration Batch を使って行っています。 初回のみ行えば良い作業なので、基本的には再作成しなくても良いですが、必要な場合は toruca-backend-core/scripts/batch/20231212-create-items-search-view.ts を編集 & 再実行してください。2023年12月時点では冪等性が担保されるようにしてあります。

参考