Docs Menu
Docs Home
/ /

MongoDB Search クエリの実行

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

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

注意

MongoDB ベクトル検索

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

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

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

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

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

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

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

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

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

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

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

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

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

  • 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 Search クエリの詳細については、Atlas ドキュメントの オートコンプリート参照を参照してください。

注意

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

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

$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 クエリを実行できます。ご希望のクエリに応じて、次の任意パラメータを search() に渡すことができます。

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

index

string

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

highlight

array

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

concurrent

bool

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

count

string

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

searchAfter

string

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

searchBefore

string

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

scoreDetails

bool

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

sort

array

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

returnStoredSource

bool

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

tracking

array

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

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

戻る

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

項目一覧