クエリ参照
パイプライン ステージ
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
を実行中よりパフォーマンスが低くなります。
演算子とコレクターの詳細については、「演算子とコレクター」を参照してください。
クエリ処理
mongod
同じノードで とmongot
クエリを実行する際、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 はクエリ内並列処理を有効にします。 詳細については、「セグメント間でのクエリ実行の並列化 」を参照してください。mongod
異なるノードの とmongot
クエリは実行されると、 構成済みの読みこみ設定(read preference ) に基づいてまず
mongod
に送信されます。mongod
プロセスは、同一ノード上のロード バランサーを通じて検索クエリを転送します。その結果、mongot
プロセス全体にリクエストが分散されます。Atlas Search
mongot
プロセスは検索とスコアリングを実行し、一致する結果のドキュメント ID とメタデータをmongod
に返します。 次に、mongod
はドキュメント全体で一致する結果の検索を実行し、その結果をクライアントに返します。 クエリで$search
同時実行オプションを使用すると、Atlas Search はクエリ内並列処理を有効にします。 詳細については、「セグメント間でのクエリ実行の並列化 」を参照してください。
スコアリング
Atlas Search は関連性ベースのスコアを結果セット内の各ドキュメントに関連付けます。関連性を基準にスコアリングすることで、スコアの高いものから低いものの順にドキュメントを返すことができます。スコアは、クエリ用語がドキュメントに頻繁に表示される場合は高く、クエリ用語がコレクション内の多数のドキュメントにわたり表示される場合は低くなります。Atlas Search では、boost、decay などのスコアの変更関数を使用することで、関連性ベースのデフォルト スコアをカスタマイズすることもできます。結果内のスコアをカスタマイズする方法の詳細については、「結果内のドキュメントのスコアリング」を参照してください。
その他の参照: ビデオで学ぶ
サポートされているクライアント
次のクライアントを使用して Atlas Search クエリを作成および実行できます。
クエリのトラブルシューティング
空の結果セット
mongot
はエラーを返しませんが、 $search
クエリが次の場合には空の結果セットを返します。
存在しないインデックスを参照します。クエリでインデックス名を指定しない場合、Atlas Search はデフォルトで
default
という名前のインデックスを使用します。default
という名前のインデックスがない場合、または指定したインデックスが存在しない場合、Atlas Search はエラーを返さず、空の結果セットを返します。index
オプションを使用して、名前で有効なインデックスを指定できます。インデックスのないフィールドを指定します。 インデックスがないフィールドに対してクエリを実行した場合、Atlas Search はエラーを返さず、空の結果セットを返します。
path
パラメータの値としてインデックス付きフィールドのみを指定する必要があります。 コレクションのインデックス定義で動的マッピングを有効にすると、コレクション内のすべての動的にインデックス作成可能なフィールドが自動的にインデックス化されます。 詳しくは、動的マッピング を参照してください。string
タイプとしてインデックスされていないフィールドパスでtext
演算子を使用します。 フィールドがstring
以外の Atlas Search フィールドタイプstringFacet
やautocomplete
など)としてインデックス付けされている場合、Atlas Search はエラーを返さず、空の結果セットを返します。 テキスト 演算子を使用してフィールドをクエリするには、 BSON データ型の値を string としてインデックス化する 必要 があります。string
PlanExecutor
エラー
mongot
は、 $search
クエリが次の場合にPlanExecutor
エラーを返します。
誤ったデータ型としてインデックス付けされたフィールドを指定します。 この場合、 クエリを実行すると、Atlas Search は、誤ってインデックスが作成されたフィールドとその正しいデータ型を識別するエラー メッセージを返します。 例:
PlanExecutor error during aggregation :: caused by :: Cannot facet on field "genres" because it was not indexed as a "stringFacet" field. たとえば、
string
、number
、またはdate
フィールドに対してファセットクエリを実行するには、それぞれstringFacet
、number
、date
などの対応する Atlas Search フィールドタイプを使用してフィールドのインデックスを作成します。 。 詳細については、「サポートされているデータ型とサポートされていないデータ型 」を参照してください。