Atlas Search でのシノニム(同意語)の使用方法
このチュートリアルでは、単語をシノニム(同意語)として構成するコレクションを追加する方法、 sample_mflix.movies
コレクションにシノニム マッピングを定義するインデックスを作成する方法、シノニムとして設定された単語を使用してtitle
フィールドに対して Atlas Search クエリを実行する方法について説明します。
チュートリアルでは、次の手順について説明します。
1 つ以上のサンプル シノニム ソース コレクションを
sample_mflix
データベースにロードします。sample_mflix.movies
コレクション向けに 1 つ以上のシノニム マッピングを含む Atlas Search インデックスを作成します。シノニム ソース コレクションでシノニムとして構成された単語について、
sample_mflix.movies
コレクションのtitle
フィールドに対して Atlas Search クエリを実行します。
開始する前に、Atlas クラスターが前提条件に記載されている要件を満たしていることを確認してください。
注意
複数のシノニム マッピングを作成し、このチュートリアルの高度なサンプル クエリを実行するには、 M10
以上のクラスターが必要です。
Atlas Search インデックスを作成するには、プロジェクトに対するProject Data Access Admin
以上のアクセス権が必要です。
サンプル シノニム ソース コレクションをロードする
シノニム(同意語)ソース コレクション内の各ドキュメントは、1 つ以上の単語が、それらの単語の 1 つ以上のシノニムにマップされる方法を示しています。 シノニム(同意語)ソース コレクション ドキュメント内のフィールドと単語のマッピング タイプの詳細については、「 シノニム(同意語)ソース コレクション ドキュメントの形式 」を参照してください。
開始するには、シノニム ソース コレクションを作成し、シノニム ソース コレクションを使用するデータベースにそのコレクションを追加します。 このセクションでは、 sample_mflix
データベースに 1 つまたは 2 つのサンプル シノニム ソース コレクションを作成し、同じデータベース内のmovies
コレクションのインデックスを持つシノニム ソース コレクションを使用します。
Atlas Atlasで、プロジェクトの {0 ページにGoします。GoClusters
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。
[ クラスター]ページが表示されます。
Collectionsページに移動します。
クラスターの [Browse Collections] ボタンをクリックします。
Data Explorerが表示されます。
sample_mflix
データベースに 1 つ以上のサンプル シノニム コレクションを作成します。
無料または共有階層クラスターを実行している場合は、トランスポートシノニム(同意語) タブの手順に従って、インデックスに単一のシノニム マッピング定義用の コレクションを作成します。 M10
以上のクラスターがあり、インデックス内に複数のシノニム マッピングを作成する場合は、両方のタブの手順に従って、トランスポート シノニムとAtlas のシノニムコレクションの両方を作成します。
sample_mflix
データベースを展開し、次をクリックします:アイコンをクリックして、 Create Collectionモーダルを開きます。Collection nameフィールドに
transport_synonyms
と入力します。[ Createをクリックして、
sample_mflix
データベースにコレクションを作成します。
sample_mflix
データベースを展開し、次をクリックします:アイコンをクリックして、 Create Collectionモーダルを開きます。Collection nameフィールドに
attire_synonyms
と入力します。[ Createをクリックして、
sample_mflix
データベースにコレクションを作成します。
サンプル データをシノニム コレクションにロードします。
タブの手順に従って、それぞれのコレクションにデータを読み込みます。
transport_synonyms
コレクションが未選択の場合、選択します。コレクションに追加するサンプル ドキュメントごとにInsert Documentをクリックします。
デフォルトのドキュメントを置換するには、 JSONビュー( {} )をクリックします。
次のサンプル ドキュメントを一度に 1 つずつコピーして貼り付け、 Insertをクリックしてドキュメントを 1 つずつ コレクションに追加します。
{ "mappingType": "equivalent", "synonyms": ["car", "vehicle", "automobile"] } { "mappingType": "explicit", "input": ["boat"], "synonyms": ["boat", "vessel", "sail"] }
attire_synonyms
コレクションが未選択の場合、選択します。コレクションに追加するサンプル ドキュメントごとにInsert Documentをクリックします。
デフォルトのドキュメントを置換するには、JSON ビュー ({}) をクリックします。
次のサンプル ドキュメントを一度に 1 つずつコピーして貼り付け、 Insertをクリックしてドキュメントを 1 つずつ コレクションに追加します。
{ "mappingType": "equivalent", "synonyms": ["dress", "apparel", "attire"] } { "mappingType": "explicit", "input": ["hat"], "synonyms": ["hat", "fedora", "headgear"] }
シノニム(同意語)マッピングの定義を使用した Atlas Search インデックスの作成
コレクションのインデックス内のシノニム(同意語)マッピングは、シノニム ソース コレクションと、コレクションで使用する アナライザ を指定します。
このセクションでは、 sample_mflix.movies
コレクション向けの 1 つまたは複数のシノニム マッピングを定義する Atlas Search インデックスを作成します。 インデックス内のマッピング定義は、 sample_mflix
データベースで作成したシノニム ソース コレクションを参照します。
AtlasGoClustersAtlas で、プロジェクトの ページにGoします。
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。
[ Clusters (クラスター) ] ページが表示されます。
GoAtlas Searchクラスターの ページに します。
GoAtlas Searchページには、サイドバー、Data Explorer 、またはクラスターの詳細ページから できます。
サイドバーで、 Services見出しの下のAtlas Searchをクリックします。
[ Select data sourceドロップダウンからクラスターを選択し、[ Go to Atlas Search ] をクリックします。
Atlas Searchページが表示されます。
クラスターの [Browse Collections] ボタンをクリックします。
データベースを展開し、コレクションを選択します。
コレクションのSearch Indexesタブをクリックします。
Atlas Searchページが表示されます。
クラスタの名前をクリックします。
[Atlas Search] タブをクリックします。
Atlas Searchページが表示されます。
Index Name を入力し、Database and Collection を設定します。
Index Nameフィールドに
synonyms-tutorial
と入力します。インデックスに
default
と名付けると、 $searchパイプライン ステージでindex
パラメータを指定する必要がなくなります。 インデックスにカスタム名を付ける場合は、index
パラメータでこの名前を指定する必要があります。Database and Collectionセクションで、
sample_mflix
データベースを検索し、movies
コレクションを選択します。
デフォルトのインデックス定義を変更します。
単純なサンプルクエリのみを実行するには、以下の単一シノニム マッピングタブのインデックス定義を使用します。 M10
以上のクラスターがあり、かつ例のシノニム ソース コレクションの両方をロードした場合は、以下の [複数シノニム マッピング] タブで複数のシノニム マッピングを指定するインデックス定義を使用して、簡単なサンプルクエリと高度なサンプルクエリの両方を実行できます。
以下のインデックス定義では、以下を指定します。
言語アナライザ
lucene.english
は、title
フィールドのインデックス作成とクエリの両方のデフォルトのアナライザです。このシノニム マッピングの名前としての名前
transportSynonyms
。transportSynonyms
マッピングを使用してクエリのシノニムを検索するためのソース シノニム コレクションとしてのtransport_synonyms
コレクション。transportSynonyms
は、lucene.english
アナライザでインデックス付けされた任意のフィールド(この例ではtitle
フィールドを含む)に対するテキスト クエリで使用できます。
[Next] をクリックします。
[Refine Your Index] をクリックします。
Field Mappings セクションで [Add Field] をクリックします。
[Customized Configuration] をクリックします。
Add Field Mappingウィンドウで次のフィールドを設定し、次の操作の後にAddをクリックします。
UI フィールド名構成Field Nametitle
と入力します。Enable Dynamic MappingをOffに切り替えます。Data Type Configuration[Add Data Type] をクリックします。
String を選択します。
Index AnalyzerとSearch Analyzerの場合は、 ドロップダウンをクリックして、 lucene.languageアナライザ ドロップダウンからlucene.englishを選択します。
上記に記載されていないすべてのフィールドについては、デフォルトを受け入れます。
Synonym Mappings セクションで [Add Synonym Mapping] をクリックします。
Add Synonym Mappingウィンドウで次のフィールドを設定し、次の操作の後にAddをクリックします。
UI フィールド名構成Synonym Mapping NametransportSynonyms
と入力します。Synonym Source Collectiontransport_synonyms
を選択します。Analyzerlucene.english
を選択します。[Save Changes] をクリックします。
デフォルトのインデックス定義を、以下のインデックス定義で置き換えます。
{ "mappings": { "dynamic": false, "fields": { "title": { "analyzer": "lucene.english", "type": "string" } } }, "synonyms": [ { "analyzer": "lucene.english", "name": "transportSynonyms", "source": { "collection": "transport_synonyms" } } ] } [Next] をクリックします。
以下のインデックス定義では、以下を指定します。
言語アナライザ
lucene.standard
は、title
フィールドのインデックス作成とクエリの両方のデフォルトのアナライザです。シノニム マッピングの名前としての名前
transportSynonyms
とattireSynonyms
。transportSynonyms
マッピングを使用してクエリのシノニムを検索するためのソース シノニム コレクションとしてのtransport_synonyms
コレクション。transportSynonyms
は、lucene.standard
アナライザでインデックス付けされた任意のフィールド(このチュートリアルのサンプル クエリではtitle
フィールドを含む)に対するテキスト クエリで使用できます。attireSynonyms
マッピングを使用してクエリのシノニムを検索するためのソース シノニム コレクションとしてのattire_synonyms
コレクション。attireSynonyms
は、lucene.standard
アナライザでインデックス付けされた任意のフィールド(この例ではtitle
フィールドを含む)に対するテキスト クエリで使用できます。
[Next] をクリックします。
[Refine Your Index] をクリックします。
Field Mappings セクションで [Add Field] をクリックします。
Add Field Mappingウィンドウで次のフィールドを設定し、 Addをクリックします。
UI フィールド名構成Field Nametitle
と入力します。Enable Dynamic MappingをOffに切り替えます。Data Type ConfigurationString を選択します。
Index AnalyzerとSearch Analyzerの場合は、 ドロップダウンをクリックして、 lucene.languageアナライザ ドロップダウンからlucene.englishを選択します。
上記に記載されていないすべてのフィールドについては、デフォルトを受け入れます。
Synonym Mappings セクションで [Add Synonym Mapping] をクリックします。
Add Synonym Mappingウィンドウで次のフィールドを設定し、 Addをクリックします。
UI フィールド名構成Synonym Mapping NametransportSynonyms
と入力します。Synonym Source Collectiontransport_synonyms
を選択します。Analyzerlucene.english
を選択します。Synonym MappingsセクションでAdd Synonym Mappingを再度クリックします。
Add Synonym Mappingウィンドウで次のフィールドを設定し、次の操作の後にAddをクリックします。
UI フィールド名構成Synonym Mapping NameattireSynonyms
と入力します。Synonym Source Collectionattire_synonyms
を選択します。Analyzerlucene.english
を選択します。[Save Changes] をクリックします。
デフォルトのインデックス定義を、以下のインデックス定義で置き換えます。
{ "mappings": { "dynamic": false, "fields": { "title": { "analyzer": "lucene.english", "type": "string" } } }, "synonyms": [ { "analyzer": "lucene.english", "name": "transportSynonyms", "source": { "collection": "transport_synonyms" } }, { "analyzer": "lucene.english", "name": "attireSynonyms", "source": { "collection": "attire_synonyms" } } ] } [Next] をクリックします。
コレクションを検索
➤ [言語の選択]ドロップダウン メニューを使用して、このセクション内の例の言語を設定します。
シノニム(同意語) は、テキスト演算子を使用するクエリでのみ使用できます。 このセクションでは、Atlas クラスターに接続し、 sample_mflix.movies
コレクションのtitle
フィールドに対してtext
演算子を使用してサンプル クエリを実行します。 サンプル クエリでは、シノニム(同意語)ソース コレクション内のさまざまなマッピング タイプのシノニムとして設定されている単語を使用します。 ソース コレクションは、クエリが使用するシノニム マッピングで参照されます。
AtlasGoClustersAtlas で、プロジェクトの ページにGoします。
まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー
まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。
まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。
[ Clusters (クラスター) ] ページが表示されます。
GoAtlas Searchクラスターの ページに します。
GoAtlas Searchページには、サイドバー、Data Explorer 、またはクラスターの詳細ページから できます。
サイドバーで、 Services見出しの下のAtlas Searchをクリックします。
[ Select data sourceドロップダウンからクラスターを選択し、[ Go to Atlas Search ] をクリックします。
Atlas Searchページが表示されます。
クラスターの [Browse Collections] ボタンをクリックします。
データベースを展開し、コレクションを選択します。
コレクションのSearch Indexesタブをクリックします。
Atlas Searchページが表示されます。
クラスタの名前をクリックします。
[Atlas Search] タブをクリックします。
Atlas Searchページが表示されます。
movies
コレクションで次のサンプルクエリを実行します。
単一のシノニム マッピング定義を使用してインデックスを作成した場合は、次の 簡単な例 タブからクエリを実行します。 インデックスに複数のシノニム マッピングを定義した場合は、次の両方のタブからクエリを実行できます。
次のクエリでは、
title
フィールドを除くすべてのフィールドを除外します。score
という名前のフィールドを追加します。
Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。
次のクエリは、 title
フィールドでautomobile
を検索し、 transportSynonyms
シノニム(同意語)マッピング定義 を使用して、 transport_synonyms
シノニム ソース コレクションで構成したautomobile
のシノニムを検索します。
[ { $search: { index: "synonyms-tutorial", text: { path: "title", query: "automobile", synonyms: "transportSynonyms" } } } ]
SCORE: 4.197734832763672 _id: “573a13a9f29313caabd1f18a” fullplot: "While traveling to California for the dispute of the final race of the…" imdb: Object year: 2006 ... title: "Cars" SCORE: 3.8511905670166016 _id: “573a1398f29313caabcea94c” plot: "A man must struggle to travel home for Thanksgiving with an obnoxious …" genres: Array runtime: 93 ... title: "Planes, Trains, and Automobiles" SCORE: 3.39473032951355 _id: “573a1397f29313caabce5fb0” plot: "Car Wash is about a close-knit group of employees who one day have all…" genres: Array runtime: 97 ... title: "Car Wash" SCORE: 3.39473032951355 _id: “573a1397f29313caabce7bd2” plot: "When the owner of a struggling used car lot is killed, it's up to the …" genres: Array runtime: 113 ... title: "Used Cars" SCORE: 3.39473032951355 _id: “573a13a6f29313caabd18bfe” fullplot: "Gifted 18-year-old Meg has been abandoned by her father and neglected …" imdb: Object year: 2002 ... title: "Blue Car" SCORE: 3.39473032951355 _id: “573a13c1f29313caabd64e3d” fullplot: "After Mater gets his best friend, star race car Lightning McQueen, a s…" imdb: Object year: 2011 ... title: "Cars 2" SCORE: 3.39473032951355 _id: “573a13eaf29313caabdce62c” plot: "A rebellious teenager navigates his way through the juvenile court sys…" genres: Array runtime: 94 ... title: "Stealing Cars" SCORE: 3.39473032951355 _id: “573a13f1f29313caabddc93f” plot: "A small town sheriff sets out to find the two kids who have taken his …" genres: Array runtime: 86 ... title: "Cop Car" SCORE: 2.8496146202087402 _id: “573a1396f29313caabce5480” plot: "The small town of Paris, Australia deliberately causes car accidents, …" genres: Array runtime: 91 ... title: "The Cars That Eat People" SCORE: 2.8496146202087402 _id: “573a139df29313caabcf9636” plot: "Military doctor General Klenski is arrested in Stalin's Russia in 1953…" genres: Array runtime: 137 ... title: "Khrustalyov, My Car!"
Atlas Search 結果には、 title
フィールドにcar
とautomobile
である映画が含まれていますが、クエリ用語はautomobile
です。これは、 automobile
をcar
、 vehicle
、 automobile
のシノニムとして設定したためです。コレクションのインデックスで指定されるsample_synonyms
名前のシノニム ソース コレクション内の }。 Atlas Search では、 car
とvehicle
という単語の検索で同じ結果が返されます。 これをテストするには、上記のクエリのquery
フィールドの値をcar
またはvehicle
に置き換えてクエリを実行します。
クエリは、 title
フィールドでboat
を検索し、 transportSynonyms
シノニム(同意語)マッピング定義 を使用して、 transport_synonyms
シノニム ソース コレクションで構成したboat
のシノニムを検索します。
[ { $search: { index: "synonyms-tutorial", text: { path: "title", query: "boat", synonyms: "transportSynonyms" } } } ]
SCORE: 5.373150825500488 _id: “573a13e9f29313caabdcd013” plot: "A fearless sea captain sails a ship through loopholes in international…" genres: Array runtime: 90 ... title: "Vessel" SCORE: 4.589139938354492 _id: “573a13e8f29313caabdc9e72” countries: Array genres: Array runtime: 7 ... title: "Boats" SCORE: 4.3452959060668945 _id: “573a1398f29313caabce90b6” plot: "In 1914, a luxury ship leaves Italy in order to scatter the ashes of a…" genres: Array runtime: 128 ... title: "And the Ship Sails On" SCORE: 4.3452959060668945 _id: “573a139cf29313caabcf7c75” plot: "A young Pennsylvania man moves to Los Angeles to begin work for an amb…" genres: Array runtime: 90 ... title: "Broken Vessels" SCORE: 4.3452959060668945 _id: “573a13f0f29313caabdda2dd” plot: "A young man struggling with the death of his parents meets an extrover…" genres: Array runtime: 80 ... title: "Sailing to Paradise" SCORE: 3.711261749267578 _id: “573a1397f29313caabce8796” plot: "A Japanese photojournalist revisits Vietnam after the Liberation and l…" genres: Array runtime: 109 ... title: "Boat People" SCORE: 3.711261749267578 _id: “573a13a6f29313caabd17a98” plot: "Two straight men mistakenly end up on a "gays only" cruise." genres: Array runtime: 94 ... title: "Boat Trip" SCORE: 3.1153182983398438 _id: “573a1394f29313caabce036c” plot: "Three London gentlemen take vacation rowing down the Thames, encounter…" genres: Array runtime: 84 ... title: "Three Men in a Boat" SCORE: 3.1153182983398438 _id: “573a1395f29313caabce2c28” plot: "After a series of misunderstandings, the head of an aerospace research…" genres: Array runtime: 110 ... title: "The Glass Bottom Boat" SCORE: 3.1153182983398438 _id: “573a13c2f29313caabd68772” fullplot: "Jack is a shy and awkward man who drives a limo and lives an unassumin…" imdb: Object runtime: 2010 ... title: "Jack Goes Boating"
Atlas Search 結果には、 title
フィールドにboat
、 vessel
、 sail
である映画が含まれていますboat
、 vessel
、 sail
をシノニム(同意語)でboat
のシノニムとして設定したためです。 sample_synonyms
という名前のソース コレクション。これはコレクションのインデックスで指定されます。
Atlas Search では、結果内の「 vessel
」という単語の検索のみで次のドキュメントが返されます。
{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 }
Atlas Search では、シノニム(同意語)のtitle
フィールドにboat
またはsail
のいずれかを持つドキュメントが含まれません。 vessel
をシノニム(同意語)のboat
またはsail
のシノニムとして設定しなかったためです。ソース コレクション。 これをテストするには、上記クエリのquery
フィールドの値をvessel
に置き換えて、クエリを再度実行します。
同様に、Atlas Search では、 sail
というタームの検索結果のみで次のドキュメントが返されます。
{ "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 }
Atlas Search では、シノニム(同意語)のtitle
フィールドにboat
またはvessel
のいずれかを持つドキュメントが含まれません。 sail
をシノニム(同意語)のboat
またはvessel
のシノニムとして設定しなかったためです。ソース コレクション。 この例をテストするには、上記のクエリのquery
フィールドの値をsail
に置き換えて、クエリを再度実行します。
Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。
クエリは、 title
フィールドでautomobile
を検索し、 transportSynonyms
シノニム(同意語)マッピング定義 を使用して、 transport_synonyms
シノニム ソース コレクションで構成したautomobile
のシノニムを検索します。 また、クエリはtitle
フィールドでattire
を検索し、 attireSynonyms
シノニム マッピング定義 を使用して、 attire_synonyms
シノニム ソース コレクションで構成したattire
のシノニムを検索します。
[ { $search: { "index": "synonyms-tutorial", "compound": { "should": [{ "text": { "path": "title", "query": "automobile", "synonyms": "transportSynonyms" } }, { "text": { "path": "title", "query": "attire", "synonyms": "attireSynonyms" } }] } } } ]
SCORE: 4.812004089355469 _id: “573a139af29313caabcf003f” plot: "The Dress is a tale filled with sex, violence, comedy and drama as it …" genres: Array runtime: 103 ... title: "The Dress" SCORE: 4.197734832763672 _id: “573a13a9f29313caabd1f18a” fullplot: "While traveling to California for the dispute of the final race of the…" imdb: Object year: 2006 ... title: "Cars" SCORE: 3.891493320465088 _id: “573a1397f29313caabce77cd” plot: "A mysterious blonde woman kills one of a psychiatrist's patients, and …" genres: Array runtime: 105 ... title: "Dressed to Kill" SCORE: 3.891493320465088 _id: “573a13bcf29313caabd57e07” fullplot: "Two things about Jane: she never says no to her friends (she's been a …" imdb Object year: 2008 ... title: "27 Dresses" SCORE: 3.8511905670166016 _id: “573a1398f29313caabcea94c” plot: "A man must struggle to travel home for Thanksgiving with an obnoxious …" genres: Array runtime: 93 ... title: "Planes, Trains, and Automobiles" SCORE: 3.39473032951355 _id: “573a1397f29313caabce5fb0” plot: "Car Wash is about a close-knit group of employees who one day have all…" genres: Array runtime: 97 ... title: "Car Wash" SCORE: 3.39473032951355 _id: “573a1397f29313caabce7bd2” plot: "When the owner of a struggling used car lot is killed, it's up to the …" genres: Array runtime: 113 ... title: "Used Cars" SCORE: 3.39473032951355 _id: “573a13a6f29313caabd18bfe” fullplot: "Gifted 18-year-old Meg has been abandoned by her father and neglected …" imdb: Object year: 2002 ... title: "Blue Car" SCORE: 3.39473032951355 _id: “573a13c1f29313caabd64e3d” fullplot: "After Mater gets his best friend, star race car Lightning McQueen, a s…" imdb: Object year: 2011 ... title: "Cars 2" SCORE: 3.39473032951355 _id: “573a13eaf29313caabdce62c” plot: "A rebellious teenager navigates his way through the juvenile court sys…" genres: Array runtime: 94 ... title: "Stealing Cars"
Atlas Search 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語automobile
のtitle
フィールドにcar
が含まれる映画が含まれます。これは、シノニム(同意語)ソース コレクションで、 automobile
をcar
、 vehicle
、 automobile
のシノニムとして設定したためです。 transport_synonyms
。 結果には、クエリ タームattire
のタイトル フィールドにdress
が含まれる映画も含まれます。これは、 attire
をdress
、 apparel
、 attire
のシノニムとして設定したためです。名前はシノニム(同意語)ソース コレクションで、 attire_synonyms
10} を 、 、 のシノニムとして設定したためです。 .
Atlas Search では、 transport_synonyms
ソース コレクション内のcar
またはvehicle
およびattire_synonyms
ソース コレクション内のdress
またはapparel
を検索すると、同じ結果が返されます。 この例をテストするには、上記のクエリのquery
フィールドの値をcar
またはvehicle
に置き換え、上記のクエリのquery
フィールドの値をdress
またはapparel
に置き換えます。クエリを再度実行します。
クエリは、 title
フィールドでboat
を検索し、 transportSynonyms
シノニム(同意語)マッピング定義 を使用して、 transport_synonyms
シノニム ソース コレクションで構成したboat
のシノニムを検索します。 また、クエリはtitle
フィールドでhat
を検索し、 attireSynonyms
シノニム マッピング定義 を使用して、 attire_synonyms
シノニム ソース コレクションで構成したhat
のシノニムを検索します。
[ { $search: { index: "synonyms-tutorial", compound: { should: [{ text: { path: "title", query: "boat", synonyms: "transportSynonyms" } }, { text: { path: "title", query: "hat", synonyms: "attireSynonyms" } }] } } } ]
SCORE: 5.673145294189453 _id: “573a1397f29313caabce6bed” plot: "Down-on-his-luck Hollywood producer Barry 'Dutch' Detweiler attempts t…" genres: Array runtime: 114 ... title: "Fedora" SCORE: 5.373150825500488 _id: “573a13e9f29313caabdcd013” plot: "A fearless sea captain sails a ship through loopholes in international…" genres: Array runtime: 90 ... title: "Vessel" SCORE: 4.589139938354492 _id: “573a13e8f29313caabdc9e72” countries: Array genres: Array runtime: 7 ... title: "Boats" SCORE: 4.3452959060668945 _id: “573a1398f29313caabce90b6” plot: "In 1914, a luxury ship leaves Italy in order to scatter the ashes of a…" genres: Array runtime: 128 ... title: "And the Ship Sails On" SCORE: 4.3452959060668945 _id: “573a139cf29313caabcf7c75” plot: "A young Pennsylvania man moves to Los Angeles to begin work for an amb…" genres: Array runtime: 90 ... title: "Broken Vessels" SCORE: 4.3452959060668945 _id: “573a13f0f29313caabdda2dd” plot: "A young man struggling with the death of his parents meets an extrover…" genres: Array runtime: 80 ... title: "Sailing to Paradise" SCORE: 4.066137313842773 _id: “573a1392f29313caabcdaae8” plot: "An American dancer comes to Britain and falls for a model whom he init…" genres: Array runtime: 101 ... title: "Top Hat" SCORE: 4.066137313842773 _id: “573a1394f29313caabce05e8” plot: "A Korean War veteran's morphine addiction wreaks havoc upon his family…" genres: Array runtime: 109 ... title: "A Hatful of Rain" SCORE: 3.711261749267578 _id: “573a1397f29313caabce8796” plot: "A Japanese photojournalist revisits Vietnam after the Liberation and l…" genres: Array runtime: 109 ... title: "Boat People" SCORE: 3.711261749267578 _id: “573a13a6f29313caabd17a98” plot: "Two straight men mistakenly end up on a "gays only" cruise." genres: Array runtime: 94 ... title: "Boat Trip"
Atlas Search 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語 の フィールドに vessel
、boat
、および が含まれる映画が含まれます。これは、sail
title
boat
boat
boat
を 、vessel
、およびsail
transport_synonyms
のシノニムとして設定したためです。 という名前のシノニム(同意語)ソース コレクション内の
Atlas Search では、 vessel
というタームの検索結果のtitle
フィールドにboat
またはsail
のいずれかを持つドキュメントは含まれません。これは、 boat
vessel
を次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはsail
に該当します。 同様に、Atlas Search では、 sail
というタームの検索結果のtitle
フィールドにboat
またはvessel
のいずれかを持つドキュメントは含まれません。これは、 sail
を次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のboat
またはvessel
のいずれか。 これらの例をテストするには、上記のクエリのquery
フィールドの値をvessel
またはsail
に置き換えて、クエリを再度実行します。
結果には、クエリ用語hat
のタイトル フィールドにfedora
とhat
が含まれる映画も含まれます。これは、シノニム(同意語)内でhat
をhat
、 fedora
、 headgear
のシノニムとして設定したためです。 attire_synonyms
という名前のソース コレクション。
Atlas Search では、 headgear
というタームの検索結果のtitle
フィールドにhat
またはfedora
のいずれかを持つドキュメントは含まれません。これは、 hat
headgear
を次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはfedora
に該当します。 同様に、Atlas Search では、 fedora
というタームの検索結果のtitle
フィールドにhat
またはheadgear
のいずれかを持つドキュメントは含まれません。これは、 fedora
を次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のhat
またはheadgear
のいずれか。 これらの例をテストするには、上記のクエリのquery
フィールドの値をfedora
またはheadgear
に置き換えて、クエリを再度実行します。
クエリ結果を展開します。
Search Testerでは、返されるドキュメント内のすべてのフィールドが表示されない場合があります。 クエリパスで指定したフィールドを含むすべてのフィールドを表示するには、結果内のドキュメントを展開します。
mongosh
でクラスターに接続します。
ターミナル ウィンドウでmongosh
を開き、クラスターに接続します。 接続の詳細な手順については、「 mongosh
経由での接続 」を参照してください。
sample_mflix
データベースを使用します。
mongosh
プロンプトで次のコマンドを実行します。
use sample_mflix
movies
コレクションで次のサンプルクエリを実行します。
単一のシノニム(同意語)マッピング定義を使用してインデックスを作成した場合は、以下の 簡単な例 タブでクエリを実行します。 インデックスに複数のシノニム マッピングを定義した場合は、以下の両方のタブでクエリを実行できます。
これらのクエリでは、次のパイプライン ステージを使用します。
$search
コレクションを検索するには、ステージが必要です。$limit
ステージを使用して、出力を10
の結果に制限します。$project
stageを次のように設定します。title
フィールドを除くすべてのフィールドを除外します。score
という名前のフィールドを追加します。
Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。
クエリは、 title
フィールドでautomobile
という単語を検索し、 transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、 transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語automobile
のシノニムとして設定されている単語を検索します。
db.movies.aggregate([ { $search: { "index": "synonyms-tutorial", "text": { "path": "title", "query": "automobile", "synonyms": "transportSynonyms" } } }, { $limit: 10 }, { $project: { "_id": 0, "title": 1, "score": { $meta: "searchScore" } } } ])
{ "title" : "Cars", "score" : 4.197734832763672 } { "title" : "Planes, Trains & Automobiles", "score" : 3.8511905670166016 } { "title" : "Car Wash", "score" : 3.39473032951355 } { "title" : "Used Cars", "score" : 3.39473032951355 } { "title" : "Blue Car", "score" : 3.39473032951355 } { "title" : "Cars 2", "score" : 3.39473032951355 } { "title" : "Stealing Cars", "score" : 3.39473032951355 } { "title" : "Cop Car", "score" : 3.39473032951355 } { "title" : "The Cars That Eat People", "score" : 2.8496146202087402 } { "title" : "Khrustalyov, My Car!", "score" : 2.8496146202087402 }
Atlas Search 結果には、 title
フィールドにcar
とautomobile
である映画が含まれていますが、クエリ用語はautomobile
です。これは、 automobile
をcar
、 vehicle
、 automobile
のシノニムとして設定したためです。コレクションのインデックスで指定されるsample_synonyms
名前のシノニム ソース コレクション内の }。 Atlas Search では、 car
とvehicle
という単語の検索で同じ結果が返されます。 これをテストするには、上記のクエリのquery
フィールドの値をcar
またはvehicle
に置き換えてクエリを実行します。
クエリは、 title
フィールドでboat
という単語を検索し、 transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、 transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語boat
のシノニムとして設定されている単語を検索します。
db.movies.aggregate([ { $search: { "index": "synonyms-tutorial", "text": { "path": "title", "query": "boat", "synonyms": "transportSynonyms" } } }, { $limit: 10 }, { $project: { "_id": 0, "title": 1, "score": { $meta: "searchScore" } } } ])
{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Boats", "score" : 4.589139938354492 } { "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 } { "title" : "Boat People", "score" : 3.711261749267578 } { "title" : "Boat Trip", "score" : 3.711261749267578 } { "title" : "Three Men in a Boat", "score" : 3.1153182983398438 } { "title" : "The Glass Bottom Boat", "score" : 3.1153182983398438 } { "title" : "Jack Goes Boating", "score" : 3.1153182983398438 }
Atlas Search 結果には、 title
フィールドにboat
、 vessel
、 sail
である映画が含まれていますboat
、 vessel
、 sail
をシノニム(同意語)でboat
のシノニムとして設定したためです。 sample_synonyms
という名前のソース コレクション。これはコレクションのインデックスで指定されます。
Atlas Search では、結果内の「 vessel
」という単語の検索のみで次のドキュメントが返されます。
{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 }
Atlas Search では、シノニム(同意語)のtitle
フィールドにboat
またはsail
のいずれかを持つドキュメントが含まれません。 vessel
をシノニム(同意語)のboat
またはsail
のシノニムとして設定しなかったためです。ソース コレクション。 これをテストするには、上記クエリのquery
フィールドの値をvessel
に置き換えて、クエリを再度実行します。
同様に、Atlas Search では、 sail
というタームの検索結果のみで次のドキュメントが返されます。
{ "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 }
Atlas Search では、シノニム(同意語)のtitle
フィールドにboat
またはvessel
のいずれかを持つドキュメントが含まれません。 sail
をシノニム(同意語)のboat
またはvessel
のシノニムとして設定しなかったためです。ソース コレクション。 この例をテストするには、上記のクエリのquery
フィールドの値をsail
に置き換えて、クエリを再度実行します。
Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。
クエリは、 title
フィールドでautomobile
という単語を検索し、 transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、 transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語automobile
のシノニムとして設定されている単語を検索します。 クエリは、 title
フィールドでattire
という単語も検索し、 attireSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、 attire_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語attire
のシノニムとして設定されている単語を検索します。
db.movies.aggregate([ { $search: { "index": "synonyms-tutorial", "compound": { "should": [{ "text": { "path": "title", "query": "automobile", "synonyms": "transportSynonyms" } }, { "text": { "path": "title", "query": "attire", "synonyms": "attireSynonyms" } }] } } }, { $limit: 10 }, { $project: { "_id": 0, "title": 1, "score": { $meta: "searchScore" } } } ])
[ { title: 'The Dress', score: 4.812004089355469 }, { title: 'Cars', score: 4.197734832763672 }, { title: 'Dressed to Kill', score: 3.891493320465088 }, { title: '27 Dresses', score: 3.891493320465088 }, { title: 'Planes, Trains & Automobiles', score: 3.8511905670166016 }, { title: 'Car Wash', score: 3.39473032951355 }, { title: 'Used Cars', score: 3.39473032951355 }, { title: 'Blue Car', score: 3.39473032951355 }, { title: 'Cars 2', score: 3.39473032951355 }, { title: 'Stealing Cars', score: 3.39473032951355 } ]
Atlas Search 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語automobile
のtitle
フィールドにcar
が含まれる映画が含まれます。これは、シノニム(同意語)ソース コレクションで、 automobile
をcar
、 vehicle
、 automobile
のシノニムとして設定したためです。 transport_synonyms
。 結果には、クエリ タームattire
のタイトル フィールドにdress
が含まれる映画も含まれます。これは、 attire
をdress
、 apparel
、 attire
のシノニムとして設定したためです。名前はシノニム(同意語)ソース コレクションで、 attire_synonyms
10} を 、 、 のシノニムとして設定したためです。 .
Atlas Search では、 transport_synonyms
ソース コレクション内のcar
またはvehicle
およびattire_synonyms
ソース コレクション内のdress
またはapparel
を検索すると、同じ結果が返されます。 この例をテストするには、上記のクエリのquery
フィールドの値をcar
またはvehicle
に置き換え、上記のクエリのquery
フィールドの値をdress
またはapparel
に置き換えます。クエリを再度実行します。
クエリは、 title
フィールドでboat
という単語を検索し、 transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、 transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語boat
のシノニムとして設定されている単語を検索します。 クエリは、 title
フィールドでhat
という単語も検索し、 attireSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、 attire_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語hat
のシノニムとして設定されている単語を検索します。
db.movies.aggregate([ { $search: { "index": "synonyms-tutorial", "compound": { "should": [{ "text": { "path": "title", "query": "boat", "synonyms": "transportSynonyms" } }, { "text": { "path": "title", "query": "hat", "synonyms": "attireSynonyms" } }] } } }, { $limit: 10 }, { $project: { "_id": 0, "title": 1, "score": { $meta: "searchScore" } } } ])
[ { title: 'Fedora', score: 5.673145294189453 }, { title: 'Vessel', score: 5.373150825500488 }, { title: 'Boats', score: 4.589139938354492 }, { title: 'And the Ship Sails On', score: 4.3452959060668945 }, { title: 'Broken Vessels', score: 4.3452959060668945 }, { title: 'Sailing to Paradise', score: 4.3452959060668945 }, { title: 'Top Hat', score: 4.066137313842773 }, { title: 'A Hatful of Rain', score: 4.066137313842773 }, { title: 'Boat People', score: 3.711261749267578 }, { title: 'Boat Trip', score: 3.711261749267578 } ]
Atlas Search 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語 の フィールドに vessel
、boat
、および が含まれる映画が含まれます。これは、sail
title
boat
boat
boat
を 、vessel
、およびsail
transport_synonyms
のシノニムとして設定したためです。 という名前のシノニム(同意語)ソース コレクション内の
Atlas Search では、 vessel
というタームの検索結果のtitle
フィールドにboat
またはsail
のいずれかを持つドキュメントは含まれません。これは、 boat
vessel
を次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはsail
に該当します。 同様に、Atlas Search では、 sail
というタームの検索結果のtitle
フィールドにboat
またはvessel
のいずれかを持つドキュメントは含まれません。これは、 sail
を次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のboat
またはvessel
のいずれか。 これらの例をテストするには、上記のクエリのquery
フィールドの値をvessel
またはsail
に置き換えて、クエリを再度実行します。
結果には、クエリ用語hat
のタイトル フィールドにfedora
とhat
が含まれる映画も含まれます。これは、シノニム(同意語)内でhat
をhat
、 fedora
、 headgear
のシノニムとして設定したためです。 attire_synonyms
という名前のソース コレクション。
Atlas Search では、 headgear
というタームの検索結果のtitle
フィールドにhat
またはfedora
のいずれかを持つドキュメントは含まれません。これは、 hat
headgear
を次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはfedora
に該当します。 同様に、Atlas Search では、 fedora
というタームの検索結果のtitle
フィールドにhat
またはheadgear
のいずれかを持つドキュメントは含まれません。これは、 fedora
を次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のhat
またはheadgear
のいずれか。 これらの例をテストするには、上記のクエリのquery
フィールドの値をfedora
またはheadgear
に置き換えて、クエリを再度実行します。
MongoDB Compass のクラスターに接続します。
MongoDB Compass を開き、クラスターに接続します。 接続の詳細な手順については、「 Compass 経由での接続 」を参照してください。
movies
コレクションで簡単な Atlas Search クエリを実行します。
Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。
クエリは、 title
フィールドでautomobile
という単語を検索し、 transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、 transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語automobile
のシノニムとして設定されている単語を検索します。 このクエリには、次のステージが含まれています。
MongoDB Compass でこのクエリを実行するには:
[Aggregations] タブをクリックします。
Select...をクリックし、ドロップダウンからステージを選択し、そのステージのクエリを追加して、次の各パイプライン ステージを構成します。 ステージを追加するには、 Add Stageをクリックします。
パイプラインステージクエリ$search
{ "index": "synonyms-tutorial", "text": { "path": "title", "query": "automobile", "synonyms": "transportSynonyms" } } $limit
10 $project
{ "_id": 0, "title": 1, "score": { "$meta": "searchScore" } } Auto Previewを有効にした場合、MongoDB Compass は
$project
パイプライン ステージの横に次のドキュメントを表示します。{title Cars} {score 4.197734832763672} {title Planes, Trains & Automobiles} {score 3.8511905670166016} {title Car Wash} {score 3.39473032951355} {title Used Cars} {score 3.39473032951355} {title Blue Car} {score 3.39473032951355} {title Cars 2} {score 3.39473032951355} {title Stealing Cars} {score 3.39473032951355} {title Cop Car} {score 3.39473032951355} {title The Cars That Eat People} {score 2.8496146202087402} {title Khrustalyov, My Car!} {score 2.8496146202087402} Atlas Search 結果には、
title
フィールドにcar
とautomobile
である映画が含まれていますが、クエリ用語はautomobile
です。これは、automobile
をcar
、vehicle
、automobile
のシノニムとして設定したためです。コレクションのインデックスで指定されるsample_synonyms
名前のシノニム ソース コレクション内の }。 Atlas Search では、car
とvehicle
という単語の検索で同じ結果が返されます。 これをテストするには、上記のクエリのquery
フィールドの値をcar
またはvehicle
に置き換えてクエリを実行します。
クエリは、 title
フィールドでboat
という単語を検索し、 transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、 transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語boat
のシノニムとして設定されている単語を検索します。 これには、次のステージが含まれます。
MongoDB Compass でこのクエリを実行するには:
[Aggregations] タブをクリックします。
Select...をクリックし、ドロップダウンからステージを選択し、そのステージのクエリを追加して、次の各パイプライン ステージを構成します。 ステージを追加するには、 Add Stageをクリックします。
パイプラインステージクエリ$search
{ "index": "synonyms-tutorial", "text": { "path": "title", "query": "boat", "synonyms": "transportSynonyms" } } $limit
10 $project
{ "_id": 0, "title": 1, "score": { "$meta": "searchScore" } } Auto Previewを有効にした場合、MongoDB Compass は
$project
パイプライン ステージの横に次のドキュメントを表示します。{title Vessel} {score 5.373150825500488} {title Boats} {score 4.589139938354492} {title And the Ship Sails On} {score 4.3452959060668945} {title Broken Vessels} {score 4.3452959060668945} {title Sailing to Paradise} {score 4.3452959060668945} {title Boat People} {score 3.711261749267578} {title Boat Trip} {score 3.711261749267578} {title Three Men in a Boat} {score 3.1153182983398438} {title The Glass Bottom Boat} {score 3.1153182983398438} {title Jack Goes Boating} {score 3.1153182983398438} Atlas Search 結果には、
title
フィールドにboat
、vessel
、sail
である映画が含まれていますboat
、vessel
、sail
をシノニム(同意語)でboat
のシノニムとして設定したためです。sample_synonyms
という名前のソース コレクション。これはコレクションのインデックスで指定されます。Atlas Search では、結果内の「
vessel
」という単語の検索のみで次のドキュメントが返されます。{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 } Atlas Search では、シノニム(同意語)の
title
フィールドにboat
またはsail
のいずれかを持つドキュメントが含まれません。vessel
をシノニム(同意語)のboat
またはsail
のシノニムとして設定しなかったためです。ソース コレクション。 これをテストするには、上記クエリのquery
フィールドの値をvessel
に置き換えて、クエリを再度実行します。同様に、Atlas Search では、
sail
というタームの検索結果のみで次のドキュメントが返されます。{ "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 } Atlas Search では、シノニム(同意語)の
title
フィールドにboat
またはvessel
のいずれかを持つドキュメントが含まれません。sail
をシノニム(同意語)のboat
またはvessel
のシノニムとして設定しなかったためです。ソース コレクション。 この例をテストするには、上記のクエリのquery
フィールドの値をsail
に置き換えて、クエリを再度実行します。
複数のシノニム(同意語)マッピングを含むインデックスを作成した場合は、高度な Atlas Search クエリを実行します。
Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。
クエリは、 title
フィールドでautomobile
という単語を検索し、 transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、 transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語automobile
のシノニムとして設定されている単語を検索します。 クエリは、 title
フィールドでattire
という単語も検索し、 attireSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、 attire_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語attire
のシノニムとして設定されている単語を検索します。
このクエリには、次のステージが含まれています。
MongoDB Compass でこのクエリを実行するには:
[Aggregations] タブをクリックします。
Select...をクリックし、ドロップダウンからステージを選択し、そのステージのクエリを追加して、次の各パイプライン ステージを構成します。 ステージを追加するには、 Add Stageをクリックします。
パイプラインステージクエリ$search
{ "index": "synonyms-tutorial", "compound": { "should": [{ "text": { "path": "title", "query": "automobile", "synonyms": "transportSynonyms" } }, { "text": { "path": "title", "query": "attire", "synonyms": "attireSynonyms" } }] } } $limit
10 $project
{ "_id": 0, "title": 1, "score": { "$meta": "searchScore" } } Auto Previewを有効にした場合、MongoDB Compass は
$project
パイプライン ステージの横に次のドキュメントを表示します。{ title: 'The Dress', score: 4.812004089355469 }, { title: 'Cars', score: 4.197734832763672 }, { title: 'Dressed to Kill', score: 3.891493320465088 }, { title: '27 Dresses', score: 3.891493320465088 }, { title: 'Planes, Trains & Automobiles', score: 3.8511905670166016 }, { title: 'Car Wash', score: 3.39473032951355 }, { title: 'Used Cars', score: 3.39473032951355 }, { title: 'Blue Car', score: 3.39473032951355 }, { title: 'Cars 2', score: 3.39473032951355 }, { title: 'Stealing Cars', score: 3.39473032951355 } Atlas Search 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語
automobile
のtitle
フィールドにcar
が含まれる映画が含まれます。これは、シノニム(同意語)ソース コレクションで、automobile
をcar
、vehicle
、automobile
のシノニムとして設定したためです。transport_synonyms
。 結果には、クエリ タームattire
のタイトル フィールドにdress
が含まれる映画も含まれます。これは、attire
をdress
、apparel
、attire
のシノニムとして設定したためです。名前はシノニム(同意語)ソース コレクションで、attire_synonyms
10} を 、 、 のシノニムとして設定したためです。 .Atlas Search では、
transport_synonyms
ソース コレクション内のcar
またはvehicle
およびattire_synonyms
ソース コレクション内のdress
またはapparel
を検索すると、同じ結果が返されます。 この例をテストするには、上記のクエリのquery
フィールドの値をcar
またはvehicle
に置き換え、上記のクエリのquery
フィールドの値をdress
またはapparel
に置き換えます。クエリを再度実行します。
クエリは、 title
フィールドでboat
という単語を検索し、 transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、 transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語boat
のシノニムとして設定されている単語を検索します。 クエリは、 title
フィールドでhat
という単語も検索し、 attireSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、 attire_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語hat
のシノニムとして設定されている単語を検索します。
このクエリには、次のステージが含まれています。
MongoDB Compass でこのクエリを実行するには:
[Aggregations] タブをクリックします。
Select...をクリックし、ドロップダウンからステージを選択し、そのステージのクエリを追加して、次の各パイプライン ステージを構成します。 ステージを追加するには、 Add Stageをクリックします。
パイプラインステージクエリ$search
{ "index": "synonyms-tutorial", "compound": { "should": [{ "text": { "path": "title", "query": "boat", "synonyms": "transportSynonyms" } }, { "text": { "path": "title", "query": "hat", "synonyms": "attireSynonyms" } }] } } $limit
10 $project
{ "_id": 0, "title": 1, "score": { "$meta": "searchScore" } } Auto Previewを有効にした場合、MongoDB Compass は
$project
パイプライン ステージの横に次のドキュメントを表示します。{ title: 'Fedora', score: 5.673145294189453 }, { title: 'Vessel', score: 5.373150825500488 }, { title: 'Boats', score: 4.589139938354492 }, { title: 'And the Ship Sails On', score: 4. 3452959060668945 }, { title: 'Broken Vessels', score: 4.3452959060668945 }, { title: 'Sailing to Paradise', score: 4.3452959060668945 }, { title: 'Top Hat', score: 4.066137313842773 }, { title: 'A Hatful of Rain', score: 4.066137313842773 }, { title: 'Boat People', score: 3.711261749267578 }, { title: 'Boat Trip', score: 3.711261749267578 } Atlas Search 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語 の フィールドに
vessel
、boat
、および が含まれる映画が含まれます。これは、sail
title
boat
boat
boat
を 、vessel
、およびsail
transport_synonyms
のシノニムとして設定したためです。 という名前のシノニム(同意語)ソース コレクション内のAtlas Search では、
vessel
というタームの検索結果のtitle
フィールドにboat
またはsail
のいずれかを持つドキュメントは含まれません。これは、boat
vessel
を次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはsail
に該当します。 同様に、Atlas Search では、sail
というタームの検索結果のtitle
フィールドにboat
またはvessel
のいずれかを持つドキュメントは含まれません。これは、sail
を次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のboat
またはvessel
のいずれか。 これらの例をテストするには、上記のクエリのquery
フィールドの値をvessel
またはsail
に置き換えて、クエリを再度実行します。結果には、クエリ用語
hat
のタイトル フィールドにfedora
とhat
が含まれる映画も含まれます。これは、シノニム(同意語)内でhat
をhat
、fedora
、headgear
のシノニムとして設定したためです。attire_synonyms
という名前のソース コレクション。Atlas Search では、
headgear
というタームの検索結果のtitle
フィールドにhat
またはfedora
のいずれかを持つドキュメントは含まれません。これは、hat
headgear
を次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはfedora
に該当します。 同様に、Atlas Search では、fedora
というタームの検索結果のtitle
フィールドにhat
またはheadgear
のいずれかを持つドキュメントは含まれません。これは、fedora
を次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のhat
またはheadgear
のいずれか。 これらの例をテストするには、上記のクエリのquery
フィールドの値をfedora
またはheadgear
に置き換えて、クエリを再度実行します。
movies
コレクションで簡単な Atlas Search クエリを実行します。
これらのコード例では、次のタスクを実行します。
mongodb
パッケージと依存関係をインポートします。Atlas クラスターへの接続を確立します。
カーソルを反復処理して、クエリに一致するドキュメントを出力します。
Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。
synonyms-equivalent-query.go
という名前のファイルを作成します。コード例をコピーして、
synonyms-equivalent-query.go
ファイルに貼り付けます。このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでautomobile
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語automobile
のシノニムとして構成されている単語を検索します。 。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "time" 7 8 "go.mongodb.org/mongo-driver/bson" 9 "go.mongodb.org/mongo-driver/mongo" 10 "go.mongodb.org/mongo-driver/mongo/options" 11 ) 12 13 // define structure of movies collection 14 type MovieCollection struct { 15 title string `bson:"Title,omitempty"` 16 } 17 18 func main() { 19 var err error 20 // connect to the Atlas cluster 21 ctx := context.Background() 22 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>")) 23 if err != nil { 24 panic(err) 25 } 26 defer client.Disconnect(ctx) 27 // set namespace 28 collection := client.Database("sample_mflix").Collection("movies") 29 // define pipeline 30 searchStage := bson.D{{"$search", bson.D{{"index", "synonyms-tutorial"}, {"text", bson.D{{"path", "title"}, {"query", "automobile"}, {"synonyms", "transportSynonyms"}}}}}} 31 limitStage := bson.D{{"$limit", 10}} 32 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"_id", 0}, {"score", bson.D{{"$meta", "searchScore"}}}}}} 33 // specify the amount of time the operation can run on the server 34 opts := options.Aggregate().SetMaxTime(5 * time.Second) 35 // run pipeline 36 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts) 37 if err != nil { 38 panic(err) 39 } 40 // print results 41 var results []bson.D 42 if err = cursor.All(context.TODO(), &results); err != nil { 43 panic(err) 44 } 45 for _, result := range results { 46 fmt.Println(result) 47 } 48 } サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。次のコマンドを実行して、コレクションをクエリします。
go run synonyms-equivalent-query.go synonyms-equivalent-query.go
を実行すると、プログラムは次のドキュメントをターミナルに出力します。[{title Cars} {score 4.197734832763672}] [{title Planes, Trains & Automobiles} {score 3.8511905670166016}] [{title Car Wash} {score 3.39473032951355}] [{title Used Cars} {score 3.39473032951355}] [{title Blue Car} {score 3.39473032951355}] [{title Cars 2} {score 3.39473032951355}] [{title Stealing Cars} {score 3.39473032951355}] [{title Cop Car} {score 3.39473032951355}] [{title The Cars That Eat People} {score 2.8496146202087402}] [{title Khrustalyov, My Car!} {score 2.8496146202087402}] Atlas Search 結果には、
title
フィールドにcar
とautomobile
である映画が含まれていますが、クエリ用語はautomobile
です。これは、automobile
をcar
、vehicle
、automobile
のシノニムとして設定したためです。コレクションのインデックスで指定されるsample_synonyms
名前のシノニム ソース コレクション内の }。 Atlas Search では、car
とvehicle
という単語の検索で同じ結果が返されます。 これをテストするには、上記のクエリのquery
フィールドの値をcar
またはvehicle
に置き換えてクエリを実行します。
synonyms-explicit-query.go
という名前のファイルを作成します。コード例をコピーして、
synonyms-explicit-query.go
ファイルに貼り付けます。このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでboat
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語boat
のシノニムとして構成されている単語を検索します。 。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "time" 7 8 "go.mongodb.org/mongo-driver/bson" 9 "go.mongodb.org/mongo-driver/mongo" 10 "go.mongodb.org/mongo-driver/mongo/options" 11 ) 12 13 // define structure of movies collection 14 type MovieCollection struct { 15 title string `bson:"Title,omitempty"` 16 } 17 18 func main() { 19 var err error 20 // connect to the Atlas cluster 21 ctx := context.Background() 22 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>")) 23 if err != nil { 24 panic(err) 25 } 26 defer client.Disconnect(ctx) 27 // set namespace 28 collection := client.Database("sample_mflix").Collection("movies") 29 // define pipeline 30 searchStage := bson.D{{"$search", bson.D{{"text", bson.D{{"index", "synonyms-tutorial"}, {"path", "title"}, {"query", "boat"}, {"synonyms", "transportSynonyms"}}}}}} 31 limitStage := bson.D{{"$limit", 10}} 32 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"_id", 0}, {"score", bson.D{{"$meta", "searchScore"}}}}}} 33 // specify the amount of time the operation can run on the server 34 opts := options.Aggregate().SetMaxTime(5 * time.Second) 35 // run pipeline 36 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts) 37 if err != nil { 38 panic(err) 39 } 40 // print results 41 var results []bson.D 42 if err = cursor.All(context.TODO(), &results); err != nil { 43 panic(err) 44 } 45 for _, result := range results { 46 fmt.Println(result) 47 } 48 } サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。次のコマンドを実行して、コレクションをクエリします。
go run synonyms-explicit-query.go [{title Vessel} {score 5.373150825500488}] [{title Boats} {score 4.589139938354492}] [{title And the Ship Sails On} {score 4.3452959060668945}] [{title Broken Vessels} {score 4.3452959060668945}] [{title Sailing to Paradise} {score 4.3452959060668945}] [{title Boat People} {score 3.711261749267578}] [{title Boat Trip} {score 3.711261749267578}] [{title Three Men in a Boat} {score 3.1153182983398438}] [{title The Glass Bottom Boat} {score 3.1153182983398438}] [{title Jack Goes Boating} {score 3.1153182983398438}] Atlas Search 結果には、
title
フィールドにboat
、vessel
、sail
である映画が含まれていますboat
、vessel
、sail
をシノニム(同意語)でboat
のシノニムとして設定したためです。sample_synonyms
という名前のソース コレクション。これはコレクションのインデックスで指定されます。Atlas Search では、結果内の「
vessel
」という単語の検索のみで次のドキュメントが返されます。{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 } Atlas Search では、シノニム(同意語)の
title
フィールドにboat
またはsail
のいずれかを持つドキュメントが含まれません。vessel
をシノニム(同意語)のboat
またはsail
のシノニムとして設定しなかったためです。ソース コレクション。 これをテストするには、上記クエリのquery
フィールドの値をvessel
に置き換えて、クエリを再度実行します。同様に、Atlas Search では、
sail
というタームの検索結果のみで次のドキュメントが返されます。{ "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 } Atlas Search では、シノニム(同意語)の
title
フィールドにboat
またはvessel
のいずれかを持つドキュメントが含まれません。sail
をシノニム(同意語)のboat
またはvessel
のシノニムとして設定しなかったためです。ソース コレクション。 この例をテストするには、上記のクエリのquery
フィールドの値をsail
に置き換えて、クエリを再度実行します。
複数のシノニム(同意語)マッピングを含むインデックスを作成した場合は、高度な Atlas Search クエリを実行します。
これらのコード例では、次のタスクを実行します。
mongodb
パッケージと依存関係をインポートします。Atlas クラスターへの接続を確立します。
カーソルを反復処理して、クエリに一致するドキュメントを出力します。
Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。
synonyms-equivalent-query.go
という名前のファイルを作成します。コード例をコピーして、
synonyms-equivalent-query.go
ファイルに貼り付けます。このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでautomobile
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語automobile
のシノニムとして構成されている単語を検索します。 。 このクエリは、title
フィールドでattire
という単語も検索し、attireSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、attire_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語attire
のシノニムとして設定されている単語を検索します。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "time" 7 8 "go.mongodb.org/mongo-driver/bson" 9 "go.mongodb.org/mongo-driver/mongo" 10 "go.mongodb.org/mongo-driver/mongo/options" 11 ) 12 13 // define structure of movies collection 14 type MovieCollection struct { 15 title string `bson:"Title,omitempty"` 16 } 17 18 func main() { 19 var err error 20 // connect to the Atlas cluster 21 ctx := context.Background() 22 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>")) 23 if err != nil { 24 panic(err) 25 } 26 defer client.Disconnect(ctx) 27 // set namespace 28 collection := client.Database("sample_mflix").Collection("movies") 29 // define pipeline 30 searchStage := bson.D{{"$search", bson.M{ 31 "index": "synonyms-tutorial", 32 "compound": bson.M{ 33 "should": bson.A{ 34 bson.M{ 35 "text": bson.D{ 36 {"path", "title"}, {"query", "automobile"}, {"synonyms", "transportSynonyms"}, 37 }, 38 }, 39 bson.M{ 40 "text": bson.D{ 41 {"path", "title"}, {"query", "attire"}, {"synonyms", "attireSynonyms"}, 42 }, 43 }, 44 }, 45 }, 46 }}} 47 limitStage := bson.D{{"$limit", 10}} 48 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"_id", 0}, {"score", bson.D{{"$meta", "searchScore"}}}}}} 49 // specify the amount of time the operation can run on the server 50 opts := options.Aggregate().SetMaxTime(5 * time.Second) 51 // run pipeline 52 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts) 53 if err != nil { 54 panic(err) 55 } 56 // print results 57 var results []bson.D 58 if err = cursor.All(context.TODO(), &results); err != nil { 59 panic(err) 60 } 61 for _, result := range results { 62 fmt.Println(result) 63 } 64 } サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。次のコマンドを実行して、コレクションをクエリします。
go run synonyms-equivalent-query.go [{title The Dress} {score 4.812004089355469}] [{title Cars} {score 4.197734832763672}] [{title Dressed to Kill} {score 3.891493320465088}] [{title 27 Dresses} {score 3.891493320465088}] [{title Planes, Trains & Automobiles} {score 3.8511905670166016}] [{title Car Wash} {score 3.39473032951355}] [{title Used Cars} {score 3.39473032951355}] [{title Blue Car} {score 3.39473032951355}] [{title Cars 2} {score 3.39473032951355}] [{title Stealing Cars} {score 3.39473032951355}] Atlas Search 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語
automobile
のtitle
フィールドにcar
が含まれる映画が含まれます。これは、シノニム(同意語)ソース コレクションで、automobile
をcar
、vehicle
、automobile
のシノニムとして設定したためです。transport_synonyms
。 結果には、クエリ タームattire
のタイトル フィールドにdress
が含まれる映画も含まれます。これは、attire
をdress
、apparel
、attire
のシノニムとして設定したためです。名前はシノニム(同意語)ソース コレクションで、attire_synonyms
10} を 、 、 のシノニムとして設定したためです。 .Atlas Search では、
transport_synonyms
ソース コレクション内のcar
またはvehicle
およびattire_synonyms
ソース コレクション内のdress
またはapparel
を検索すると、同じ結果が返されます。 この例をテストするには、上記のクエリのquery
フィールドの値をcar
またはvehicle
に置き換え、上記のクエリのquery
フィールドの値をdress
またはapparel
に置き換えます。クエリを再度実行します。
synonyms-explicit-query.go
という名前のファイルを作成します。コード例をコピーして、
synonyms-explicit-query.go
ファイルに貼り付けます。このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでboat
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語boat
のシノニムとして構成されている単語を検索します。 。 このクエリは、title
フィールドでhat
という単語も検索し、attireSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、attire_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語hat
のシノニムとして設定されている単語を検索します。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 package main 2 3 import ( 4 "context" 5 "fmt" 6 "time" 7 8 "go.mongodb.org/mongo-driver/bson" 9 "go.mongodb.org/mongo-driver/mongo" 10 "go.mongodb.org/mongo-driver/mongo/options" 11 ) 12 13 // define structure of movies collection 14 type MovieCollection struct { 15 title string `bson:"Title,omitempty"` 16 } 17 18 func main() { 19 var err error 20 // connect to the Atlas cluster 21 ctx := context.Background() 22 client, err := mongo.Connect(ctx, options.Client().ApplyURI("<connection-string>")) 23 if err != nil { 24 panic(err) 25 } 26 defer client.Disconnect(ctx) 27 // set namespace 28 collection := client.Database("sample_mflix").Collection("movies") 29 // define pipeline 30 searchStage := bson.D{{"$search", bson.M{ 31 "index": "synonyms-tutorial", 32 "compound": bson.M{ 33 "must": bson.A{ 34 bson.M{ 35 "text": bson.D{ 36 {"path", "title"}, {"query", "boat"}, {"synonyms", "transportSynonyms"}, 37 }, 38 }, 39 bson.M{ 40 "text": bson.D{ 41 {"path", "title"}, {"query", "hat"}, {"synonyms", "attireSynonyms"}, 42 }, 43 }, 44 }, 45 }, 46 }}} 47 limitStage := bson.D{{"$limit", 10}} 48 projectStage := bson.D{{"$project", bson.D{{"title", 1}, {"_id", 0}, {"score", bson.D{{"$meta", "searchScore"}}}}}} 49 // specify the amount of time the operation can run on the server 50 opts := options.Aggregate().SetMaxTime(5 * time.Second) 51 // run pipeline 52 cursor, err := collection.Aggregate(ctx, mongo.Pipeline{searchStage, limitStage, projectStage}, opts) 53 if err != nil { 54 panic(err) 55 } 56 // print results 57 var results []bson.D 58 if err = cursor.All(context.TODO(), &results); err != nil { 59 panic(err) 60 } 61 for _, result := range results { 62 fmt.Println(result) 63 } 64 } サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。次のコマンドを実行して、コレクションをクエリします。
go run synonyms-explicit-query.go [{title Fedora} {score 5.673145294189453}] [{title Vessel} {score 5.373150825500488}] [{title Boats} {score 4.589139938354492}] [{title And the Ship Sails On} {score 4.3452959060668945}] [{title Broken Vessels} {score 4.3452959060668945}] [{title Sailing to Paradise} {score 4.3452959060668945}] [{title Top Hat} {score 4.066137313842773}] [{title A Hatful of Rain} {score 4.066137313842773}] [{title Boat People} {score 3.711261749267578}] [{title Boat Trip} {score 3.711261749267578}] Atlas Search 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語 の フィールドに
vessel
、boat
、および が含まれる映画が含まれます。これは、sail
title
boat
boat
boat
を 、vessel
、およびsail
transport_synonyms
のシノニムとして設定したためです。 という名前のシノニム(同意語)ソース コレクション内のAtlas Search では、
vessel
というタームの検索結果のtitle
フィールドにboat
またはsail
のいずれかを持つドキュメントは含まれません。これは、boat
vessel
を次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはsail
に該当します。 同様に、Atlas Search では、sail
というタームの検索結果のtitle
フィールドにboat
またはvessel
のいずれかを持つドキュメントは含まれません。これは、sail
を次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のboat
またはvessel
のいずれか。 これらの例をテストするには、上記のクエリのquery
フィールドの値をvessel
またはsail
に置き換えて、クエリを再度実行します。結果には、クエリ用語
hat
のタイトル フィールドにfedora
とhat
が含まれる映画も含まれます。これは、シノニム(同意語)内でhat
をhat
、fedora
、headgear
のシノニムとして設定したためです。attire_synonyms
という名前のソース コレクション。Atlas Search では、
headgear
というタームの検索結果のtitle
フィールドにhat
またはfedora
のいずれかを持つドキュメントは含まれません。これは、hat
headgear
を次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはfedora
に該当します。 同様に、Atlas Search では、fedora
というタームの検索結果のtitle
フィールドにhat
またはheadgear
のいずれかを持つドキュメントは含まれません。これは、fedora
を次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のhat
またはheadgear
のいずれか。 これらの例をテストするには、上記のクエリのquery
フィールドの値をfedora
またはheadgear
に置き換えて、クエリを再度実行します。
movies
コレクションで簡単な Atlas Search クエリを実行します。
これらのコード例では、次のタスクを実行します。
mongodb
パッケージと依存関係をインポートします。Atlas クラスターへの接続を確立します。
カーソルを反復処理して、クエリに一致するドキュメントを出力します。
Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。
SynonymsEquivalentQuery.java
という名前のファイルを作成します。以下のコードをコピーして、 ファイルに貼り付けます。
このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでautomobile
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語automobile
のシノニムとして構成されている単語を検索します。 。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 import java.util.Arrays; 2 import static com.mongodb.client.model.Filters.eq; 3 import static com.mongodb.client.model.Aggregates.limit; 4 import static com.mongodb.client.model.Aggregates.project; 5 import static com.mongodb.client.model.Projections.excludeId; 6 import static com.mongodb.client.model.Projections.fields; 7 import static com.mongodb.client.model.Projections.include; 8 import static com.mongodb.client.model.Projections.computed; 9 import com.mongodb.client.MongoClient; 10 import com.mongodb.client.MongoClients; 11 import com.mongodb.client.MongoCollection; 12 import com.mongodb.client.MongoDatabase; 13 import org.bson.Document; 14 15 public class SynonymsEquivalentQuery { 16 public static void main( String[] args ) { 17 // define query 18 Document agg = new Document("$search", 19 new Document("index", "synonyms-tutorial") 20 .append("text", 21 new Document("query", "automobile") 22 .append("path","title") 23 .append("synonyms", "transportSynonyms"))); 24 25 // specify connection 26 String uri = "<connection-string>"; 27 28 // establish connection and set namespace 29 try (MongoClient mongoClient = MongoClients.create(uri)) { 30 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 31 MongoCollection<Document> collection = database.getCollection("movies"); 32 33 // run query and print results 34 collection.aggregate(Arrays.asList(agg, 35 limit(10), 36 project(fields(excludeId(), include("title"), computed("score", new Document("$meta", "searchScore"))))) 37 ).forEach(doc -> System.out.println(doc.toJson())); 38 } 39 } 40 } 注意
Maven 環境でサンプル コードを実行するには、 ファイルのインポート ステートメントの上に以下を追加します。
package com.mongodb.drivers; サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。SynonymsEquivalentQuery.java
ファイルをコンパイルして実行します。javac SynonymsEquivalentQuery.java java SynonymsEquivalentQuery {"title": "Cars", "score": 4.197734832763672} {"title": "Planes, Trains & Automobiles", "score": 3.8511905670166016} {"title": "Car Wash", "score": 3.39473032951355} {"title": "Used Cars", "score": 3.39473032951355} {"title": "Blue Car", "score": 3.39473032951355} {"title": "Cars 2", "score": 3.39473032951355} {"title": "Stealing Cars", "score": 3.39473032951355} {"title": "Cop Car", "score": 3.39473032951355} {"title": "The Cars That Eat People", "score": 2.8496146202087402} {"title": "Khrustalyov, My Car!", "score": 2.8496146202087402} Atlas Search 結果には、
title
フィールドにcar
とautomobile
である映画が含まれていますが、クエリ用語はautomobile
です。これは、automobile
をcar
、vehicle
、automobile
のシノニムとして設定したためです。コレクションのインデックスで指定されるsample_synonyms
名前のシノニム ソース コレクション内の }。 Atlas Search では、car
とvehicle
という単語の検索で同じ結果が返されます。 これをテストするには、上記のクエリのquery
フィールドの値をcar
またはvehicle
に置き換えてクエリを実行します。
SynonymsExplicitQuery.java
という名前のファイルを作成します。以下のコードをコピーして、 ファイルに貼り付けます。
このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでboat
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語boat
のシノニムとして構成されている単語を検索します。 。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 import java.util.Arrays; 2 import static com.mongodb.client.model.Filters.eq; 3 import static com.mongodb.client.model.Aggregates.limit; 4 import static com.mongodb.client.model.Aggregates.project; 5 import static com.mongodb.client.model.Projections.excludeId; 6 import static com.mongodb.client.model.Projections.fields; 7 import static com.mongodb.client.model.Projections.include; 8 import static com.mongodb.client.model.Projections.computed; 9 import com.mongodb.client.MongoClient; 10 import com.mongodb.client.MongoClients; 11 import com.mongodb.client.MongoCollection; 12 import com.mongodb.client.MongoDatabase; 13 import org.bson.Document; 14 15 public class SynonymsExplicitQuery { 16 public static void main( String[] args ) { 17 // define query 18 Document agg = new Document("$search", 19 new Document("index", "synonyms-tutorial") 20 .append("text", 21 new Document("query", "boat") 22 .append("path","title") 23 .append("synonyms", "transportSynonyms"))); 24 25 // specify connection 26 String uri = "<connection-string>"; 27 28 // establish connection and set namespace 29 try (MongoClient mongoClient = MongoClients.create(uri)) { 30 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 31 MongoCollection<Document> collection = database.getCollection("movies"); 32 33 // run query and print results 34 collection.aggregate(Arrays.asList(agg, 35 limit(10), 36 project(fields(excludeId(), include("title"), computed("score", new Document("$meta", "searchScore"))))) 37 ).forEach(doc -> System.out.println(doc.toJson())); 38 } 39 } 40 } 注意
Maven 環境でサンプル コードを実行するには、 ファイルのインポート ステートメントの上に以下を追加します。
package com.mongodb.drivers; サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。SynonymsExplicitQuery.java
ファイルをコンパイルして実行します。javac SynonymsExplicitQuery.java java SynonymsExplicitQuery {"title": "Vessel", "score": 5.373150825500488} {"title": "Boats", "score": 4.589139938354492} {"title": "And the Ship Sails On", "score": 4.3452959060668945} {"title": "Broken Vessels", "score": 4.3452959060668945} {"title": "Sailing to Paradise", "score": 4.3452959060668945} {"title": "Boat People", "score": 3.711261749267578} {"title": "Boat Trip", "score": 3.711261749267578} {"title": "Three Men in a Boat", "score": 3.1153182983398438} {"title": "The Glass Bottom Boat", "score": 3.1153182983398438} {"title": "Jack Goes Boating", "score": 3.1153182983398438} Atlas Search 結果には、
title
フィールドにboat
、vessel
、sail
である映画が含まれていますboat
、vessel
、sail
をシノニム(同意語)でboat
のシノニムとして設定したためです。sample_synonyms
という名前のソース コレクション。これはコレクションのインデックスで指定されます。Atlas Search では、結果内の「
vessel
」という単語の検索のみで次のドキュメントが返されます。{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 } Atlas Search では、シノニム(同意語)の
title
フィールドにboat
またはsail
のいずれかを持つドキュメントが含まれません。vessel
をシノニム(同意語)のboat
またはsail
のシノニムとして設定しなかったためです。ソース コレクション。 これをテストするには、上記クエリのquery
フィールドの値をvessel
に置き換えて、クエリを再度実行します。同様に、Atlas Search では、
sail
というタームの検索結果のみで次のドキュメントが返されます。{ "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 } Atlas Search では、シノニム(同意語)の
title
フィールドにboat
またはvessel
のいずれかを持つドキュメントが含まれません。sail
をシノニム(同意語)のboat
またはvessel
のシノニムとして設定しなかったためです。ソース コレクション。 この例をテストするには、上記のクエリのquery
フィールドの値をsail
に置き換えて、クエリを再度実行します。
複数のシノニム(同意語)マッピングを使用してインデックスを作成した場合は、高度な Atlas Search クエリを実行します。
これらのコード例では、次のタスクを実行します。
mongodb
パッケージと依存関係をインポートします。Atlas クラスターへの接続を確立します。
カーソルを反復処理して、クエリに一致するドキュメントを出力します。
Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。
SynonymsEquivalentQuery.java
という名前のファイルを作成します。以下のコードをコピーして、 ファイルに貼り付けます。
このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでautomobile
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語automobile
のシノニムとして構成されている単語を検索します。 。 このクエリは、title
フィールドでattire
という単語も検索し、attireSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、attire_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語attire
のシノニムとして設定されている単語を検索します。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 import java.util.Arrays; 2 import static com.mongodb.client.model.Filters.eq; 3 import static com.mongodb.client.model.Aggregates.limit; 4 import static com.mongodb.client.model.Aggregates.project; 5 import static com.mongodb.client.model.Projections.computed; 6 import static com.mongodb.client.model.Projections.excludeId; 7 import static com.mongodb.client.model.Projections.fields; 8 import static com.mongodb.client.model.Projections.include; 9 import com.mongodb.client.MongoClient; 10 import com.mongodb.client.MongoClients; 11 import com.mongodb.client.MongoCollection; 12 import com.mongodb.client.MongoDatabase; 13 import org.bson.Document; 14 15 public class SynonymsEquivalentQuery { 16 public static void main( String[] args ) { 17 Document agg = new Document("$search", 18 new Document("index", "synonyms-tutorial") 19 .append("compound", 20 new Document("should", Arrays.asList(new Document("text", 21 new Document("path", "title") 22 .append("query", "automobile") 23 .append("synonyms", "transportSynonyms")), 24 new Document("text", 25 new Document("path", "title") 26 .append("query", "attire") 27 .append("synonyms", "attireSynonyms")))))); 28 29 String uri = "<connection-string>"; 30 31 try (MongoClient mongoClient = MongoClients.create(uri)) { 32 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 33 MongoCollection<Document> collection = database.getCollection("movies"); 34 35 collection.aggregate(Arrays.asList(agg, 36 limit(10), 37 project(fields(excludeId(), include("title"), computed("score", new Document("$meta", "searchScore"))))) 38 ).forEach(doc -> System.out.println(doc.toJson())); 39 } 40 } 41 } 注意
Maven 環境でサンプル コードを実行するには、 ファイルのインポート ステートメントの上に以下を追加します。
package com.mongodb.drivers; サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。SynonymsEquivalentQuery.java
ファイルをコンパイルして実行します。javac SynonymsEquivalentQuery.java java SynonymsEquivalentQuery {"title": "The Dress", "score": 4.812004089355469} {"title": "Cars", "score": 4.197734832763672} {"title": "Dressed to Kill", "score": 3.891493320465088} {"title": "27 Dresses", "score": 3.891493320465088} {"title": "Planes, Trains & Automobiles", "score": 3.8511905670166016} {"title": "Car Wash", "score": 3.39473032951355} {"title": "Used Cars", "score": 3.39473032951355} {"title": "Blue Car", "score": 3.39473032951355} {"title": "Cars 2", "score": 3.39473032951355} {"title": "Stealing Cars", "score": 3.39473032951355} Atlas Search 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語
automobile
のtitle
フィールドにcar
が含まれる映画が含まれます。これは、シノニム(同意語)ソース コレクションで、automobile
をcar
、vehicle
、automobile
のシノニムとして設定したためです。transport_synonyms
。 結果には、クエリ タームattire
のタイトル フィールドにdress
が含まれる映画も含まれます。これは、attire
をdress
、apparel
、attire
のシノニムとして設定したためです。名前はシノニム(同意語)ソース コレクションで、attire_synonyms
10} を 、 、 のシノニムとして設定したためです。 .Atlas Search では、
transport_synonyms
ソース コレクション内のcar
またはvehicle
およびattire_synonyms
ソース コレクション内のdress
またはapparel
を検索すると、同じ結果が返されます。 この例をテストするには、上記のクエリのquery
フィールドの値をcar
またはvehicle
に置き換え、上記のクエリのquery
フィールドの値をdress
またはapparel
に置き換えます。クエリを再度実行します。
SynonymsExplicitQuery.java
という名前のファイルを作成します。以下のコードをコピーして、 ファイルに貼り付けます。
このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでboat
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語boat
のシノニムとして構成されている単語を検索します。 。 このクエリは、title
フィールドでhat
という単語も検索し、attireSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、attire_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語hat
のシノニムとして設定されている単語を検索します。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 import java.util.Arrays; 2 import static com.mongodb.client.model.Filters.eq; 3 import static com.mongodb.client.model.Aggregates.limit; 4 import static com.mongodb.client.model.Aggregates.project; 5 import static com.mongodb.client.model.Projections.computed; 6 import static com.mongodb.client.model.Projections.excludeId; 7 import static com.mongodb.client.model.Projections.fields; 8 import static com.mongodb.client.model.Projections.include; 9 import com.mongodb.client.MongoClient; 10 import com.mongodb.client.MongoClients; 11 import com.mongodb.client.MongoCollection; 12 import com.mongodb.client.MongoDatabase; 13 import org.bson.Document; 14 15 public class SynonymsExplicitQuery { 16 public static void main( String[] args ) { 17 Document agg = new Document("$search", 18 new Document("index", "synonyms-tutorial") 19 .append("compound", 20 new Document("should", Arrays.asList(new Document("text", 21 new Document("path", "title") 22 .append("query", "boat") 23 .append("synonyms", "transportSynonyms")), 24 new Document("text", 25 new Document("path", "title") 26 .append("query", "hat") 27 .append("synonyms", "attireSynonyms")))))); 28 29 String uri = "<connection-string>"; 30 31 try (MongoClient mongoClient = MongoClients.create(uri)) { 32 MongoDatabase database = mongoClient.getDatabase("sample_mflix"); 33 MongoCollection<Document> collection = database.getCollection("movies"); 34 35 collection.aggregate(Arrays.asList(agg, 36 limit(10), 37 project(fields(excludeId(), include("title"), computed("score", new Document("$meta", "searchScore"))))) 38 ).forEach(doc -> System.out.println(doc.toJson())); 39 } 40 } 41 } 注意
Maven 環境でサンプル コードを実行するには、 ファイルのインポート ステートメントの上に以下を追加します。
package com.mongodb.drivers; サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。SynonymsExplicitQuery.java
ファイルをコンパイルして実行します。javac SynonymsExplicitQuery.java java SynonymsExplicitQuery {"title": "Fedora", "score": 5.673145294189453} {"title": "Vessel", "score": 5.373150825500488} {"title": "Boats", "score": 4.589139938354492} {"title": "And the Ship Sails On", "score": 4.3452959060668945} {"title": "Broken Vessels", "score": 4.3452959060668945} {"title": "Sailing to Paradise", "score": 4.3452959060668945} {"title": "Top Hat", "score": 4.066137313842773} {"title": "A Hatful of Rain", "score": 4.066137313842773} {"title": "Boat People", "score": 3.711261749267578} {"title": "Boat Trip", "score": 3.711261749267578} Atlas Search 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語 の フィールドに
vessel
、boat
、および が含まれる映画が含まれます。これは、sail
title
boat
boat
boat
を 、vessel
、およびsail
transport_synonyms
のシノニムとして設定したためです。 という名前のシノニム(同意語)ソース コレクション内のAtlas Search では、
vessel
というタームの検索結果のtitle
フィールドにboat
またはsail
のいずれかを持つドキュメントは含まれません。これは、boat
vessel
を次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはsail
に該当します。 同様に、Atlas Search では、sail
というタームの検索結果のtitle
フィールドにboat
またはvessel
のいずれかを持つドキュメントは含まれません。これは、sail
を次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のboat
またはvessel
のいずれか。 これらの例をテストするには、上記のクエリのquery
フィールドの値をvessel
またはsail
に置き換えて、クエリを再度実行します。結果には、クエリ用語
hat
のタイトル フィールドにfedora
とhat
が含まれる映画も含まれます。これは、シノニム(同意語)内でhat
をhat
、fedora
、headgear
のシノニムとして設定したためです。attire_synonyms
という名前のソース コレクション。Atlas Search では、
headgear
というタームの検索結果のtitle
フィールドにhat
またはfedora
のいずれかを持つドキュメントは含まれません。これは、hat
headgear
を次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはfedora
に該当します。 同様に、Atlas Search では、fedora
というタームの検索結果のtitle
フィールドにhat
またはheadgear
のいずれかを持つドキュメントは含まれません。これは、fedora
を次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のhat
またはheadgear
のいずれか。 これらの例をテストするには、上記のクエリのquery
フィールドの値をfedora
またはheadgear
に置き換えて、クエリを再度実行します。
movies
コレクションで簡単な Atlas Search クエリを実行します。
これらのコード例では、次のタスクを実行します。
mongodb
パッケージと依存関係をインポートします。Atlas クラスターへの接続を確立します。
クエリに一致するドキュメントを
AggregateFlow
インスタンスから出力します。
Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。
SynonymsEquivalentQuery.kt
という名前のファイルを作成します。以下のコードをコピーして、 ファイルに貼り付けます。
このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでautomobile
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語automobile
のシノニムとして構成されている単語を検索します。 。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 import com.mongodb.client.model.Aggregates.limit 2 import com.mongodb.client.model.Aggregates.project 3 import com.mongodb.client.model.Projections.* 4 import com.mongodb.kotlin.client.coroutine.MongoClient 5 import kotlinx.coroutines.runBlocking 6 import org.bson.Document 7 8 fun main() { 9 // establish connection and set namespace 10 val uri = "<connection-string>" 11 val mongoClient = MongoClient.create(uri) 12 val database = mongoClient.getDatabase("sample_mflix") 13 val collection = database.getCollection<Document>("movies") 14 15 runBlocking { 16 // define query 17 val agg = Document( 18 "\$search", 19 Document("index", "synonyms-tutorial") 20 .append( 21 "text", 22 Document("query", "automobile") 23 .append("path", "title") 24 .append("synonyms", "transportSynonyms") 25 ) 26 ) 27 28 // run query and print results 29 val resultsFlow = collection.aggregate<Document>( 30 listOf( 31 agg, 32 limit(10), 33 project(fields( 34 excludeId(), 35 include("title"), 36 computed("score", Document("\$meta", "searchScore")) 37 )) 38 ) 39 ) 40 resultsFlow.collect { println(it) } 41 } 42 mongoClient.close() 43 } サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。SynonymsEquivalentQuery.kt
ファイルを実行します。IDE で
SynonymsEquivalentQuery.kt
プログラムを実行すると、次のドキュメントが出力されます。Document{{title=Cars, score=4.140600204467773}} Document{{title=Planes, Trains & Automobiles, score=3.8122920989990234}} Document{{title=Blue Car, score=3.348478317260742}} Document{{title=Used Cars, score=3.348478317260742}} Document{{title=Cars 2, score=3.348478317260742}} Document{{title=Stealing Cars, score=3.348478317260742}} Document{{title=Cop Car, score=3.348478317260742}} Document{{title=Car Wash, score=3.348478317260742}} Document{{title=The Cars That Eat People, score=2.810762405395508}} Document{{title=Revenge of the Electric Car, score=2.810762405395508}} Atlas Search 結果には、
title
フィールドにcar
とautomobile
である映画が含まれていますが、クエリ用語はautomobile
です。これは、automobile
をcar
、vehicle
、automobile
のシノニムとして設定したためです。コレクションのインデックスで指定されるsample_synonyms
名前のシノニム ソース コレクション内の }。 Atlas Search では、car
とvehicle
という単語の検索で同じ結果が返されます。 これをテストするには、上記のクエリのquery
フィールドの値をcar
またはvehicle
に置き換えてクエリを実行します。
SynonymsExplicitQuery.kt
という名前のファイルを作成します。以下のコードをコピーして、 ファイルに貼り付けます。
このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでboat
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語boat
のシノニムとして構成されている単語を検索します。 。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 import com.mongodb.client.model.Aggregates.limit 2 import com.mongodb.client.model.Aggregates.project 3 import com.mongodb.client.model.Projections.* 4 import com.mongodb.kotlin.client.coroutine.MongoClient 5 import kotlinx.coroutines.runBlocking 6 import org.bson.Document 7 8 fun main() { 9 // establish connection and set namespace 10 val uri = "<connection-string>" 11 val mongoClient = MongoClient.create(uri) 12 val database = mongoClient.getDatabase("sample_mflix") 13 val collection = database.getCollection<Document>("movies") 14 15 runBlocking { 16 // define query 17 val agg = Document( 18 "\$search", 19 Document("index", "synonyms-tutorial") 20 .append( 21 "text", 22 Document("query", "boat") 23 .append("path", "title") 24 .append("synonyms", "transportSynonyms") 25 ) 26 ) 27 28 // run query and print results 29 val resultsFlow = collection.aggregate<Document>( 30 listOf( 31 agg, 32 limit(10), 33 project(fields( 34 excludeId(), 35 include("title"), 36 computed("score", Document("\$meta", "searchScore")) 37 )) 38 ) 39 ) 40 resultsFlow.collect { println(it) } 41 } 42 mongoClient.close() 43 } サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。SynonymsExplicitQuery.kt
ファイルを実行します。IDE で
SynonymsExplicitQuery.kt
プログラムを実行すると、次のドキュメントが出力されます。Document{{title=Vessel, score=5.3159894943237305}} Document{{title=Boats, score=4.597315311431885}} Document{{title=Sailing to Paradise, score=4.299008369445801}} Document{{title=And the Ship Sails On, score=4.299008369445801}} Document{{title=Broken Vessels, score=4.299008369445801}} Document{{title=Boat Trip, score=3.717820644378662}} Document{{title=Boat People, score=3.717820644378662}} Document{{title=Jack Goes Boating, score=3.1207938194274902}} Document{{title=The Glass Bottom Boat, score=3.1207938194274902}} Document{{title=Raspberry Boat Refugee, score=3.1207938194274902}} Atlas Search 結果には、
title
フィールドにboat
、vessel
、sail
である映画が含まれていますboat
、vessel
、sail
をシノニム(同意語)でboat
のシノニムとして設定したためです。sample_synonyms
という名前のソース コレクション。これはコレクションのインデックスで指定されます。Atlas Search では、結果内の「
vessel
」という単語の検索のみで次のドキュメントが返されます。{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 } Atlas Search では、シノニム(同意語)の
title
フィールドにboat
またはsail
のいずれかを持つドキュメントが含まれません。vessel
をシノニム(同意語)のboat
またはsail
のシノニムとして設定しなかったためです。ソース コレクション。 これをテストするには、上記クエリのquery
フィールドの値をvessel
に置き換えて、クエリを再度実行します。同様に、Atlas Search では、
sail
というタームの検索結果のみで次のドキュメントが返されます。{ "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 } Atlas Search では、シノニム(同意語)の
title
フィールドにboat
またはvessel
のいずれかを持つドキュメントが含まれません。sail
をシノニム(同意語)のboat
またはvessel
のシノニムとして設定しなかったためです。ソース コレクション。 この例をテストするには、上記のクエリのquery
フィールドの値をsail
に置き換えて、クエリを再度実行します。
複数のシノニム(同意語)マッピングを使用してインデックスを作成した場合は、高度な Atlas Search クエリを実行します。
これらのコード例では、次のタスクを実行します。
mongodb
パッケージと依存関係をインポートします。Atlas クラスターへの接続を確立します。
クエリに一致するドキュメントを
AggregateFlow
インスタンスから出力します。
Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。
SynonymsEquivalentQuery.kt
という名前のファイルを作成します。以下のコードをコピーして、 ファイルに貼り付けます。
このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでautomobile
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語automobile
のシノニムとして構成されている単語を検索します。 。 このクエリは、title
フィールドでattire
という単語も検索し、attireSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、attire_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語attire
のシノニムとして設定されている単語を検索します。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 import com.mongodb.client.model.Aggregates.limit 2 import com.mongodb.client.model.Aggregates.project 3 import com.mongodb.client.model.Projections.* 4 import com.mongodb.kotlin.client.coroutine.MongoClient 5 import kotlinx.coroutines.runBlocking 6 import org.bson.Document 7 8 fun main() { 9 // establish connection and set namespace 10 val uri = "<connection-string>" 11 val mongoClient = MongoClient.create(uri) 12 val database = mongoClient.getDatabase("sample_mflix") 13 val collection = database.getCollection<Document>("movies") 14 15 runBlocking { 16 // define query 17 val agg = Document( 18 "\$search", 19 Document("index", "synonyms-tutorial") 20 .append( 21 "compound", 22 Document( 23 "should", listOf( 24 Document( 25 "text", 26 Document("path", "title") 27 .append("query", "automobile") 28 .append("synonyms", "transportSynonyms") 29 ), 30 Document( 31 "text", 32 Document("path", "title") 33 .append("query", "attire") 34 .append("synonyms", "attireSynonyms") 35 ) 36 ) 37 ) 38 ) 39 ) 40 41 // run query and print results 42 val resultsFlow = collection.aggregate<Document>( 43 listOf( 44 agg, 45 limit(10), 46 project(fields( 47 excludeId(), 48 include("title"), 49 computed("score", Document("\$meta", "searchScore")) 50 )) 51 ) 52 ) 53 resultsFlow.collect { println(it) } 54 } 55 mongoClient.close() 56 } サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。SynonymsEquivalentQuery.kt
ファイルを実行します。IDE で
SynonymsEquivalentQuery.kt
プログラムを実行すると、次のドキュメントが出力されます。Document{{title=The Dress, score=4.852960586547852}} Document{{title=Cars, score=4.140600204467773}} Document{{title=27 Dresses, score=3.9245595932006836}} Document{{title=Planes, Trains & Automobiles, score=3.8122920989990234}} Document{{title=Car Wash, score=3.348478317260742}} Document{{title=Used Cars, score=3.348478317260742}} Document{{title=Blue Car, score=3.348478317260742}} Document{{title=Cars 2, score=3.348478317260742}} Document{{title=Stealing Cars, score=3.348478317260742}} Document{{title=Cop Car, score=3.348478317260742}} Atlas Search 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語
automobile
のtitle
フィールドにcar
が含まれる映画が含まれます。これは、シノニム(同意語)ソース コレクションで、automobile
をcar
、vehicle
、automobile
のシノニムとして設定したためです。transport_synonyms
。 結果には、クエリ タームattire
のタイトル フィールドにdress
が含まれる映画も含まれます。これは、attire
をdress
、apparel
、attire
のシノニムとして設定したためです。名前はシノニム(同意語)ソース コレクションで、attire_synonyms
10} を 、 、 のシノニムとして設定したためです。 .Atlas Search では、
transport_synonyms
ソース コレクション内のcar
またはvehicle
およびattire_synonyms
ソース コレクション内のdress
またはapparel
を検索すると、同じ結果が返されます。 この例をテストするには、上記のクエリのquery
フィールドの値をcar
またはvehicle
に置き換え、上記のクエリのquery
フィールドの値をdress
またはapparel
に置き換えます。クエリを再度実行します。
SynonymsExplicitQuery.kt
という名前のファイルを作成します。以下のコードをコピーして、 ファイルに貼り付けます。
このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでboat
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語boat
のシノニムとして構成されている単語を検索します。 。 このクエリは、title
フィールドでhat
という単語も検索し、attireSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、attire_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語hat
のシノニムとして設定されている単語を検索します。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 import com.mongodb.client.model.Aggregates.limit 2 import com.mongodb.client.model.Aggregates.project 3 import com.mongodb.client.model.Projections.* 4 import com.mongodb.kotlin.client.coroutine.MongoClient 5 import kotlinx.coroutines.runBlocking 6 import org.bson.Document 7 8 fun main() { 9 // establish connection and set namespace 10 val uri = "<connection-string>" 11 val mongoClient = MongoClient.create(uri) 12 val database = mongoClient.getDatabase("sample_mflix") 13 val collection = database.getCollection<Document>("movies") 14 15 runBlocking { 16 // define query 17 val agg = Document( 18 "\$search", 19 Document("index", "synonyms-tutorial") 20 .append( 21 "compound", 22 Document( 23 "should", listOf( 24 Document( 25 "text", 26 Document("path", "title") 27 .append("query", "boat") 28 .append("synonyms", "transportSynonyms") 29 ), 30 Document( 31 "text", 32 Document("path", "title") 33 .append("query", "hat") 34 .append("synonyms", "attireSynonyms") 35 ) 36 ) 37 ) 38 ) 39 ) 40 41 // run query and print results 42 val resultsFlow = collection.aggregate<Document>( 43 listOf( 44 agg, 45 limit(10), 46 project(fields( 47 excludeId(), 48 include("title"), 49 computed("score", Document("\$meta", "searchScore")) 50 )) 51 ) 52 ) 53 54 resultsFlow.collect { println(it) } 55 } 56 57 mongoClient.close() 58 } サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。SynonymsExplicitQuery.kt
ファイルを実行します。IDE で
SynonymsExplicitQuery.kt
プログラムを実行すると、次のドキュメントが出力されます。Document{{title=Fedora, score=5.6159772872924805}} Document{{title=Vessel, score=5.3159894943237305}} Document{{title=Boats, score=4.597315311431885}} Document{{title=And the Ship Sails On, score=4.299008369445801}} Document{{title=Broken Vessels, score=4.299008369445801}} Document{{title=Sailing to Paradise, score=4.299008369445801}} Document{{title=Top Hat, score=4.01986026763916}} Document{{title=A Hatful of Rain, score=4.01986026763916}} Document{{title=Boat People, score=3.717820644378662}} Document{{title=Boat Trip, score=3.717820644378662}} Atlas Search 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語 の フィールドに
vessel
、boat
、および が含まれる映画が含まれます。これは、sail
title
boat
boat
boat
を 、vessel
、およびsail
transport_synonyms
のシノニムとして設定したためです。 という名前のシノニム(同意語)ソース コレクション内のAtlas Search では、
vessel
というタームの検索結果のtitle
フィールドにboat
またはsail
のいずれかを持つドキュメントは含まれません。これは、boat
vessel
を次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはsail
に該当します。 同様に、Atlas Search では、sail
というタームの検索結果のtitle
フィールドにboat
またはvessel
のいずれかを持つドキュメントは含まれません。これは、sail
を次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のboat
またはvessel
のいずれか。 これらの例をテストするには、上記のクエリのquery
フィールドの値をvessel
またはsail
に置き換えて、クエリを再度実行します。結果には、クエリ用語
hat
のタイトル フィールドにfedora
とhat
が含まれる映画も含まれます。これは、シノニム(同意語)内でhat
をhat
、fedora
、headgear
のシノニムとして設定したためです。attire_synonyms
という名前のソース コレクション。Atlas Search では、
headgear
というタームの検索結果のtitle
フィールドにhat
またはfedora
のいずれかを持つドキュメントは含まれません。これは、hat
headgear
を次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはfedora
に該当します。 同様に、Atlas Search では、fedora
というタームの検索結果のtitle
フィールドにhat
またはheadgear
のいずれかを持つドキュメントは含まれません。これは、fedora
を次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のhat
またはheadgear
のいずれか。 これらの例をテストするには、上記のクエリのquery
フィールドの値をfedora
またはheadgear
に置き換えて、クエリを再度実行します。
movies
コレクションで簡単な Atlas Search クエリを実行します。
これらのコード例では、次のタスクを実行します。
MongoDB の Node.js ドライバーである
mongodb
をインポートします。Atlas クラスターへの接続を確立するための
MongoClient
クラスのインスタンスを作成します。カーソルを反復処理して、クエリに一致するドキュメントを出力します。
Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。
synonyms-equivalent-query.js
という名前のファイルを作成します。コード例をコピーして、
synonyms-equivalent-query.js
ファイルに貼り付けます。このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでautomobile
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語automobile
のシノニムとして構成されている単語を検索します。 。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 const MongoClient = require("mongodb").MongoClient; 2 const assert = require("assert"); 3 4 const agg = [ 5 { 6 $search: { 7 index: "synonyms-tutorial", 8 text: { 9 path: "title", 10 query: "automobile", 11 synonyms: "transportSynonyms", 12 }, 13 }, 14 }, 15 { 16 $limit: 10, 17 }, 18 { 19 $project: { 20 _id: 0, 21 title: 1, 22 score: { $meta: "searchScore" }, 23 }, 24 }, 25 ]; 26 27 MongoClient.connect( 28 "<connection-string>", 29 { useNewUrlParser: true, useUnifiedTopology: true }, 30 async function (connectErr, client) { 31 assert.equal(null, connectErr); 32 const coll = client.db("sample_mflix").collection("movies"); 33 let cursor = await coll.aggregate(agg); 34 await cursor.forEach((doc) => console.log(doc)); 35 client.close(); 36 } 37 ); サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。次のコマンドを実行して、コレクションをクエリします。
node synonyms-equivalent-query.js { title: 'Cars', score: 4.197734832763672 } { title: 'Planes, Trains & Automobiles', score: 3.8511905670166016 } { title: 'Car Wash', score: 3.39473032951355 } { title: 'Used Cars', score: 3.39473032951355 } { title: 'Blue Car', score: 3.39473032951355 } { title: 'Cars 2', score: 3.39473032951355 } { title: 'Stealing Cars', score: 3.39473032951355 } { title: 'Cop Car', score: 3.39473032951355 } { title: 'The Cars That Eat People', score: 2.8496146202087402 } { title: 'Khrustalyov, My Car!', score: 2.8496146202087402 } Atlas Search 結果には、
title
フィールドにcar
とautomobile
である映画が含まれていますが、クエリ用語はautomobile
です。これは、automobile
をcar
、vehicle
、automobile
のシノニムとして設定したためです。コレクションのインデックスで指定されるsample_synonyms
名前のシノニム ソース コレクション内の }。 Atlas Search では、car
とvehicle
という単語の検索で同じ結果が返されます。 これをテストするには、上記のクエリのquery
フィールドの値をcar
またはvehicle
に置き換えてクエリを実行します。
synonyms-explicit-query.js
という名前のファイルを作成します。コード例をコピーして、
synonyms-explicit-query.js
ファイルに貼り付けます。このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでboat
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語boat
のシノニムとして構成されている単語を検索します。 。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 const MongoClient = require("mongodb").MongoClient; 2 const assert = require("assert"); 3 4 const agg = [ 5 { 6 $search: { 7 index: "synonyms-tutorial", 8 text: { 9 path: "title", 10 query: "boat", 11 synonyms: "transportSynonyms", 12 }, 13 }, 14 }, 15 { 16 $limit: 10, 17 }, 18 { 19 $project: { 20 _id: 0, 21 title: 1, 22 score: { $meta: "searchScore" }, 23 }, 24 }, 25 ]; 26 27 MongoClient.connect( 28 "<connection-string>", 29 { useNewUrlParser: true, useUnifiedTopology: true }, 30 async function (connectErr, client) { 31 assert.equal(null, connectErr); 32 const coll = client.db("sample_mflix").collection("movies"); 33 let cursor = await coll.aggregate(agg); 34 await cursor.forEach((doc) => console.log(doc)); 35 client.close(); 36 } 37 ); サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。次のコマンドを実行して、コレクションをクエリします。
node synonyms-explicit-query.js { title: 'Vessel', score: 5.373150825500488 } { title: 'Boats', score: 4.589139938354492 } { title: 'And the Ship Sails On', score: 4.3452959060668945 } { title: 'Broken Vessels', score: 4.3452959060668945 } { title: 'Sailing to Paradise', score: 4.3452959060668945 } { title: 'Boat People', score: 3.711261749267578 } { title: 'Boat Trip', score: 3.711261749267578 } { title: 'Three Men in a Boat', score: 3.1153182983398438 } { title: 'The Glass Bottom Boat', score: 3.1153182983398438 } { title: 'Jack Goes Boating', score: 3.1153182983398438 } Atlas Search 結果には、
title
フィールドにboat
、vessel
、sail
である映画が含まれていますboat
、vessel
、sail
をシノニム(同意語)でboat
のシノニムとして設定したためです。sample_synonyms
という名前のソース コレクション。これはコレクションのインデックスで指定されます。Atlas Search では、結果内の「
vessel
」という単語の検索のみで次のドキュメントが返されます。{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 } Atlas Search では、シノニム(同意語)の
title
フィールドにboat
またはsail
のいずれかを持つドキュメントが含まれません。vessel
をシノニム(同意語)のboat
またはsail
のシノニムとして設定しなかったためです。ソース コレクション。 これをテストするには、上記クエリのquery
フィールドの値をvessel
に置き換えて、クエリを再度実行します。同様に、Atlas Search では、
sail
というタームの検索結果のみで次のドキュメントが返されます。{ "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 } Atlas Search では、シノニム(同意語)の
title
フィールドにboat
またはvessel
のいずれかを持つドキュメントが含まれません。sail
をシノニム(同意語)のboat
またはvessel
のシノニムとして設定しなかったためです。ソース コレクション。 この例をテストするには、上記のクエリのquery
フィールドの値をsail
に置き換えて、クエリを再度実行します。
複数のシノニム(同意語)マッピングを使用してインデックスを作成した場合は、高度な Atlas Search クエリを実行します。
これらのコード例では、次のタスクを実行します。
MongoDB の Node.js ドライバーである
mongodb
をインポートします。Atlas クラスターへの接続を確立するための
MongoClient
クラスのインスタンスを作成します。カーソルを反復処理して、クエリに一致するドキュメントを出力します。
Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。
synonyms-equivalent-query.js
という名前のファイルを作成します。コード例をコピーして、
synonyms-equivalent-query.js
ファイルに貼り付けます。このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでautomobile
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語automobile
のシノニムとして構成されている単語を検索します。 。 このクエリは、title
フィールドでattire
という単語も検索し、attireSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、attire_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語attire
のシノニムとして設定されている単語を検索します。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 pconst MongoClient = require("mongodb").MongoClient; 2 const assert = require("assert"); 3 4 const agg = [ 5 { 6 '$search': { 7 'index': 'synonyms-tutorial', 8 'compound': { 9 'should': [ 10 { 11 'text': { 12 'path': 'title', 13 'query': 'automobile', 14 'synonyms': 'transportSynonyms' 15 } 16 }, { 17 'text': { 18 'path': 'title', 19 'query': 'attire', 20 'synonyms': 'attireSynonyms' 21 } 22 } 23 ] 24 } 25 } 26 }, { 27 '$limit': 10 28 }, { 29 '$project': { 30 '_id': 0, 31 'title': 1, 32 'score': { 33 '$meta': 'searchScore' 34 } 35 } 36 } 37 ]; 38 39 MongoClient.connect( 40 "<connection-string>", 41 { useNewUrlParser: true, useUnifiedTopology: true }, 42 async function (connectErr, client) { 43 assert.equal(null, connectErr); 44 const coll = client.db("sample_mflix").collection("movies"); 45 let cursor = await coll.aggregate(agg); 46 await cursor.forEach((doc) => console.log(doc)); 47 client.close(); 48 } 49 ); サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。次のコマンドを実行して、コレクションをクエリします。
node synonyms-equivalent-query.js { title: 'The Dress', score: 4.812004089355469 } { title: 'Cars', score: 4.197734832763672 } { title: 'Dressed to Kill', score: 3.891493320465088 } { title: '27 Dresses', score: 3.891493320465088 } { title: 'Planes, Trains & Automobiles', score: 3.8511905670166016 } { title: 'Car Wash', score: 3.39473032951355 } { title: 'Used Cars', score: 3.39473032951355 } { title: 'Blue Car', score: 3.39473032951355 } { title: 'Cars 2', score: 3.39473032951355 } { title: 'Stealing Cars', score: 3.39473032951355 } Atlas Search 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語
automobile
のtitle
フィールドにcar
が含まれる映画が含まれます。これは、シノニム(同意語)ソース コレクションで、automobile
をcar
、vehicle
、automobile
のシノニムとして設定したためです。transport_synonyms
。 結果には、クエリ タームattire
のタイトル フィールドにdress
が含まれる映画も含まれます。これは、attire
をdress
、apparel
、attire
のシノニムとして設定したためです。名前はシノニム(同意語)ソース コレクションで、attire_synonyms
10} を 、 、 のシノニムとして設定したためです。 .Atlas Search では、
transport_synonyms
ソース コレクション内のcar
またはvehicle
およびattire_synonyms
ソース コレクション内のdress
またはapparel
を検索すると、同じ結果が返されます。 この例をテストするには、上記のクエリのquery
フィールドの値をcar
またはvehicle
に置き換え、上記のクエリのquery
フィールドの値をdress
またはapparel
に置き換えます。クエリを再度実行します。
synonyms-explicit-query.js
という名前のファイルを作成します。コード例をコピーして、
synonyms-explicit-query.js
ファイルに貼り付けます。このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでboat
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語boat
のシノニムとして構成されている単語を検索します。 。 このクエリは、title
フィールドでhat
という単語も検索し、attireSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、attire_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語hat
のシノニムとして設定されている単語を検索します。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 const MongoClient = require("mongodb").MongoClient; 2 const assert = require("assert"); 3 4 const agg = [ 5 { 6 '$search': { 7 'index': 'synonyms-tutorial', 8 'compound': { 9 'should': [ 10 { 11 'text': { 12 'path': 'title', 13 'query': 'boat', 14 'synonyms': 'transportSynonyms' 15 } 16 }, { 17 'text': { 18 'path': 'title', 19 'query': 'hat', 20 'synonyms': 'attireSynonyms' 21 } 22 } 23 ] 24 } 25 } 26 }, { 27 '$limit': 10 28 }, { 29 '$project': { 30 '_id': 0, 31 'title': 1, 32 'score': { 33 '$meta': 'searchScore' 34 } 35 } 36 } 37 ]; 38 39 MongoClient.connect( 40 "<connection-string>", 41 { useNewUrlParser: true, useUnifiedTopology: true }, 42 async function (connectErr, client) { 43 assert.equal(null, connectErr); 44 const coll = client.db("sample_mflix").collection("movies"); 45 let cursor = await coll.aggregate(agg); 46 await cursor.forEach((doc) => console.log(doc)); 47 client.close(); 48 } 49 ); サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。次のコマンドを実行して、コレクションをクエリします。
node synonyms-explicit-query.js { title: 'Fedora', score: 5.673145294189453 } { title: 'Vessel', score: 5.373150825500488 } { title: 'Boats', score: 4.589139938354492 } { title: 'And the Ship Sails On', score: 4.3452959060668945 } { title: 'Broken Vessels', score: 4.3452959060668945 } { title: 'Sailing to Paradise', score: 4.3452959060668945 } { title: 'Top Hat', score: 4.066137313842773 } { title: 'A Hatful of Rain', score: 4.066137313842773 } { title: 'Boat People', score: 3.711261749267578 } { title: 'Boat Trip', score: 3.711261749267578 } Atlas Search 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語 の フィールドに
vessel
、boat
、および が含まれる映画が含まれます。これは、sail
title
boat
boat
boat
を 、vessel
、およびsail
transport_synonyms
のシノニムとして設定したためです。 という名前のシノニム(同意語)ソース コレクション内のAtlas Search では、
vessel
というタームの検索結果のtitle
フィールドにboat
またはsail
のいずれかを持つドキュメントは含まれません。これは、boat
vessel
を次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはsail
に該当します。 同様に、Atlas Search では、sail
というタームの検索結果のtitle
フィールドにboat
またはvessel
のいずれかを持つドキュメントは含まれません。これは、sail
を次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のboat
またはvessel
のいずれか。 これらの例をテストするには、上記のクエリのquery
フィールドの値をvessel
またはsail
に置き換えて、クエリを再度実行します。結果には、クエリ用語
hat
のタイトル フィールドにfedora
とhat
が含まれる映画も含まれます。これは、シノニム(同意語)内でhat
をhat
、fedora
、headgear
のシノニムとして設定したためです。attire_synonyms
という名前のソース コレクション。Atlas Search では、
headgear
というタームの検索結果のtitle
フィールドにhat
またはfedora
のいずれかを持つドキュメントは含まれません。これは、hat
headgear
を次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはfedora
に該当します。 同様に、Atlas Search では、fedora
というタームの検索結果のtitle
フィールドにhat
またはheadgear
のいずれかを持つドキュメントは含まれません。これは、fedora
を次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のhat
またはheadgear
のいずれか。 これらの例をテストするには、上記のクエリのquery
フィールドの値をfedora
またはheadgear
に置き換えて、クエリを再度実行します。
movies
コレクションで簡単な Atlas Search クエリを実行します。
これらのコード例では、次のタスクを実行します。
pymongo
、MongoDB の Python ドライバー、およびDNSシード リスト接続文字列を使用してpymongo
をAtlas
に接続するために必要なdns
モジュールをインポートします。Atlas クラスターへの接続を確立するための
MongoClient
クラスのインスタンスを作成します。カーソルを反復処理して、クエリに一致するドキュメントを出力します。
Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。
synonyms-equivalent-query.py
という名前のファイルを作成します。コード例をコピーして、
synonyms-equivalent.py
ファイルに貼り付けます。このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでautomobile
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語automobile
のシノニムとして構成されている単語を検索します。 。$limit
ステージを使用して出力を10の結果に制限します$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 import pymongo 2 import dns 3 4 client = pymongo.MongoClient('<connection-string>') 5 result = client['sample_mflix']['movies'].aggregate([ 6 { 7 '$search': { 8 'index': 'synonyms-tutorial', 9 'text': { 10 'path': 'title', 11 'query': 'automobile', 12 'synonyms': 'transportSynonyms' 13 } 14 } 15 }, 16 { 17 '$limit': 10 18 }, 19 { 20 '$project': { 21 '_id': 0, 22 'title': 1, 23 'score': { 24 '$meta': 'searchScore' 25 } 26 } 27 } 28 ]) 29 30 for i in result: 31 print(i) サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。次のコマンドを実行して、コレクションをクエリします。
python synonyms-equivalent-query.py {'title': 'Cars', 'score': 4.197734832763672} {'title': 'Planes, Trains & Automobiles', 'score': 3.8511905670166016} {'title': 'Car Wash', 'score': 3.39473032951355} {'title': 'Used Cars', 'score': 3.39473032951355} {'title': 'Blue Car', 'score': 3.39473032951355} {'title': 'Cars 2', 'score': 3.39473032951355} {'title': 'Stealing Cars', 'score': 3.39473032951355} {'title': 'Cop Car', 'score': 3.39473032951355} {'title': 'The Cars That Eat People', 'score': 2.8496146202087402} {'title': 'Khrustalyov, My Car!', 'score': 2.8496146202087402} Atlas Search 結果には、
title
フィールドにcar
とautomobile
である映画が含まれていますが、クエリ用語はautomobile
です。これは、automobile
をcar
、vehicle
、automobile
のシノニムとして設定したためです。コレクションのインデックスで指定されるsample_synonyms
名前のシノニム ソース コレクション内の }。 Atlas Search では、car
とvehicle
という単語の検索で同じ結果が返されます。 これをテストするには、上記のクエリのquery
フィールドの値をcar
またはvehicle
に置き換えてクエリを実行します。
synonyms-explicit-query.py
という名前のファイルを作成します。コード例をコピーして、
synonyms-explicit.py
ファイルに貼り付けます。このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでboat
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語boat
のシノニムとして構成されている単語を検索します。 。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 import pymongo 2 import dns 3 4 client = pymongo.MongoClient('<connection-string>') 5 result = client['sample_mflix']['movies'].aggregate([ 6 { 7 '$search': { 8 'index': 'synonyms-tutorial', 9 'text': { 10 'path': 'title', 11 'query': 'boat', 12 'synonyms': 'transportSynonyms' 13 } 14 } 15 }, 16 { 17 '$limit': 10 18 }, 19 { 20 '$project': { 21 '_id': 0, 22 'title': 1, 23 'score': { 24 '$meta': 'searchScore' 25 } 26 } 27 } 28 ]) 29 30 for i in result: 31 print(i) サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。次のコマンドを実行して、コレクションをクエリします。
python synonyms-explicit-query.py {'title': 'Vessel', 'score': 5.373150825500488} {'title': 'Boats', 'score': 4.589139938354492} {'title': 'And the Ship Sails On', 'score': 4.3452959060668945} {'title': 'Broken Vessels', 'score': 4.3452959060668945} {'title': 'Sailing to Paradise', 'score': 4.3452959060668945} {'title': 'Boat People', 'score': 3.711261749267578} {'title': 'Boat Trip', 'score': 3.711261749267578} {'title': 'Three Men in a Boat', 'score': 3.1153182983398438} {'title': 'The Glass Bottom Boat', 'score': 3.1153182983398438} {'title': 'Jack Goes Boating', 'score': 3.1153182983398438} Atlas Search 結果には、
title
フィールドにboat
、vessel
、sail
である映画が含まれていますboat
、vessel
、sail
をシノニム(同意語)でboat
のシノニムとして設定したためです。sample_synonyms
という名前のソース コレクション。これはコレクションのインデックスで指定されます。Atlas Search では、結果内の「
vessel
」という単語の検索のみで次のドキュメントが返されます。{ "title" : "Vessel", "score" : 5.373150825500488 } { "title" : "Broken Vessels", "score" : 4.3452959060668945 } Atlas Search では、シノニム(同意語)の
title
フィールドにboat
またはsail
のいずれかを持つドキュメントが含まれません。vessel
をシノニム(同意語)のboat
またはsail
のシノニムとして設定しなかったためです。ソース コレクション。 これをテストするには、上記クエリのquery
フィールドの値をvessel
に置き換えて、クエリを再度実行します。同様に、Atlas Search では、
sail
というタームの検索結果のみで次のドキュメントが返されます。{ "title" : "And the Ship Sails On", "score" : 4.3452959060668945 } { "title" : "Sailing to Paradise", "score" : 4.3452959060668945 } Atlas Search では、シノニム(同意語)の
title
フィールドにboat
またはvessel
のいずれかを持つドキュメントが含まれません。sail
をシノニム(同意語)のboat
またはvessel
のシノニムとして設定しなかったためです。ソース コレクション。 この例をテストするには、上記のクエリのquery
フィールドの値をsail
に置き換えて、クエリを再度実行します。
複数のシノニム(同意語)マッピングを使用してインデックスを作成した場合は、高度な Atlas Search クエリを実行します。
これらのコード例では、次のタスクを実行します。
pymongo
、MongoDB の Python ドライバー、およびDNSシード リスト接続文字列を使用してpymongo
をAtlas
に接続するために必要なdns
モジュールをインポートします。Atlas クラスターへの接続を確立するための
MongoClient
クラスのインスタンスを作成します。カーソルを反復処理して、クエリに一致するドキュメントを出力します。
Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。
synonyms-equivalent-query.py
という名前のファイルを作成します。コード例をコピーして、
synonyms-equivalent.py
ファイルに貼り付けます。このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでautomobile
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語automobile
のシノニムとして構成されている単語を検索します。 。 このクエリは、title
フィールドでattire
という単語も検索し、attireSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、attire_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語attire
のシノニムとして設定されている単語を検索します。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 import pymongo 2 import dns 3 4 client = pymongo.MongoClient('<connection-string>') 5 result = client['sample_mflix']['movies'].aggregate([ 6 { 7 '$search': { 8 'index': 'synonyms-tutorial', 9 'compound': { 10 'should': [ 11 { 12 'text': { 13 'path': 'title', 14 'query': 'automobile', 15 'synonyms': 'transportSynonyms' 16 } 17 }, { 18 'text': { 19 'path': 'title', 20 'query': 'attire', 21 'synonyms': 'attireSynonyms' 22 } 23 } 24 ] 25 } 26 } 27 }, { 28 '$limit': 10 29 }, { 30 '$project': { 31 '_id': 0, 32 'title': 1, 33 'score': { 34 '$meta': 'searchScore' 35 } 36 } 37 } 38 ]) 39 40 for i in result: 41 print(i) サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。次のコマンドを実行して、コレクションをクエリします。
python synonyms-equivalent-query.py {'title': 'The Dress', 'score': 4.812004089355469} {'title': 'Cars', 'score': 4.197734832763672} {'title': 'Dressed to Kill', 'score': 3.891493320465088} {'title': '27 Dresses', 'score': 3.891493320465088} {'title': 'Planes, Trains & Automobiles', 'score': 3.8511905670166016} {'title': 'Car Wash', 'score': 3.39473032951355} {'title': 'Used Cars', 'score': 3.39473032951355} {'title': 'Blue Car', 'score': 3.39473032951355} {'title': 'Cars 2', 'score': 3.39473032951355} {'title': 'Stealing Cars', 'score': 3.39473032951355} Atlas Search 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語
automobile
のtitle
フィールドにcar
が含まれる映画が含まれます。これは、シノニム(同意語)ソース コレクションで、automobile
をcar
、vehicle
、automobile
のシノニムとして設定したためです。transport_synonyms
。 結果には、クエリ タームattire
のタイトル フィールドにdress
が含まれる映画も含まれます。これは、attire
をdress
、apparel
、attire
のシノニムとして設定したためです。名前はシノニム(同意語)ソース コレクションで、attire_synonyms
10} を 、 、 のシノニムとして設定したためです。 .Atlas Search では、
transport_synonyms
ソース コレクション内のcar
またはvehicle
およびattire_synonyms
ソース コレクション内のdress
またはapparel
を検索すると、同じ結果が返されます。 この例をテストするには、上記のクエリのquery
フィールドの値をcar
またはvehicle
に置き換え、上記のクエリのquery
フィールドの値をdress
またはapparel
に置き換えます。クエリを再度実行します。
synonyms-explicit-query.py
という名前のファイルを作成します。コード例をコピーして、
synonyms-explicit.py
ファイルに貼り付けます。このコード例には、次のステージが含まれています。
$search
ステージを使用して、title
フィールドでboat
という単語を検索し、transportSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、transport_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語boat
のシノニムとして構成されている単語を検索します。 。 このクエリは、title
フィールドでhat
という単語も検索し、attireSynonyms
という名前のシノニム(同意語)マッピング定義を使用して、attire_synonyms
という名前のシノニム(同意語)ソース コレクションでクエリ単語hat
のシノニムとして設定されている単語を検索します。$limit
ステージを使用して、出力結果を 10 に制限します。$project
ステージでは、title
以外のすべてのフィールドを除外し、score
という名前のフィールドを追加します。
1 import pymongo 2 import dns 3 4 client = pymongo.MongoClient('<connection-string>') 5 result = client['sample_mflix']['movies'].aggregate([ 6 { 7 '$search': { 8 'index': 'synonyms-tutorial', 9 'compound': { 10 'should': [ 11 { 12 'text': { 13 'path': 'title', 14 'query': 'boat', 15 'synonyms': 'transportSynonyms' 16 } 17 }, { 18 'text': { 19 'path': 'title', 20 'query': 'hat', 21 'synonyms': 'attireSynonyms' 22 } 23 } 24 ] 25 } 26 } 27 }, { 28 '$limit': 10 29 }, { 30 '$project': { 31 '_id': 0, 32 'title': 1, 33 'score': { 34 '$meta': 'searchScore' 35 } 36 } 37 } 38 ]) 39 40 for i in result: 41 print(i) サンプルを実行する前に、
<connection-string>
をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。次のコマンドを実行して、コレクションをクエリします。
python synonyms-explicit-query.py {'title': 'Fedora', 'score': 5.673145294189453} {'title': 'Vessel', 'score': 5.373150825500488} {'title': 'Boats', 'score': 4.589139938354492} {'title': 'And the Ship Sails On', 'score': 4.3452959060668945} {'title': 'Broken Vessels', 'score': 4.3452959060668945} {'title': 'Sailing to Paradise', 'score': 4.3452959060668945} {'title': 'Top Hat', 'score': 4.066137313842773} {'title': 'A Hatful of Rain', 'score': 4.066137313842773} {'title': 'Boat People', 'score': 3.711261749267578} {'title': 'Boat Trip', 'score': 3.711261749267578} Atlas Search 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語 の フィールドに
vessel
、boat
、および が含まれる映画が含まれます。これは、sail
title
boat
boat
boat
を 、vessel
、およびsail
transport_synonyms
のシノニムとして設定したためです。 という名前のシノニム(同意語)ソース コレクション内のAtlas Search では、
vessel
というタームの検索結果のtitle
フィールドにboat
またはsail
のいずれかを持つドキュメントは含まれません。これは、boat
vessel
を次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはsail
に該当します。 同様に、Atlas Search では、sail
というタームの検索結果のtitle
フィールドにboat
またはvessel
のいずれかを持つドキュメントは含まれません。これは、sail
を次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のboat
またはvessel
のいずれか。 これらの例をテストするには、上記のクエリのquery
フィールドの値をvessel
またはsail
に置き換えて、クエリを再度実行します。結果には、クエリ用語
hat
のタイトル フィールドにfedora
とhat
が含まれる映画も含まれます。これは、シノニム(同意語)内でhat
をhat
、fedora
、headgear
のシノニムとして設定したためです。attire_synonyms
という名前のソース コレクション。Atlas Search では、
headgear
というタームの検索結果のtitle
フィールドにhat
またはfedora
のいずれかを持つドキュメントは含まれません。これは、hat
headgear
を次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはfedora
に該当します。 同様に、Atlas Search では、fedora
というタームの検索結果のtitle
フィールドにhat
またはheadgear
のいずれかを持つドキュメントは含まれません。これは、fedora
を次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のhat
またはheadgear
のいずれか。 これらの例をテストするには、上記のクエリのquery
フィールドの値をfedora
またはheadgear
に置き換えて、クエリを再度実行します。