Docs Menu
Docs Home
/ /

MongoDB 検索クエリを実行する

このガイドでは、 MongoDB Search 機能を使用して、ドキュメントに対して検索を学ぶことができます。PHPライブラリでは、集計ビルダを使用してMongoDB検索クエリを実行できます。

MongoDB Search の詳細については、「 MongoDB 検索するの概要」を参照してください。PHPライブラリのMongoDB検索するの実装は、クエリを実行するために内部的に $search 集計演算子を使用します。この演算子の詳細については、Atlas ドキュメントの $search 参照を参照してください。

注意

MongoDB ベクトル検索

MongoDBでベクトル埋め込みを検索するには、 MongoDB ベクトル検索 API を使用できます。この機能について詳しくは、MongoDB ベクトル検索クエリを実行するガイドを参照してください。

MongoDB 検索クエリを実行する前に、コレクションにMongoDB 検索インデックスを作成する必要があります。このインデックスタイプの作成の詳細については、MongoDB 検索インデックス ガイドを参照してください。

集計ビルダを使用してMongoDB 検索クエリを実行するには、次のクラスをアプリケーションにインポートします。

use MongoDB\Builder\Pipeline;
use MongoDB\Builder\Search;
use MongoDB\Builder\Stage;

集計パイプラインに $search ステージを作成するには、次のアクションを実行します。

  1. パイプラインステージを保存するには、Pipelineインスタンスを作成します。

  2. MongoDB 検索するステージを作成するには、Stage::search() メソッドを呼び出します。

  3. search() メソッドの本体内で、Search ビルダ クラスのメソッドを使用して、検索クエリの条件を作成します。

次のコードは、基本的なMongoDB検索クエリを作成するためのテンプレートを示しています。

$pipeline = new Pipeline(
Stage::search(
/* MongoDB Search query specifications
Search::compound(...) */
),
);

このセクションでは、集計ビルダを使用してさまざまなタイプのMongoDB 検索クエリを実行する方法を学びます。このセクションの例では、 sample_restaurants.restaurantsコレクションのサンプルデータを使用します。

2 つ以上の演算子を 1 つのクエリに結合するには、Search::compound() メソッドを使用します。このメソッドは、mustfilter などの句に対して名前付き引数を受け取ります。それぞれの句で、Search::text() メソッドを使用して、全文検索を実行する際に検索する文字列を指定します。

この例では、次の仕様を持つMongoDB検索クエリを実行します。

  • nameフィールドで文字列 "kitchen" を検索するための must 句を含みます

  • cuisine フィールドに "american" が含まれているドキュメントを高くランク付けするために should 句を含めます。

  • borough 値が結果で "Queens" となるドキュメントのみを含めるために filter フィールドを含めます

$pipeline = new Pipeline(
Stage::search(
Search::compound(
must: [
Search::text(
query: 'kitchen',
path: 'name',
),
],
should: [
Search::text(
query: 'american',
path: 'cuisine',
),
],
filter: [
Search::text(
query: 'Queens',
path: 'borough',
),
],
),
),
Stage::project(
borough: 1,
cuisine: 1,
name: 1,
),
Stage::limit(3),
);
$cursor = $collection->aggregate($pipeline);
foreach ($cursor as $doc) {
echo json_encode($doc), PHP_EOL;
}
{"_id":...,"borough":"Queens","cuisine":"American","name":"Kitchen Door"}
{"_id":...,"borough":"Queens","cuisine":"American","name":"Cc Kitchen"}
{"_id":...,"borough":"Queens","cuisine":"American","name":"Suite Kitchen"}
// Results truncated

PHP ライブラリは、コレクション内のドキュメントでオートコンプリート検索を実行するための Search::autocomplete() メソッドを提供します。

このタイプのMongoDB 検索クエリの詳細については、Atlas ドキュメントのオートコンプリート参照を参照してください。

注意

MongoDB 検索インデックスはオートコンプリートクエリ用に構成する必要があります。詳細を学ぶには、Atlas ドキュメントのオートコンプリート用にフィールドをインデックスする方法を参照してください。

次のコードは、nameフィールドで文字列 "Lucy" のMongoDB 検索するオートコンプリート クエリを実行します。

$pipeline = new Pipeline(
Stage::search(
Search::autocomplete(
query: 'Lucy',
path: 'name',
),
),
Stage::limit(3),
Stage::project(_id: 0, name: 1),
);
$cursor = $collection->aggregate($pipeline);
foreach ($cursor as $doc) {
echo json_encode($doc), PHP_EOL;
}
{"name":"Juicy Lucy"}
{"name":"Lucy'S Vietnamese Kitchen"}
{"name":"Lucy'S Cantina Royale"}
// Results Truncated

クエリをカスタマイズするために、次の任意のパラメーターを autocomplete() メソッドに渡すこともできます。

任意のパラメーター
説明
デフォルト値

fuzzy

ファジー検索とファジー検索オプションを有効にします

false

tokenOrder

トークンを検索する順序を指定します

'any'

これらのパラメーターの詳細については、Atlas ドキュメントの autocomplete 演算子リファレンスの「オプション」セクションを参照してください。

search() メソッドを使用して、さまざまなタイプのMongoDB 検索クエリを実行できます。ご希望のクエリに応じて、次の任意パラメータを search() に渡すことができます。

任意のパラメーター
タイプ
説明

index

string

使用するMongoDB検索インデックスの名前を指定します

highlight

array

元のコンテキストで検索タームを表示するためのハイライトオプションを指定します

concurrent

bool

専用の検索ノード上でセグメント間の検索クエリを並列化します

count

string

結果の数を取得するためのカウント オプションを指定します。

searchAfter

string

その点の直後から始まるドキュメントを返すための参照点を指定します。

searchBefore

string

その点の直前から始まるドキュメントを返すための参照点を指定します。

scoreDetails

bool

結果のスコアの詳細な内訳を検索するかどうかを指定します

sort

array

結果をソートするフィールドを指定します

returnStoredSource

bool

バックエンドデータベースでドキュメント全体の検索を実行するか、 MongoDB Search から直接保存されたソース フィールドのみを返すかを指定します

tracking

array

検索タームに関する分析情報を検索するための追跡オプションを指定します

これらのパラメータの詳細については、Atlas ドキュメントの $search 演算子参照の「フィールド」セクションを参照してください。

戻る

データベースコマンドの実行

項目一覧