検索結果の精度を向上させる方法とは?
検索結果の精度を向上させるには、次の機能のMongoDB Search サポートを使用します。
スコアのカスタマイズ
MongoDB Search は関連性に基づいて結果セット内の各ドキュメントにスコアを割り当て、最高スコアから最低スコアの順に結果を返します。詳しくは、結果のドキュメントにスコアを付ける を参照してください。
MongoDB Search クエリを実行するときに、結果内のドキュメントの関連性を調整して、最も関連するドキュメントがランク付けされ、結果の上位に返されるようにすることができます。
詳細については、「結果のドキュメントのスコアをカスタマイズする方法」を参照してください。
ハイブリッド検索
ハイブリッド検索は、全文検索とセマンティック検索を組み合わせて、同義語やコンテキストが類似する一致を、同じクエリ内の同じ条件に対する両方の検索方法の結果に含めることを保証します。
以下のシナリオではハイブリッド検索を使用します。
MongoDB Search (全文検索)を使用して、ドキュメント内およびコレクション内のドキュメント全体にキーワードが表示される頻度を測定し、関連性に基づいてキーワード クエリとドキュメントをランク付けします。
MongoDB ベクトル検索 (セマンティック検索)を使用して、セマンティックで類似したドキュメントを検索します。
両方の検索方法のスコアを組み合わせて、より正確で関連性の高い結果を取得します。
詳しくは、「ハイブリッド検索の実行方法」を参照してください。
シノニム(同意語)検索
同義語検索により、検索キーワードがドキュメント内に正確に含まれていない場合でも、クエリ結果に関連性の高い結果が返されるようになります。
シノニム検索を実行するときは、インデックスを作成してクエリ時に適用したシノニム マッピングコレクションが使用されます。
詳しくは、「MongoDB Search インデックスでのシノニム マッピングの定義」を参照してください。
検索内容を説明してください
MongoDB explain
は、クエリの実行方法と、特定のドキュメントが他のドキュメントよりも返される理由に関する情報を提供します。
クエリでexplain
を使用する理由は次のとおりです。
MongoDB Search が検索クエリのスコアと、結果内のドキュメントの関連性に影響する要因を計算する方法を理解します。
検索とランキングのパフォーマンスに基づいて、インデックスとクエリを改善してください。
詳細については、クエリプランと実行統計を取得する方法 を参照してください。
検索結果の関連性を向上させる方法とは?
MongoDB Search で関連性を調整すると、より関連性の高いドキュメントがMongoDB Search クエリ結果に返されるようになります。MongoDB Search 結果の関連性を最適化するには、以下の点を考慮します。
データを評価する
次の方法で検索で最適な結果を返すためにデータを構造化および形式化します。
ドキュメントのスキーマを確認して、どのフィールドがインデックスするかを決定します。多形データの場合、 MongoDB Search は、そのフィールドのインデックス定義で指定されたマッピングに対応するドキュメントのみをインデックス化し、そのフィールドのインデックス定義で指定されたデータ型ではない値を含むドキュメントを無視します。サポートされているフィールドタイプとフィールドマッピングの詳細については、フィールドマッピングの定義 を参照してください。
フィルタリングおよびソートに使用されるフィールドの整合性を確保するために、必要に応じてデータを正規化してください。例えば、日付と時刻の値を ISO-8601 などの標準形式に変換してください。
キー フィールド内の一般的なタームの頻度を分析して、適用するアナライザとトークン化戦略を決定します。一部のタームでは、ステミングやシノニム(同意語)マッピングなどの特別な処理が必要になる場合があります。MongoDB Search アナライザを使用してデータのトークンを作成する方法の詳細については、アナライザによるデータ処理 を参照してください。
データ量を分析してスケーリングを計画します。大規模なデータセットには、戦略的なインデックスの作成とパーティショニングが必要になる場合があります。
MongoDB Search インデックスを構成する
検索に最適な結果を返すようにMongoDB Searchインデックスを構成するには次の手順に従います。
インデックスする各フィールドに適切なアナライザを選択します。アナライザはフィルターと トークナイザ を組み合わせて、句読点、大文字、埋め込み単語などにおける差異を修正する索引可能なタームを作成します。組み込みアナライザ または カスタムアナライザ を選択できます。詳細については、アナライザによるデータ処理を参照してください。
ソース シノニムコレクションを作成し、 MongoDB Searchインデックスのシノニム ソースコレクションを参照シノニム マッピングを定義します。シノニム(同意語) を使用すると、検索の範囲が拡大し、結果内に関連するタームが返されます。詳しくは、「MongoDB Search インデックスでのシノニム マッピングの定義」を参照してください。
MongoDB Search クエリの定義
以下の方法で、最良の結果を返すクエリをビルドします。
適切な集計パイプライン ステージを選択します。たとえば、メタデータのみを検索する場合は、
$searchMeta
を使用します。詳細については、「パイプライン ステージ」を参照してください。関連する結果を取得するのに最適な演算子を選択します。たとえば、
must
、should
、mustnot
などの複数の句をクエリで組み合わせる場合は、複合演算子を検討してくだい。詳細については、「演算子とコレクター」を参照してください。並べ替え、スコアリング、グループ化などのMongoDB Search サポートを使用して、検索結果にさらにプロセスを適用します。
前提条件
チュートリアルを完了するには、以下が必要です。
MongoDBバージョン 6.0 以上の Atlas クラスター、またはMongoDBバージョン 8.2 以上のMongoDB自己管理型型クラスター。
クラスターにロードされたサンプルデータ 。
Project Data Access Admin
以上のアクセス権を持つプロジェクトへのアクセス権を付与して、 MongoDB Search インデックスを作成します。クラスターでクエリを実行するには、検索テスター、
mongosh
、Compass、またはサポートされているMongoDBドライバーを使用します。
注意
MongoDB Search クエリは、$search
集計ステージで任意のドライバーを使用して実行できます。これらのチュートリアルには、選択したクライアント向けの例が含まれています。詳細については、特定のチュートリアル ページを参照してください。
これらのチュートリアルは、Atlas CLI を使用して作成したローカル配置、またはオンプレミス配置で完了することもできます。詳しくは、ローカル Atlas 配置の作成 と 自己管理型配置の作成 を参照してください。