Docs Menu

クエリ参照

Atlas Search クエリは集計パイプラインステージ の形式をとります。 Atlas Search には$search ステージと$searchMeta ステージがあり、いずれも$lookup サブパイプラインと$unionWith サブパイプラインを含むすべての クエリパイプラインの最初のステージである必要があります。これらのステージは、 クエリパイプライン内の他の集計パイプラインステージ と組み合わせて使用できます。

選択したパイプラインステージに基づいて、クエリは全文検索の検索結果または検索結果に関するメタデータを返します。

集計パイプライン ステージ
目的

全文検索の検索結果を返します。

検索結果に関するメタデータを返します。

Atlas Search はクエリ 演算子コレクション も備えています。これらツールは $search$searchMeta の集計パイプラインステージ内で使用できます。 Atlas Search 演算子を使用すると、Atlasクラスターのコレクションから関連データを検索して取得できます。コレクターは、メタデータの検索結果を表すドキュメントを返します。

Atlas Search 演算子を使用して、ターム、フレーズ、地理的形状とポイント、数値、類似ドキュメント、シノニム(同意語)などをクエリできます。

正規表現とワイルドカード式を使用して検索することもできます。 Atlas Search複合演算子を使用すると、 ステージ内で複数の演算子を組み合わせて、Atlas Search によって返されるドキュメントに$search 必要 ない 、または$search が存在する必要があるものに基づいて、データの複雑な検索とフィルタリングを実行できます。複合演算子は、 ステージ自体でドキュメントを一致させたりフィルタリングしたりする目的でも使用できます。 の後に$match $searchを実行する方法は、複合演算子を用いて$search を実行中よりパフォーマンスが低くなります。

演算子とコレクターの詳細については、「演算子とコレクター」を参照してください。

同じノード上のmongodmongot

クエリを実行する際、Atlas Search は構成済みの読み込み設定(read preference)を使用して、クエリを実行するノードを識別します。クエリはまず MongoDB プロセスに送られます。このプロセスは、レプリカセット クラスターの場合は mongod、シャーディングされたクラスターの場合は mongos です。

レプリカセット クラスターの場合、MongoDB プロセスは同じノード上のmongotにクエリをルーティングします。 シャーディングされたクラスターの場合、クラスター データはmongodインスタンス全体で分割されます。各mongotは、同じノード上にあるmongodのデータのみを認識するため、 特定のシャードを対象とする Atlas Search クエリは実行できません。 mongosはクエリをすべてのシャードに送り、これらをscatter-gatherパターンのクエリにします。 ゾーンを使用してシャーディングされたコレクションをクラスター内のシャードのサブセットにわたって分散する場合、Atlas Search はクエリしているコレクションのシャードを含むゾーンにクエリをルーティングして、次のシャードのみで$searchクエリを実行します。コレクションが配置されている。

Atlas Search は検索とスコアリングを実行し、一致する結果のドキュメント ID とその他の検索メタデータをmongodに返します。 次に、 mongodは一致する結果のクエリをドキュメント全体で暗黙的に実行し、その結果をクライアントに返します。 クエリで$search同時実行オプションを使用すると、Atlas Search はクエリ内並列処理を有効にします。 詳細については、「セグメント間でのクエリ実行の並列化 」を参照してください。

異なるノード上のmongodmongot

クエリは実行されると、 構成済みの読みこみ設定(read preference ) に基づいてまずmongodに送信されます。 mongodプロセスは、同一ノード上のロード バランサーを通じて検索クエリを転送します。その結果、 mongotプロセス全体にリクエストが分散されます。

Atlas Search mongotプロセスは検索とスコアリングを実行し、一致する結果のドキュメント ID とメタデータをmongodに返します。 次に、 mongodはドキュメント全体で一致する結果の検索を実行し、その結果をクライアントに返します。 クエリで$search同時実行オプションを使用すると、Atlas Search はクエリ内並列処理を有効にします。 詳細については、「セグメント間でのクエリ実行の並列化 」を参照してください。

Atlas Search は関連性ベースのスコアを結果セット内の各ドキュメントに関連付けます。関連性を基準にスコアリングすることで、スコアの高いものから低いものの順にドキュメントを返すことができます。スコアは、クエリ用語がドキュメントに頻繁に表示される場合は高く、クエリ用語がコレクション内の多数のドキュメントにわたり表示される場合は低くなります。Atlas Search では、boost、decay などのスコアの変更関数を使用することで、関連性ベースのデフォルト スコアをカスタマイズすることもできます。結果内のスコアをカスタマイズする方法の詳細については、「結果内のドキュメントのスコアリング」を参照してください。

その他の参照: ビデオで学ぶ

Atlas Search でクエリを検索、追跡する方法の概要については、こちらのビデオをご覧ください。このビデオでは、Atlas Search 演算子と、Atlas Search が結果内のドキュメントをスコア付けする方法について詳しく説明しています。

所要時間: 15 分

次のクライアントを使用して Atlas Search クエリを作成および実行できます。

mongotはエラーを返しませんが、 $searchクエリが次の場合には空の結果セットを返します。

  • 存在しないインデックスを参照します。クエリでインデックス名を指定しない場合、Atlas Search はデフォルトで default という名前のインデックスを使用します。 default という名前のインデックスがない場合、または指定したインデックスが存在しない場合、Atlas Search はエラーを返さず、空の結果セットを返します。 index オプションを使用して、名前で有効なインデックスを指定できます。

  • インデックスのないフィールドを指定します。 インデックスがないフィールドに対してクエリを実行した場合、Atlas Search はエラーを返さず、空の結果セットを返します。 pathパラメータの値としてインデックス付きフィールドのみを指定する必要があります。 コレクションのインデックス定義で動的マッピングを有効にすると、コレクション内のすべての動的にインデックス作成可能なフィールドが自動的にインデックス化されます。 詳しくは、動的マッピング を参照してください。

  • stringタイプとしてインデックスされていないフィールドパスでtext演算子を使用します。 フィールドがstring以外の Atlas Search フィールドタイプstringFacetautocompleteなど)としてインデックス付けされている場合、Atlas Search はエラーを返さず、空の結果セットを返します。 テキスト 演算子を使用してフィールドをクエリするには、 BSON データ型の値を持つフィールドを string としてインデックスする 必要 があります。string

{ $searchクエリが次の場合、 mongotPlanExecutorエラーを返します。

  • 誤ったデータ型としてインデックス付けされたフィールドを指定します。 この場合、 クエリを実行すると、Atlas Search は、誤ってインデックスが作成されたフィールドとその正しいデータ型を識別するエラー メッセージを返します。 例:

    PlanExecutor error during aggregation :: caused by :: Cannot facet on field "genres" because
    it was not indexed as a "stringFacet" field.

    たとえば、 stringnumber 、またはdateフィールドに対してファセットクエリを実行するには、それぞれstringFacetnumberdateなどの対応する Atlas Search フィールドタイプを使用してフィールドのインデックスを作成します。 。 詳細については、「サポートされているデータ型とサポートされていないデータ型 」を参照してください。