Docs Menu
Docs Home
/
Atlas
/ /

クエリ参照

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

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

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

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

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

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

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

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

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

mongod 同じノードで とmongot

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

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

MongoDB Search は検索とスコアリングを実行し、一致する結果のドキュメントID とその他の検索メタデータを mongod に返します。次に、mongod は一致する結果のクエリをドキュメント全体で暗黙的に実行し、その結果をクライアントに返します。

mongod 異なるノードの とmongot

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

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

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

Tip

ビデオで学ぶ

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

所要時間: 15 分

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

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

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

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

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

mongot は、 $searchクエリが次の場合にPlanExecutorエラーを返します。

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

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

    例、 facetstringnumber、 、またはdate フィールドに対して (MongoDB Search 演算子)クエリを実行するには、stringFacetnumber 、 などの対応するMongoDB Searchフィールドタイプを使用してフィールドのインデックスを作成します。それぞれ とdate です。詳細については、サポートされているデータ型とサポートされていないデータ型 を参照してください。

戻る

インデックスパーティション

項目一覧