Atlas Searchでのファセットの使用方法
このチュートリアルでは、{3 stringsample_mflix.movies
コレクション内の 、日付、数値フィールドに ファセット定義 を使用してインデックスを作成する方法について説明します。string フィールドの値でグループ化され、日付フィールドと数値フィールドの範囲でグループ化された結果をこれらのフィールドに対して Atlas Search クエリを実行する方法を示します。これらの各グループのカウントを含む。 次の手順が必要です。
sample_mflix.movies
コレクションのgenres
、released
、year
フィールドにファセット定義を使用して Atlas Search インデックスを設定します。sample_mflix.movies
コレクションのreleased
フィールドに対して Atlas Search クエリを実行し、genres
フィールドの値でグループ化され、year
フィールドの範囲でグループ化された結果を取得します。
Atlas Search インデックスを作成するには、プロジェクトに対するProject Data Access Admin
以上のアクセス権が必要です。
前提条件
これらのチュートリアルを完了するには、 Atlas Search チュートリアルページに記載されている前提条件に加えて、次のいずれかのバージョンを実行している Atlas クラスターが必要です。
MongoDB 5.0.4+
MongoDB 6.0+
MongoDB 7.0+
ファセットの Atlas Search インデックスの作成
このセクションでは、 sample_mflix.movies
コレクションのgenres
、 year
、およびreleased
フィールドに Atlas Search インデックスを作成します。
Atlas Atlasで、プロジェクトの {0 ページにGoします。GoClusters
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。
[ クラスター]ページが表示されます。
インデックスの設定を開始してください。
ページで次の選択を行い、Next をクリックしてください。
Search Type | Atlas Search のインデックスタイプを選択します。 |
Index Name and Data Source | 以下の情報を指定してください。
|
Configuration Method | For a guided experience, select Visual Editor. To edit the raw index definition, select JSON Editor. |
インデックスの定義を指定します。
動的マッピングまたは静的マッピングを使用する Atlas Search インデックスを作成できます。 動的マッピングと静的マッピングについて詳しくは、「静的マッピングと動的マッピング 」を参照してください。
次のインデックス定義では、genres
フィールドをstringFacet
タイプとして静的にインデックス化し、 movies
コレクション内の各ドキュメントでサポートされているタイプの他のフィールドを動的にインデックス化します。 Atlas SearchVisual Editor または Atlas SearchJSON Editor を使用して、Atlas ユーザー インターフェースで Atlas Search を使用して、インデックスを作成できます。
[Next をクリックし、[Review Your Index] をクリックします。
[Field Mappings] セクションの下の [Add Field Mapping] をクリックします。
[Customzed COnfiguration をクリックし、ドロップダウンから以下を選択します。
Field Name
genres
Data Type
StringFacet
[Add をクリックし、[Save Changes] をクリックします。
[Next] をクリックします。
インデックスの定義を確認します。
インデックス定義は、次のようになります。
{ "mappings": { "dynamic": true, "fields": { "genres": { "type": "stringFacet" } } } } [Next] をクリックします。
コレクションを検索
➤ [言語の選択]ドロップダウン メニューを使用して、このセクション内の例の言語を設定します。
ファセットは、$search
および$searchMeta
ステージを使用するクエリで使用できます。このセクションでは、Atlas クラスターに接続し、$searchMeta
または $search
ステージを使用して sample_mflix.movies
コレクションに対してサンプルクエリを実行し、genre
フィールドと year
フィールドをバケットにグループ化します。パフォーマンスを最適化するには、
facet
メタデータのみが必要な場合は、$searchMeta
ステージを使用してください。クエリ結果と
facet
メタデータの両方を検索する場合は、$search
ステージを使用してください。
AtlasGoClustersAtlas で、プロジェクトの ページにGoします。
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。
[ Clusters (クラスター) ] ページが表示されます。
インデックス付きフィールドに対して Atlas Search クエリを実行します。
クエリを実行するには、次のクエリをコピーしてQuery Editorに貼り付け、[ Searchをクリックします。
次のクエリは、1921 年 11 月 11 日前後にリリースされた映画を検索します。 origin
から約 3 か月のpivot
の距離を指定します。 genres
year
フィールドと フィールドのメタデータをリクエストします。クエリは、次のカウントを要求します。
genres
string 配列フィールド内の各ジャンルの映画の数1910 年から 1939 年までの映画の本数
[ { "$searchMeta": { "index": "facet-tutorial", "facet": { "operator": { "near": { "path": "released", "origin": ISODate("1921-11-01T00:00:00.000+00:00"), "pivot": 7776000000 } }, "facets": { "genresFacet": { "type": "string", "path": "genres" }, "yearFacet" : { "type" : "number", "path" : "year", "boundaries" : [1910,1920,1930,1940] } } } } } ]
クエリ結果を展開します。
Search Testerでは、結果内のフィールドのすべての値が表示されない場合があります。 結果内のフィールドのすべての値を表示するには、フィールドを展開します。
Atlas Search によって、 ページに次の結果が表示されます。
count: Object lowerBound: 20878 facet: Object genresFacet: Object buckets: Array (10) 0: Object _id: "Drama" count: 12149 1: Object _id: "Comedy" count: 6436 2: Object _id: "Romance" count: 3274 3: Object _id: "Crime" count: 2429 4: Object _id: "Thriller" count: 2400 5: Object _id: "Action" count: 2349 6: Object _id: "Adventure" count: 1876 7: Object _id: "Documentary" count: 1755 8: Object _id: "Horror" count: 1432 9: Object _id: "Biography" count: 1244 yearFacet: Object buckets: Array (3) 0: Object _id: 1910 count: 14 1: Object _id: 1920 count: 47 2: Object _id: 1930 count: 238
mongosh
内のクラスターに接続します。
ターミナル ウィンドウでmongosh
を開き、クラスターに接続します。 接続の詳細な手順については、「 mongosh
経由での接続 」を参照してください。
sample_mflix
データベースを使用します。
mongosh
プロンプトで次のコマンドを実行します。
use sample_mflix
ジャンルと年 フィールドをバケットにグループ化する Atlas Search ファセット クエリを実行します。
サンプルクエリでは、次の要素を使用してコレクションをクエリします。
に近いでは、1921 年 11 月 11 日から約 3 か月間に
origin
からのpivot
の距離でリリースされた映画を検索しますfacets
genres
string 配列フィールドの各ジャンルの映画の数と、 1910から1939までの 年間の映画の数をリクエストします
このクエリは、$searchMeta
または $search
を使用して、SEARCH_META
集計変数を用いて実行できます。
MongoDB Compass のクラスターに接続します。
MongoDB Compass を開き、クラスターに接続します。 接続の詳細な手順については、「 Compass 経由での接続 」を参照してください。
ジャンルと年 フィールドをバケットにグループ化する Atlas Search ファセット クエリを実行します。
クエリでは、次のsearchMeta
演算子句を使用します。
に近いでは、1921 年 11 月 11 日から約 3 か月間に
origin
からのpivot
の距離でリリースされた映画を検索しますfacets
genres
string 配列フィールドの各ジャンルの映画の数と、 1910から1939までの 年間の映画の数をリクエストします
MongoDB Compass でこのクエリを実行するには:
[Aggregations] タブをクリックします。
Select...をクリックし、ドロップダウンからステージを選択し、そのステージのクエリを追加して、次の各パイプライン ステージを構成します。 ステージを追加するには、 Add Stageをクリックします。
このクエリは、
$searchMeta
または$search
を使用して、SEARCH_META
集計変数を用いて実行できます。
Auto Previewを有効にした場合、MongoDB Compass は$set
パイプライン ステージの横に次のドキュメントを表示します。
count: Object lowerBound: 20878 facet: Object genresFacet: Object buckets: Array (10) 0: Object _id: "Drama" count: 12149 1: Object _id: "Comedy" count: 6436 2: Object _id: "Romance" count: 3274 3: Object _id: "Crime" count: 2429 4: Object _id: "Thriller" count: 2400 5: Object _id: "Action" count: 2349 6: Object _id: "Adventure" count: 1876 7: Object _id: "Documentary" count: 1755 8: Object _id: "Horror" count: 1432 9: Object _id: "Biography" count: 1244 yearFacet: Object buckets: Array (3) 0: Object _id: 1910 count: 14 1: Object _id: 1920 count: 47 2: Object _id: 1930 count: 238
Program.cs
ファイルにクエリを作成します。
Program.cs
ファイルの内容を、次のコードで置き換えます。サンプルクエリでは、次の要素を使用してコレクションをクエリします。
に近いでは、1921 年 11 月 11 日から約 3 か月間に
origin
からのpivot
の距離でリリースされた映画を検索しますfacets
genres
string 配列フィールドの各ジャンルの映画の数と、 1910から1939までの 年間の映画の数をリクエストします
このクエリは、
$searchMeta
または$search
を使用して、SEARCH_META
集計変数を用いて実行できます。サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。
Program.cs
ファイルをコンパイルして実行します。
dotnet run facet-query-example.csproj
{ "meta" : { "count" : { "lowerBound" : 20878 }, "facet" : { "genresFacet" : { "buckets" : [ { "_id" : "Drama", "count" : 12149 }, { "_id" : "Comedy", "count" : 6436 }, { "_id" : "Romance", "count" : 3274 }, { "_id" : "Crime", "count" : 2429 }, { "_id" : "Thriller", "count" : 2400 }, { "_id" : "Action", "count" : 2349 }, { "_id" : "Adventure", "count" : 1876 }, { "_id" : "Documentary", "count" : 1755 }, { "_id" : "Horror", "count" : 1432 }, { "_id" : "Biography", "count" : 1244 } ] }, "yearFacet" : { "buckets" : [ { "_id" : 1910, "count" : 14 }, { "_id" : 1920, "count" : 47 }, { "_id" : 1930, "count" : 238 } ] } } } }
ジャンルと年 フィールドをバケットにグループ化する Atlas Search ファセット クエリを実行します。
facet-query.go
という名前のファイルを作成します。次のコードをコピーして、
facet-query.go
ファイルに貼り付けます。このコード例では、次のタスクを実行します。
mongodb
パッケージと依存関係をインポートします。Atlas クラスターへの接続を確立します。
次の searchMeta 句を使用して、 コレクションをクエリします。
に近いでは、1921 年 11 月 11 日から約 3 か月間に
origin
からのpivot
の距離でリリースされた映画を検索しますfacets
genres
string 配列フィールドの各ジャンルの映画の数と、 1910から1939までの 年間の映画の数をリクエストします
カーソルを反復処理して、クエリに一致するドキュメントを出力します。
このクエリは、
$searchMeta
または$search
を使用して、SEARCH_META
集計変数を用いて実行できます。サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。次のコマンドを実行して、コレクションをクエリします。
go run facet-query.go [ {count [ {lowerBound 20878} ]} {facet [ {genresFacet [ {buckets [ [{_id Drama} {count 12149}] [{_id Comedy} {count 6436}] [{_id Romance} {count 3274}] [{_id Crime} {count 2429}] [{_id Thriller} {count 2400}] [{_id Action} {count 2349}] [{_id Adventure} {count 1876}] [{_id Documentary} {count 1755}] [{_id Horror} {count 1432}] [{_id Biography} {count 1244}] ]} ]} {yearFacet [ {buckets [ [{_id 1910} {count 14}] [{_id 1920} {count 47}] [{_id 1930} {count 238}] ]} ]} ]} ]
ジャンルと年 フィールドをバケットにグループ化する Atlas Search ファセット クエリを実行します。
FacetQuery.java
という名前のファイルを作成します。次のコードをコピーして、
FacetQuery.java
ファイルに貼り付けます。このコード例では、次のタスクを実行します。
mongodb
パッケージと依存関係をインポートします。Atlas クラスターへの接続を確立します。
次の searchMeta 句を使用して、 コレクションをクエリします。
に近いでは、1921 年 11 月 11 日から約 3 か月間に
origin
からのpivot
の距離でリリースされた映画を検索しますfacets
genres
string 配列フィールドの各ジャンルの映画の数と、 1910から1939までの 年間の映画の数をリクエストします
カーソルを反復処理して、クエリに一致するドキュメントを出力します。
このクエリは、
$searchMeta
または$search
を使用して、SEARCH_META
集計変数を用いて実行できます。注意
Maven 環境でサンプル コードを実行するには、 ファイルのインポート ステートメントの上に以下を追加します。
package com.mongodb.drivers; サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。FacetQuery.java
ファイルをコンパイルして実行します。javac FacetQuery.java java FacetQuery {meta: { count: { lowerBound: Long('20878') }, facet: { genresFacet: { buckets: [ { _id: 'Drama', count: Long('12149') }, { _id: 'Comedy', count: Long('6436') }, { _id: 'Romance', count: Long('3274') }, { _id: 'Crime', count: Long('2429') }, { _id: 'Thriller', count: Long('2400') }, { _id: 'Action', count: Long('2349') }, { _id: 'Adventure', count: Long('1876') }, { _id: 'Documentary', count: Long('1755') }, { _id: 'Horror', count: Long('1432') }, { _id: 'Biography', count: Long('1244') } ] }, yearFacet: { buckets: [ { _id: 1910, count: Long('14') }, { _id: 1920, count: Long('47') }, { _id: 1930, count: Long('238') } ] } } }}
ジャンルと年 フィールドをバケットにグループ化する Atlas Search ファセット クエリを実行します。
FacetQuery.kt
という名前のファイルを作成します。次のコードをコピーして、
FacetQuery.kt
ファイルに貼り付けます。このコード例では、次のタスクを実行します。
mongodb
パッケージと依存関係をインポートします。Atlas クラスターへの接続を確立します。
次の項目を使用して、コレクションをクエリします。
に近いでは、1921 年 11 月 11 日から約 3 か月間に
origin
からのpivot
の距離でリリースされた映画を検索しますfacets
genres
string 配列フィールドの各ジャンルの映画の数と、 1910から1939までの 年間の映画の数をリクエストします
クエリに一致するドキュメントを
AggregateFlow
インスタンスから出力します。
このクエリは、
$searchMeta
または$search
を使用して、SEARCH_META
集計変数を用いて実行できます。サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。FacetQuery.kt
ファイルを実行します。IDE で
FacetQuery.kt
プログラムを実行すると、次の結果が出力されます。Document{{ count=Document{{lowerBound=20878}}, facet=Document{{ genresFacet=Document{{ buckets=[ Document{{_id=Drama, count=12149}}, Document{{_id=Comedy, count=6436}}, Document{{_id=Romance, count=3274}}, Document{{_id=Crime, count=2429}}, Document{{_id=Thriller, count=2400}}, Document{{_id=Action, count=2349}}, Document{{_id=Adventure, count=1876}}, Document{{_id=Documentary, count=1755}}, Document{{_id=Horror, count=1432}}, Document{{_id=Biography, count=1244}} ] }}, yearFacet=Document{{ buckets=[ Document{{_id=1910, count=14}}, Document{{_id=1920, count=47}}, Document{{_id=1930, count=238}} ] }} }} }}
ジャンルと年 フィールドをバケットにグループ化する Atlas Search ファセット クエリを実行します。
facet-query.js
という名前のファイルを作成します。次のコードをコピーして、
facet-query.js
ファイルに貼り付けます。このコード例では、次のタスクを実行します。
MongoDB の Node.js ドライバーである
mongodb
をインポートします。Atlas クラスターへの接続を確立するための
MongoClient
クラスのインスタンスを作成します。次の searchMeta 句を使用して、 コレクションをクエリします。
に近いでは、1921 年 11 月 11 日から約 3 か月間に
origin
からのpivot
の距離でリリースされた映画を検索しますfacets
genres
string 配列フィールドの各ジャンルの映画の数と、 1910から1939までの 年間の映画の数をリクエストします
カーソルを反復処理して、クエリに一致するドキュメントを出力します。
このクエリは、
$searchMeta
または$search
を使用して、SEARCH_META
集計変数を用いて実行できます。サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。次のコマンドを実行して、コレクションをクエリします。
node facet-query.js '{ "meta":{ "count":{"lowerBound":20878}, "facet":{ "genresFacet":{ "buckets":[ {"_id":"Drama","count":12149}, {"_id":"Comedy","count":6436}, {"_id":"Romance","count":3274}, {"_id":"Crime","count":2429}, {"_id":"Thriller","count":2400}, {"_id":"Action","count":2349}, {"_id":"Adventure","count":1876}, {"_id":"Documentary","count":1755}, {"_id":"Horror","count":1432}, {"_id":"Biography","count":1244} ] }, "yearFacet":{ "buckets":[ {"_id":1910,"count":14}, {"_id":1920,"count":47}, {"_id":1930,"count":238} ] } } } }'
ジャンルと年 フィールドをバケットにグループ化する Atlas Search ファセット クエリを実行します。
facet-query.py
という名前のファイルを作成します。touch facet-query.py 次のコードをコピーして、
facet-query.py
ファイルに貼り付けます。次のコード例では、次を行います。
pymongo
、MongoDB の Python ドライバー、およびDNSシード リスト接続文字列を使用してpymongo
をAtlas
に接続するために必要なdns
モジュールをインポートします。Atlas クラスターへの接続を確立するための
MongoClient
クラスのインスタンスを作成します。次の項目を使用して、コレクションをクエリします。
に近いでは、1921 年 11 月 11 日から約 3 か月間に
origin
からのpivot
の距離でリリースされた映画を検索しますfacets
genres
string 配列フィールドの各ジャンルの映画の数と、 1910から1939までの 年間の映画の数をリクエストします
カーソルを反復処理して、クエリに一致するドキュメントを出力します。
このクエリは、
$searchMeta
または$search
を使用して、SEARCH_META
集計変数を用いて実行できます。サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。次のコマンドを実行して、コレクションをクエリします。
python facet-query.py { 'meta': { 'count': {'lowerBound': 20878}, 'facet': { 'genresFacet': { 'buckets': [ {'_id': 'Drama', 'count': 12149}, {'_id': 'Comedy', 'count': 6436}, {'_id': 'Romance', 'count': 3274}, {'_id': 'Crime', 'count': 2429}, {'_id': 'Thriller', 'count': 2400}, {'_id': 'Action', 'count': 2349}, {'_id': 'Adventure', 'count': 1876}, {'_id': 'Documentary', 'count': 1755}, {'_id': 'Horror', 'count': 1432}, {'_id': 'Biography', 'count': 1244} ] }, 'yearFacet': { 'buckets': [ {'_id': 1910, 'count': 14}, {'_id': 1920, 'count': 47}, {'_id': 1930, 'count': 238} ] } } } }
結果には、2 種類のファセット検索のメタデータ結果が表示されます。 genresFacet
ドキュメントには各ジャンルの映画の数が表示され、 yearFacet
ドキュメントにはその境界内の映画の数が表示されます。
1910
:1910
バケットの下限値を含む1920
:1910
バケットの 排他的上限であり、1920
バケットの下限1930
:1920
バケットの 排他的上限であり、1930
バケットの下限
学び続ける
Atlas Search のファセットについての詳細は、コースまたはビデオでご覧ください。
コースで学ぶ
Atlas Search でファセットの使用の詳細については、 MongoDB University の Intro MongoDB コースユニット9を受講してください。 1.5時間のユニットには、Atlas Search の概要、Atlas Search インデックスの作成、複合演算子を使用した$search
クエリの実行、 facet
を使用した結果のグループ化に関するレッスンが含まれています。
ビデオで学ぶ
このビデオでは、クエリ内で数値ファセットと stringファセットを作成して使用し、結果をグループ化し、グループ内の結果の数を取得する方法について説明します。
所要時間: 11 分