Docs Menu
Docs Home
/
MongoDB Atlas
/ /

Atlas Search クエリ パフォーマンス

項目一覧

  • クエリ演算子とクエリの複雑さを考慮する
  • $textまたは$regexの代わりに $searchを使用する
  • の前に$limit を使用する$facet
  • $matchの後に避ける$search
  • $groupの後に避ける$search
  • $countの後に避ける$search
  • $sortの後に避ける$search
  • $search以降は$skip$limitの使用を制限します
  • パフォーマンスの監視
  • 学び続ける

Atlas Search クエリの複雑さのレベルと使用される演算子のタイプは、データベースのパフォーマンスに影響を与える可能性があります。 複数の句を持つ高度に複雑なクエリは、 regex (正規表現) またはワイルドカード演算子を使用するクエリであるため、リソースを集中的に消費します。

クエリに複数のネストされた複合ステートメントが含まれている場合は、これらが冗長でないことを確認してください。 句がプログラムで追加される場合は、クエリに冗長な句が含まれないように、アプリケーションに ロジックを実装することを検討してください。 mongotmustshould句や 句など、 が実行するフィールドごとのスコア計算では実行時間が増加します。

Atlas Searchファセットコレクター を使用してメタデータを抽出し、検索結果とメタデータに対して複数のクエリを実行しないようにできます。 例については、「メタデータと検索結果の例 」を参照してください。

Atlas Search クエリは、スコアによってランク付けされます。 多数の結果を返すクエリは、結果セットのすべてのスコアを追跡する必要があるため、より計算負荷が高くなります。

MongoDB $textおよび$regexクエリに大きく依存しているアプリケーションの場合は、次の推奨事項を使用して、アプリケーションをリファクタリングするか、Atlas Search に移行するかを判断してください$search$search集計パイプライン ステージは、 MongoDB 演算子では使用できない機能、 または MongoDB 演算子では使用できても Atlas Search $searchとしてはパフォーマンスが低い機能を提供します。

次の表は、MongoDB $regex$text 、および Atlas Search $searchがアプリケーションの要件にどのように対処するかを示しています。

アプリケーションに必要な場合には、
使用...
理由は...
書込み保証を尊重するデータストア
書込み後に読み取りが行われるトランザクションには$regexを推奨します。 $searchの場合、書込み後の読み取りはまれにしか起きないはずです。
書込みパフォーマンスに最適化されたクラスター
Atlas Search インデックスによってクラスターの書込みパフォーマンスが低下することはありません。
大規模なデータセットの検索
Atlas Search は逆インデックスを使用するため、非常に大規模なドキュメントを高速で検索できます。
言語の認識
Atlas Search は、言語をトークン化(検索可能なタームの作成)し、ストップワードを削除し、発音区別符号を解釈して検索の関連性を向上させることができる多くの言語アナライザをサポートしています。 詳しくは、「多言語 Atlas Search クエリの実行方法 」を参照してください。
大文字と小文字を区別しないテキスト検索
結果テキストの強調表示
Atlas Searchを強調表示すると、結果内のドキュメントをコンテキストに応じて把握できます。これは自然言語クエリに不可欠です。
地理空間対応検索クエリ
MongoDB $regexと Atlas Search $searchは地理空間パラメータの処理方法が異なります。 MongoDB では、座標間の線は球面であるため、空の移動などの長距離の座標に適しています。 Atlas Search は、座標間で直線を形成し、短い距離に適している Lucene を使用します。 詳しくは、「 Atlas Search 複合 Geo JSON クエリの実行方法 」を参照してください。
オンプレミスまたはローカル配置
Atlas Search は、オンプレミスまたはローカル配置では使用できません。 Atlas Search は、Atlas クラスター上のデータでのみ使用できます。
検索クエリのオートコンプリート

文字のオートコンプリート(nGrams)の場合、Atlas Search には、左から右へのオートコンプリート用のedgeGrams 、空白がない言語のオートコンプリート用のnGrams 、ユーザーが正しく記述して読み取った言語のオートコンプリート用のrightEdgeGramが含まれています。から左へ。

単語のオートコンプリートwordGrams )用に、Atlas Search には ping トークン フィルター が含まれています。このフィルターは、隣接する単語を連結して 1 つのトークンを作成することで単語ベースのオートコンプリートをサポートします。

詳細については、 「 Atlas Search でオートコンプリートを使用する方法 」チュートリアルを参照してください。

テキスト入力でのファジー一致
Atlas Searchテキスト演算子とオートコンプリート演算子は、入力テキストでフィルタリングしてスペルのない単語(types)に対処するためのfuzzyマッチングをサポートしています。
複数の文字列に基づくフィルタリング
Atlas Search複合は、複数の文字列に基づくフィルタリングをサポートしています。
関連性スコアソート検索
Atlas Search は IBM 25アルゴリズム を使用します ドキュメントの検索関連性スコアを決定するため。乗算や因果関数などのboost式や、アナライザ、検索演算子、シノニム(同意語)による高度な構成をサポートしています。 詳しくは、「加重フィールドを使用して Atlas Search 複合クエリを実行する方法 」を参照してください。
部分インデックス
Atlas Search は部分インデックスをサポートしていません。
部分一致
Atlas Search のワイルドカード演算子とオートコンプリート演算子は部分一致クエリをサポートしています。 詳しくは、「部分一致 Atlas Search クエリの実行方法 」を参照してください。
配列の単一複合インデックス
Atlas Search のターム インデックスは 1 つの Atlas Search インデックスで交差されるため、配列のフィルタリングに複合インデックスが不要になります。
シノニム(同意語)検索
Atlas Search は別のコレクションで定義されたシノニムをサポートしています。このコレクションは、検索インデックスで参照して使用できます。 詳しくは、「 Atlas Searchでシノニムを使用する方法 」チュートリアルを参照してください。
カウントのファセット
Atlas Search は、テキスト条件に基づいてドキュメントの高速カウントを提供し、数値と日付のファセット検索もサポートしています。 詳しくは、「 Atlas Searchでファセットの使用方法 」を参照してください。
Extract metadata
Atlas Searchファセットコレクターはメタデータを返すため、メタデータを取得するために複数のクエリを実行する必要はありません。 詳しくは、「 Atlas Searchでファセットの使用方法 」チュートリアルを参照してください。
カスタムアナライザ
Atlas Search は、特定のインデックス要件に合わせてカスタムアナライザをサポートしています。 たとえば、カスタムアナライザを使用して、メールアドレスと HTTPまたはHTTPS URLのインデックスを作成して検索できます。 詳細については、「カスタム アナライザの定義 」および「 Atlas Search 発音区別符号を区別しないクエリの実行方法 」を参照してください。
フレーズまたは複数の単語を検索
Atlas Search のフレーズ演算子は、一連のタームの検索をサポートしています。
正規表現による検索
代わりに Atlas Search のオートコンプリート演算子を使用すると、Atlas Search のパフォーマンスが向上します。

Tip

以下も参照してください。

$limit集計パイプラインライン ステージの後に$facet 集計パイプラインステージを使用すると、クエリのパフォーマンスに悪影響を影響可能性があります。パフォーマンスのボトルネックを回避するには、$limit の 前に$facet を使用します。

{
{
"$search": {...}
},
{ "$limit": 20 },
{
"$facet": {
"results": [],
"totalCount": $$SEARCH_META
}
}
}

デモについては、次の例を参照してください。

$search ステージの後に $match 集計パイプライン ステージを使用すると、クエリ結果を大幅に低下させる可能性があります。可能であれば、必要なフィルタリングがすべて$searchステージで発生するように$searchクエリを設計して、 $matchステージが不要になります。

Atlas Search複合演算子は、複数のフィルタリング操作を必要とするクエリに役立ちます。 集計パイプラインで$matchステージを使用する必要がある場合は、 storedSourceオプション を使用して、 $match条件が必要なフィールドのみを保存することを検討してください。 次に、 returnStoredSourceオプションを使用して保存されたフィールドを検索できます。

Tip

以下も参照してください。

$group$search ステージの後に 集計パイプライン ステージを使用すると、クエリ結果が遅くなる可能性があります。$groupを使用してフィールド集計の基本カウントを取得する場合は、代わりに ステージ内で ファセット $searchMetaを使用することを推奨します。

$count$search ステージの後に 集計パイプライン ステージを使用すると、クエリ結果が遅くなる可能性があります。$countを使用してドキュメント数を取得する場合は、代わりに または $search$searchMetaステージ内で count を使用することをお勧めします。

$search ステージの後に $sort 集計パイプライン ステージを使用すると、クエリ結果を大幅に低下させる可能性があります。

クエリの結果が大きい場合、 $skip$limitを使用して結果を非連続的に取得すると遅くなる可能性があります。 最適なパフォーマンスを得るには、結果をページ分割するために$search searchAfterまたはsearchBeforeオプションを使用します。 詳細については、「結果のページ分割 」を参照してください。

ページ2からページ5に移動するなど、非連続的な結果を返すには、次のパイプライン ステージを使用できます。

  • $search searchAfter ページ2の最後の結果

  • $skip 3ページと4ページのドキュメント

  • $limit ページ5の結果

ここで、クエリは、 searchAfterを使用しなかった場合に4ページをスキップするのではなく、 2ページの結果のみをスキップするように最適化されます。 これのデモについては、「クエリ結果をページ分割する方法 」を参照してください。

Atlas クラスターを監視し、パフォーマンス統計を含むチャートを表示するには、Atlas Metricsタブを使用します。 これらのメトリクスは、Atlas Search のクエリとインデックスのビルドがクラスターのパフォーマンスにどのように影響するかを確認するのに役立ちます。 詳しくは、「 Atlas Search メトリクスの確認 」を参照してください。

AtlastriggerAtlasは、次の場合に アラート を することがあります。

  • Atlas Search はクラスターをクエリします。これは、クエリ ターゲティングメトリクスなど、Atlas のパフォーマンス メトリクスに影響を与える可能性があります。

    Atlas Searchプロセス(mongot )がAtlas Search インデックスを最新の状態に保つために使用する change streamtrigger カーソルは、クエリ ターゲット設定率に貢献し、比率が高い場合は アラート を できます。

  • Atlas Search は MongoDB からデータを複製します。これは、 getmore操作の回数など、Atlas で測定されるメトリクスに影響します。

注意

クラスターのリソースが限界に達している、または許容パフォーマンスの上限に近い場合は、Atlas Search 機能を実装する前に、より大きなクラスター階層へのアップグレードを検討してください。

Tip

以下も参照してください。

このビデオでは、 explain$search スコアの詳細を使用して Atlas Search 結果を理解し、反復処理し、改善する方法を学びます。

所要時間: 5分

戻る

Indexes