Docs Menu
Docs Home
/
MongoDB Atlas
/ /

Atlas Search でのシノニム(同意語)の使用方法

項目一覧

  • サンプル シノニム ソース コレクションをロードする
  • シノニム(同意語)マッピングの定義を使用した Atlas Search インデックスの作成
  • コレクションを検索

このチュートリアルでは、単語をシノニム(同意語)として構成するコレクションを追加する方法、 sample_mflix.moviesコレクションにシノニム マッピングを定義するインデックスを作成する方法、シノニムとして設定された単語を使用してtitleフィールドに対して Atlas Search クエリを実行する方法について説明します。

チュートリアルでは、次の手順について説明します。

  1. 1 つ以上のサンプル シノニム ソース コレクションをsample_mflixデータベースにロードします。

  2. sample_mflix.moviesコレクション向けに 1 つ以上のシノニム マッピングを含む Atlas Search インデックスを作成します。

  3. シノニム ソース コレクションでシノニムとして構成された単語について、 sample_mflix.moviesコレクションのtitleフィールドに対して Atlas Search クエリを実行します。

開始する前に、Atlas クラスターが前提条件に記載されている要件を満たしていることを確認してください。

注意

複数のシノニム マッピングを作成し、このチュートリアルの高度なサンプル クエリを実行するには、 M10以上のクラスターが必要です。

Atlas Search インデックスを作成するには、プロジェクトに対するProject Data Access Admin以上のアクセス権が必要です。

シノニム(同意語)ソース コレクション内の各ドキュメントは、1 つ以上の単語が、それらの単語の 1 つ以上のシノニムにマップされる方法を示しています。 シノニム(同意語)ソース コレクション ドキュメント内のフィールドと単語のマッピング タイプの詳細については、「 シノニム(同意語)ソース コレクション ドキュメントの形式 」を参照してください。

開始するには、シノニム ソース コレクションを作成し、シノニム ソース コレクションを使用するデータベースにそのコレクションを追加します。 このセクションでは、 sample_mflixデータベースに 1 つまたは 2 つのサンプル シノニム ソース コレクションを作成し、同じデータベース内のmoviesコレクションのインデックスを持つシノニム ソース コレクションを使用します。

1
  1. まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー

  2. まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。

  3. まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。

    [ クラスター]ページが表示されます。

2

クラスターの [Browse Collections] ボタンをクリックします。

Data Explorerが表示されます。

3

無料または共有階層クラスターを実行している場合は、トランスポートシノニム(同意語) タブの手順に従って、インデックスに単一のシノニム マッピング定義用の コレクションを作成します。 M10以上のクラスターがあり、インデックス内に複数のシノニム マッピングを作成する場合は、両方のタブの手順に従って、トランスポート シノニムAtlas のシノニムコレクションの両方を作成します。

  1. sample_mflixデータベースを展開し、次をクリックします:アイコンをクリックして、 Create Collectionモーダルを開きます。

  2. Collection nameフィールドにtransport_synonymsと入力します。

  3. [ Createをクリックして、 sample_mflixデータベースにコレクションを作成します。

  1. sample_mflixデータベースを展開し、次をクリックします:アイコンをクリックして、 Create Collectionモーダルを開きます。

  2. Collection nameフィールドにattire_synonymsと入力します。

  3. [ Createをクリックして、 sample_mflixデータベースにコレクションを作成します。

4

タブの手順に従って、それぞれのコレクションにデータを読み込みます。

  1. transport_synonyms コレクションが未選択の場合、選択します。

  2. コレクションに追加するサンプル ドキュメントごとにInsert Documentをクリックします。

  3. デフォルトのドキュメントを置換するには、 JSONビュー( {} )をクリックします。

  4. 次のサンプル ドキュメントを一度に 1 つずつコピーして貼り付け、 Insertをクリックしてドキュメントを 1 つずつ コレクションに追加します。

    {
    "mappingType": "equivalent",
    "synonyms": ["car", "vehicle", "automobile"]
    }
    {
    "mappingType": "explicit",
    "input": ["boat"],
    "synonyms": ["boat", "vessel", "sail"]
    }
  1. attire_synonyms コレクションが未選択の場合、選択します。

  2. コレクションに追加するサンプル ドキュメントごとにInsert Documentをクリックします。

  3. デフォルトのドキュメントを置換するには、JSON ビュー ({}) をクリックします。

  4. 次のサンプル ドキュメントを一度に 1 つずつコピーして貼り付け、 Insertをクリックしてドキュメントを 1 つずつ コレクションに追加します。

    {
    "mappingType": "equivalent",
    "synonyms": ["dress", "apparel", "attire"]
    }
    {
    "mappingType": "explicit",
    "input": ["hat"],
    "synonyms": ["hat", "fedora", "headgear"]
    }

コレクションのインデックス内のシノニム(同意語)マッピングは、シノニム ソース コレクションと、コレクションで使用する アナライザ を指定します。

このセクションでは、 sample_mflix.moviesコレクション向けの 1 つまたは複数のシノニム マッピングを定義する Atlas Search インデックスを作成します。 インデックス内のマッピング定義は、 sample_mflixデータベースで作成したシノニム ソース コレクションを参照します。

1
  1. まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー

  2. まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。

  3. まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。

    [ Clusters (クラスター) ] ページが表示されます。

2

GoAtlas Searchページには、サイドバー、Data Explorer 、またはクラスターの詳細ページから できます。

  1. サイドバーで、 Services見出しの下のAtlas Searchをクリックします。

  2. [ Select data sourceドロップダウンからクラスターを選択し、[ Go to Atlas Search ] をクリックします。

    Atlas Searchページが表示されます。

  1. クラスターの [Browse Collections] ボタンをクリックします。

  2. データベースを展開し、コレクションを選択します。

  3. コレクションのSearch Indexesタブをクリックします。

    Atlas Searchページが表示されます。

  1. クラスタの名前をクリックします。

  2. [Atlas Search] タブをクリックします。

    Atlas Searchページが表示されます。

3
4
  • ガイドを利用する場合は、Atlas Search Visual Editor を選択します。

  • Raw インデックス定義を編集するには、Atlas Search JSON Editor を選択します。

5
  1. Index Nameフィールドにsynonyms-tutorialと入力します。

    インデックスにdefaultと名付けると、 $searchパイプライン ステージでindexパラメータを指定する必要がなくなります。 インデックスにカスタム名を付ける場合は、 indexパラメータでこの名前を指定する必要があります。

  2. Database and Collectionセクションで、 sample_mflixデータベースを検索し、 moviesコレクションを選択します。

6

単純なサンプルクエリのみを実行するには、以下の単一シノニム マッピングタブのインデックス定義を使用します。 M10以上のクラスターがあり、かつ例のシノニム ソース コレクションの両方をロードした場合は、以下の [複数シノニム マッピング] タブで複数のシノニム マッピングを指定するインデックス定義を使用して、簡単なサンプルクエリと高度なサンプルクエリの両方を実行できます。

以下のインデックス定義では、以下を指定します。

  • 言語アナライザlucene.englishは、 titleフィールドのインデックス作成とクエリの両方のデフォルトのアナライザです。

  • このシノニム マッピングの名前としての名前transportSynonyms

  • transportSynonymsマッピングを使用してクエリのシノニムを検索するためのソース シノニム コレクションとしてのtransport_synonymsコレクション。 transportSynonymsは、 lucene.englishアナライザでインデックス付けされた任意のフィールド(この例ではtitleフィールドを含む)に対するテキスト クエリで使用できます。

  1. [Next] をクリックします。

  2. [Refine Your Index] をクリックします。

  3. Field Mappings セクションで [Add Field] をクリックします。

  4. [Customized Configuration] をクリックします。

  5. Add Field Mappingウィンドウで次のフィールドを設定し、次の操作の後にAddをクリックします。

    UI フィールド名
    構成
    Field Name
    titleと入力します。
    Enable Dynamic Mapping
    Offに切り替えます。
    Data Type Configuration
    1. [Add Data Type] をクリックします。

    2. String を選択します。

    3. Index AnalyzerSearch Analyzerの場合は、 ドロップダウンをクリックして、 lucene.languageアナライザ ドロップダウンからlucene.englishを選択します。

    上記に記載されていないすべてのフィールドについては、デフォルトを受け入れます。

  6. Synonym Mappings セクションで [Add Synonym Mapping] をクリックします。

  7. Add Synonym Mappingウィンドウで次のフィールドを設定し、次の操作の後にAddをクリックします。

    UI フィールド名
    構成
    Synonym Mapping Name
    transportSynonymsと入力します。
    Synonym Source Collection
    transport_synonyms を選択します。
    Analyzer
    lucene.english を選択します。
  8. [Save Changes] をクリックします。

  1. デフォルトのインデックス定義を、以下のインデックス定義で置き換えます。

    {
    "mappings": {
    "dynamic": false,
    "fields": {
    "title": {
    "analyzer": "lucene.english",
    "type": "string"
    }
    }
    },
    "synonyms": [
    {
    "analyzer": "lucene.english",
    "name": "transportSynonyms",
    "source": {
    "collection": "transport_synonyms"
    }
    }
    ]
    }
  2. [Next] をクリックします。

以下のインデックス定義では、以下を指定します。

  • 言語アナライザlucene.standardは、 titleフィールドのインデックス作成とクエリの両方のデフォルトのアナライザです。

  • シノニム マッピングの名前としての名前transportSynonymsattireSynonyms

  • transportSynonymsマッピングを使用してクエリのシノニムを検索するためのソース シノニム コレクションとしてのtransport_synonymsコレクション。 transportSynonymsは、 lucene.standardアナライザでインデックス付けされた任意のフィールド(このチュートリアルのサンプル クエリではtitleフィールドを含む)に対するテキスト クエリで使用できます。

  • attireSynonymsマッピングを使用してクエリのシノニムを検索するためのソース シノニム コレクションとしてのattire_synonymsコレクション。 attireSynonymsは、 lucene.standardアナライザでインデックス付けされた任意のフィールド(この例ではtitleフィールドを含む)に対するテキスト クエリで使用できます。

  1. [Next] をクリックします。

  2. [Refine Your Index] をクリックします。

  3. Field Mappings セクションで [Add Field] をクリックします。

  4. Add Field Mappingウィンドウで次のフィールドを設定し、 Addをクリックします。

    UI フィールド名
    構成
    Field Name
    titleと入力します。
    Enable Dynamic Mapping
    Offに切り替えます。
    Data Type Configuration
    1. String を選択します。

    2. Index AnalyzerSearch Analyzerの場合は、 ドロップダウンをクリックして、 lucene.languageアナライザ ドロップダウンからlucene.englishを選択します。

    上記に記載されていないすべてのフィールドについては、デフォルトを受け入れます。

  5. Synonym Mappings セクションで [Add Synonym Mapping] をクリックします。

  6. Add Synonym Mappingウィンドウで次のフィールドを設定し、 Addをクリックします。

    UI フィールド名
    構成
    Synonym Mapping Name
    transportSynonymsと入力します。
    Synonym Source Collection
    transport_synonyms を選択します。
    Analyzer
    lucene.english を選択します。
  7. Synonym MappingsセクションでAdd Synonym Mappingを再度クリックします。

  8. Add Synonym Mappingウィンドウで次のフィールドを設定し、次の操作の後にAddをクリックします。

    UI フィールド名
    構成
    Synonym Mapping Name
    attireSynonymsと入力します。
    Synonym Source Collection
    attire_synonyms を選択します。
    Analyzer
    lucene.english を選択します。
  9. [Save Changes] をクリックします。

  1. デフォルトのインデックス定義を、以下のインデックス定義で置き換えます。

    {
    "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"
    }
    }
    ]
    }
  2. [Next] をクリックします。

7
8

インデックスが作成中であることを知らせるモーダル ウィンドウが表示されます。Close ボタンをクリックします。

9

インデックスの構築には約 1 分かかります。 作成している間、 Status列にはBuild in Progressと表示されます。 作成が完了すると、 Status列にはActiveと表示されます。


➤ [言語の選択]ドロップダウン メニューを使用して、このセクション内の例の言語を設定します。


シノニム(同意語) は、テキスト演算子を使用するクエリでのみ使用できます。 このセクションでは、Atlas クラスターに接続し、 sample_mflix.moviesコレクションのtitleフィールドに対してtext演算子を使用してサンプル クエリを実行します。 サンプル クエリでは、シノニム(同意語)ソース コレクション内のさまざまなマッピング タイプのシノニムとして設定されている単語を使用します。 ソース コレクションは、クエリが使用するシノニム マッピングで参照されます。

1
  1. まだ表示されていない場合は、希望するプロジェクトを含む組織を選択しますナビゲーション バーのOrganizationsメニュー

  2. まだ表示されていない場合は、ナビゲーション バーのProjectsメニューから目的のプロジェクトを選択します。

  3. まだ表示されていない場合は、サイドバーの [Clusters] をクリックします。

    [ Clusters (クラスター) ] ページが表示されます。

2

GoAtlas Searchページには、サイドバー、Data Explorer 、またはクラスターの詳細ページから できます。

  1. サイドバーで、 Services見出しの下のAtlas Searchをクリックします。

  2. [ Select data sourceドロップダウンからクラスターを選択し、[ Go to Atlas Search ] をクリックします。

    Atlas Searchページが表示されます。

  1. クラスターの [Browse Collections] ボタンをクリックします。

  2. データベースを展開し、コレクションを選択します。

  3. コレクションのSearch Indexesタブをクリックします。

    Atlas Searchページが表示されます。

  1. クラスタの名前をクリックします。

  2. [Atlas Search] タブをクリックします。

    Atlas Searchページが表示されます。

3

クエリするインデックスの右側にある [ Query ] ボタンをクリックします。

4

[ Edit Queryをクリックすると、 JSON形式のデフォルトのクエリ構文サンプルが表示されます。

5

単一のシノニム マッピング定義を使用してインデックスを作成した場合は、次の 簡単な例 タブからクエリを実行します。 インデックスに複数のシノニム マッピングを定義した場合は、次の両方のタブからクエリを実行できます。

次のクエリでは、

  • 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フィールドにcarautomobileである映画が含まれていますが、クエリ用語はautomobileです。これは、 automobilecarvehicleautomobileのシノニムとして設定したためです。コレクションのインデックスで指定されるsample_synonyms 名前のシノニム ソース コレクション内の }。 Atlas Search では、 carvehicleという単語の検索で同じ結果が返されます。 これをテストするには、上記のクエリの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フィールドにboatvesselsailである映画が含まれていますboatvesselsailをシノニム(同意語)で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 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語automobiletitleフィールドにcarが含まれる映画が含まれます。これは、シノニム(同意語)ソース コレクションで、 automobilecarvehicleautomobileのシノニムとして設定したためです。 transport_synonyms 。 結果には、クエリ タームattireのタイトル フィールドにdressが含まれる映画も含まれます。これは、 attiredressapparelattireのシノニムとして設定したためです。名前はシノニム(同意語)ソース コレクションで、 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 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語 の フィールドに vesselboat 、および が含まれる映画が含まれます。これは、sail titleboatboatboatを 、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のタイトル フィールドにfedorahatが含まれる映画も含まれます。これは、シノニム(同意語)内でhathatfedoraheadgearのシノニムとして設定したためです。 attire_synonymsという名前のソース コレクション。

Atlas Search では、 headgearというタームの検索結果のtitleフィールドにhatまたはfedoraのいずれかを持つドキュメントは含まれません。これは、 hat headgearを次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはfedoraに該当します。 同様に、Atlas Search では、 fedoraというタームの検索結果のtitleフィールドにhatまたはheadgearのいずれかを持つドキュメントは含まれません。これは、 fedoraを次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のhatまたはheadgearのいずれか。 これらの例をテストするには、上記のクエリのqueryフィールドの値をfedoraまたはheadgearに置き換えて、クエリを再度実行します。

6

Search Testerでは、返されるドキュメント内のすべてのフィールドが表示されない場合があります。 クエリパスで指定したフィールドを含むすべてのフィールドを表示するには、結果内のドキュメントを展開します。

1

ターミナル ウィンドウでmongoshを開き、クラスターに接続します。 接続の詳細な手順については、「 mongosh経由での接続 」を参照してください。

2

mongoshプロンプトで次のコマンドを実行します。

use sample_mflix
3

単一のシノニム(同意語)マッピング定義を使用してインデックスを作成した場合は、以下の 簡単な例 タブでクエリを実行します。 インデックスに複数のシノニム マッピングを定義した場合は、以下の両方のタブでクエリを実行できます。

これらのクエリでは、次のパイプライン ステージを使用します。

  • $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フィールドにcarautomobileである映画が含まれていますが、クエリ用語はautomobileです。これは、 automobilecarvehicleautomobileのシノニムとして設定したためです。コレクションのインデックスで指定されるsample_synonyms 名前のシノニム ソース コレクション内の }。 Atlas Search では、 carvehicleという単語の検索で同じ結果が返されます。 これをテストするには、上記のクエリの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フィールドにboatvesselsailである映画が含まれていますboatvesselsailをシノニム(同意語)で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 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語automobiletitleフィールドにcarが含まれる映画が含まれます。これは、シノニム(同意語)ソース コレクションで、 automobilecarvehicleautomobileのシノニムとして設定したためです。 transport_synonyms 。 結果には、クエリ タームattireのタイトル フィールドにdressが含まれる映画も含まれます。これは、 attiredressapparelattireのシノニムとして設定したためです。名前はシノニム(同意語)ソース コレクションで、 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 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語 の フィールドに vesselboat 、および が含まれる映画が含まれます。これは、sail titleboatboatboatを 、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のタイトル フィールドにfedorahatが含まれる映画も含まれます。これは、シノニム(同意語)内でhathatfedoraheadgearのシノニムとして設定したためです。 attire_synonymsという名前のソース コレクション。

Atlas Search では、 headgearというタームの検索結果のtitleフィールドにhatまたはfedoraのいずれかを持つドキュメントは含まれません。これは、 hat headgearを次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはfedoraに該当します。 同様に、Atlas Search では、 fedoraというタームの検索結果のtitleフィールドにhatまたはheadgearのいずれかを持つドキュメントは含まれません。これは、 fedoraを次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のhatまたはheadgearのいずれか。 これらの例をテストするには、上記のクエリのqueryフィールドの値をfedoraまたはheadgearに置き換えて、クエリを再度実行します。

1

MongoDB Compass を開き、クラスターに接続します。 接続の詳細な手順については、「 Compass 経由での接続 」を参照してください。

2

Database画面で、 sample_mflixデータベースをクリックし、 moviesコレクションをクリックします。

3

Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。

クエリは、 titleフィールドでautomobileという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語automobileのシノニムとして設定されている単語を検索します。 このクエリには、次のステージが含まれています。

  • 出力を10の結果に制限する$limitステージ

  • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

MongoDB Compass でこのクエリを実行するには:

  1. [Aggregations] タブをクリックします。

  2. 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フィールドにcarautomobileである映画が含まれていますが、クエリ用語はautomobileです。これは、 automobilecarvehicleautomobileのシノニムとして設定したためです。コレクションのインデックスで指定されるsample_synonyms 名前のシノニム ソース コレクション内の }。 Atlas Search では、 carvehicleという単語の検索で同じ結果が返されます。 これをテストするには、上記のクエリのqueryフィールドの値をcarまたはvehicleに置き換えてクエリを実行します。

クエリは、 titleフィールドでboatという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語boatのシノニムとして設定されている単語を検索します。 これには、次のステージが含まれます。

  • 出力を10の結果に制限する$limitステージ

  • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

MongoDB Compass でこのクエリを実行するには:

  1. [Aggregations] タブをクリックします。

  2. 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フィールドにboatvesselsailである映画が含まれていますboatvesselsailをシノニム(同意語)で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に置き換えて、クエリを再度実行します。

4

Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。

クエリは、 titleフィールドでautomobileという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語automobileのシノニムとして設定されている単語を検索します。 クエリは、 titleフィールドでattireという単語も検索し、 attireSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 attire_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語attireのシノニムとして設定されている単語を検索します。

このクエリには、次のステージが含まれています。

  • 出力を10の結果に制限する$limitステージ

  • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

MongoDB Compass でこのクエリを実行するには:

  1. [Aggregations] タブをクリックします。

  2. 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 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語automobiletitleフィールドにcarが含まれる映画が含まれます。これは、シノニム(同意語)ソース コレクションで、 automobilecarvehicleautomobileのシノニムとして設定したためです。 transport_synonyms 。 結果には、クエリ タームattireのタイトル フィールドにdressが含まれる映画も含まれます。これは、 attiredressapparelattireのシノニムとして設定したためです。名前はシノニム(同意語)ソース コレクションで、 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のシノニムとして設定されている単語を検索します。

このクエリには、次のステージが含まれています。

  • 出力を10の結果に制限する$limitステージ

  • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

MongoDB Compass でこのクエリを実行するには:

  1. [Aggregations] タブをクリックします。

  2. 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 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語 の フィールドに vesselboat 、および が含まれる映画が含まれます。これは、sail titleboatboatboatを 、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のタイトル フィールドにfedorahatが含まれる映画も含まれます。これは、シノニム(同意語)内でhathatfedoraheadgearのシノニムとして設定したためです。 attire_synonymsという名前のソース コレクション。

    Atlas Search では、 headgearというタームの検索結果のtitleフィールドにhatまたはfedoraのいずれかを持つドキュメントは含まれません。これは、 hat headgearを次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはfedoraに該当します。 同様に、Atlas Search では、 fedoraというタームの検索結果のtitleフィールドにhatまたはheadgearのいずれかを持つドキュメントは含まれません。これは、 fedoraを次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のhatまたはheadgearのいずれか。 これらの例をテストするには、上記のクエリのqueryフィールドの値をfedoraまたはheadgearに置き換えて、クエリを再度実行します。

1

これらのコード例では、次のタスクを実行します。

  • mongodb パッケージと依存関係をインポートします。

  • Atlas クラスターへの接続を確立します。

  • カーソルを反復処理して、クエリに一致するドキュメントを出力します。

Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。

  1. synonyms-equivalent-query.goという名前のファイルを作成します。

  2. コード例をコピーして、 synonyms-equivalent-query.goファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでautomobileという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語automobileのシノニムとして構成されている単語を検索します。 。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1package main
    2
    3import (
    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
    14type MovieCollection struct {
    15 title string `bson:"Title,omitempty"`
    16}
    17
    18func 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}
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

  4. 次のコマンドを実行して、コレクションをクエリします。

    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フィールドにcarautomobileである映画が含まれていますが、クエリ用語はautomobileです。これは、 automobilecarvehicleautomobileのシノニムとして設定したためです。コレクションのインデックスで指定されるsample_synonyms 名前のシノニム ソース コレクション内の }。 Atlas Search では、 carvehicleという単語の検索で同じ結果が返されます。 これをテストするには、上記のクエリのqueryフィールドの値をcarまたはvehicleに置き換えてクエリを実行します。

  1. synonyms-explicit-query.goという名前のファイルを作成します。

  2. コード例をコピーして、 synonyms-explicit-query.goファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでboatという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語boatのシノニムとして構成されている単語を検索します。 。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1package main
    2
    3import (
    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
    14type MovieCollection struct {
    15 title string `bson:"Title,omitempty"`
    16}
    17
    18func 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}
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

  4. 次のコマンドを実行して、コレクションをクエリします。

    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フィールドにboatvesselsailである映画が含まれていますboatvesselsailをシノニム(同意語)で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に置き換えて、クエリを再度実行します。

2

これらのコード例では、次のタスクを実行します。

  • mongodb パッケージと依存関係をインポートします。

  • Atlas クラスターへの接続を確立します。

  • カーソルを反復処理して、クエリに一致するドキュメントを出力します。

Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。

  1. synonyms-equivalent-query.goという名前のファイルを作成します。

  2. コード例をコピーして、 synonyms-equivalent-query.goファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでautomobileという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語automobileのシノニムとして構成されている単語を検索します。 。 このクエリは、 titleフィールドでattireという単語も検索し、 attireSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 attire_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語attireのシノニムとして設定されている単語を検索します。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1package main
    2
    3import (
    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
    14type MovieCollection struct {
    15 title string `bson:"Title,omitempty"`
    16}
    17
    18func 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}
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

  4. 次のコマンドを実行して、コレクションをクエリします。

    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 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語automobiletitleフィールドにcarが含まれる映画が含まれます。これは、シノニム(同意語)ソース コレクションで、 automobilecarvehicleautomobileのシノニムとして設定したためです。 transport_synonyms 。 結果には、クエリ タームattireのタイトル フィールドにdressが含まれる映画も含まれます。これは、 attiredressapparelattireのシノニムとして設定したためです。名前はシノニム(同意語)ソース コレクションで、 attire_synonyms 10} を 、 、 のシノニムとして設定したためです。 .

    Atlas Search では、 transport_synonymsソース コレクション内のcarまたはvehicleおよびattire_synonymsソース コレクション内のdressまたはapparelを検索すると、同じ結果が返されます。 この例をテストするには、上記のクエリのqueryフィールドの値をcarまたはvehicleに置き換え、上記のクエリのqueryフィールドの値をdressまたはapparelに置き換えます。クエリを再度実行します。

  1. synonyms-explicit-query.goという名前のファイルを作成します。

  2. コード例をコピーして、 synonyms-explicit-query.goファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでboatという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語boatのシノニムとして構成されている単語を検索します。 。 このクエリは、 titleフィールドでhatという単語も検索し、 attireSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 attire_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語hatのシノニムとして設定されている単語を検索します。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1package main
    2
    3import (
    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
    14type MovieCollection struct {
    15 title string `bson:"Title,omitempty"`
    16}
    17
    18func 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}
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

  4. 次のコマンドを実行して、コレクションをクエリします。

    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 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語 の フィールドに vesselboat 、および が含まれる映画が含まれます。これは、sail titleboatboatboatを 、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のタイトル フィールドにfedorahatが含まれる映画も含まれます。これは、シノニム(同意語)内でhathatfedoraheadgearのシノニムとして設定したためです。 attire_synonymsという名前のソース コレクション。

    Atlas Search では、 headgearというタームの検索結果のtitleフィールドにhatまたはfedoraのいずれかを持つドキュメントは含まれません。これは、 hat headgearを次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはfedoraに該当します。 同様に、Atlas Search では、 fedoraというタームの検索結果のtitleフィールドにhatまたはheadgearのいずれかを持つドキュメントは含まれません。これは、 fedoraを次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のhatまたはheadgearのいずれか。 これらの例をテストするには、上記のクエリのqueryフィールドの値をfedoraまたはheadgearに置き換えて、クエリを再度実行します。

1
junit
4.11以降のバージョン
mongodb-driver-sync
4.3.0以降のバージョン
slf4j-log4j12
1.7.30以降のバージョン
2

これらのコード例では、次のタスクを実行します。

  • mongodb パッケージと依存関係をインポートします。

  • Atlas クラスターへの接続を確立します。

  • カーソルを反復処理して、クエリに一致するドキュメントを出力します。

Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。

  1. SynonymsEquivalentQuery.javaという名前のファイルを作成します。

  2. 以下のコードをコピーして、 ファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでautomobileという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語automobileのシノニムとして構成されている単語を検索します。 。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1import java.util.Arrays;
    2import static com.mongodb.client.model.Filters.eq;
    3import static com.mongodb.client.model.Aggregates.limit;
    4import static com.mongodb.client.model.Aggregates.project;
    5import static com.mongodb.client.model.Projections.excludeId;
    6import static com.mongodb.client.model.Projections.fields;
    7import static com.mongodb.client.model.Projections.include;
    8import static com.mongodb.client.model.Projections.computed;
    9import com.mongodb.client.MongoClient;
    10import com.mongodb.client.MongoClients;
    11import com.mongodb.client.MongoCollection;
    12import com.mongodb.client.MongoDatabase;
    13import org.bson.Document;
    14
    15public 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;
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

  4. 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フィールドにcarautomobileである映画が含まれていますが、クエリ用語はautomobileです。これは、 automobilecarvehicleautomobileのシノニムとして設定したためです。コレクションのインデックスで指定されるsample_synonyms 名前のシノニム ソース コレクション内の }。 Atlas Search では、 carvehicleという単語の検索で同じ結果が返されます。 これをテストするには、上記のクエリのqueryフィールドの値をcarまたはvehicleに置き換えてクエリを実行します。

  1. SynonymsExplicitQuery.javaという名前のファイルを作成します。

  2. 以下のコードをコピーして、 ファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでboatという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語boatのシノニムとして構成されている単語を検索します。 。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1import java.util.Arrays;
    2import static com.mongodb.client.model.Filters.eq;
    3import static com.mongodb.client.model.Aggregates.limit;
    4import static com.mongodb.client.model.Aggregates.project;
    5import static com.mongodb.client.model.Projections.excludeId;
    6import static com.mongodb.client.model.Projections.fields;
    7import static com.mongodb.client.model.Projections.include;
    8import static com.mongodb.client.model.Projections.computed;
    9import com.mongodb.client.MongoClient;
    10import com.mongodb.client.MongoClients;
    11import com.mongodb.client.MongoCollection;
    12import com.mongodb.client.MongoDatabase;
    13import org.bson.Document;
    14
    15public 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;
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

  4. 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フィールドにboatvesselsailである映画が含まれていますboatvesselsailをシノニム(同意語)で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に置き換えて、クエリを再度実行します。

3

これらのコード例では、次のタスクを実行します。

  • mongodb パッケージと依存関係をインポートします。

  • Atlas クラスターへの接続を確立します。

  • カーソルを反復処理して、クエリに一致するドキュメントを出力します。

Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。

  1. SynonymsEquivalentQuery.javaという名前のファイルを作成します。

  2. 以下のコードをコピーして、 ファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでautomobileという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語automobileのシノニムとして構成されている単語を検索します。 。 このクエリは、 titleフィールドでattireという単語も検索し、 attireSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 attire_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語attireのシノニムとして設定されている単語を検索します。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1import java.util.Arrays;
    2import static com.mongodb.client.model.Filters.eq;
    3import static com.mongodb.client.model.Aggregates.limit;
    4import static com.mongodb.client.model.Aggregates.project;
    5import static com.mongodb.client.model.Projections.computed;
    6import static com.mongodb.client.model.Projections.excludeId;
    7import static com.mongodb.client.model.Projections.fields;
    8import static com.mongodb.client.model.Projections.include;
    9import com.mongodb.client.MongoClient;
    10import com.mongodb.client.MongoClients;
    11import com.mongodb.client.MongoCollection;
    12import com.mongodb.client.MongoDatabase;
    13import org.bson.Document;
    14
    15public 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;
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

  4. 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 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語automobiletitleフィールドにcarが含まれる映画が含まれます。これは、シノニム(同意語)ソース コレクションで、 automobilecarvehicleautomobileのシノニムとして設定したためです。 transport_synonyms 。 結果には、クエリ タームattireのタイトル フィールドにdressが含まれる映画も含まれます。これは、 attiredressapparelattireのシノニムとして設定したためです。名前はシノニム(同意語)ソース コレクションで、 attire_synonyms 10} を 、 、 のシノニムとして設定したためです。 .

    Atlas Search では、 transport_synonymsソース コレクション内のcarまたはvehicleおよびattire_synonymsソース コレクション内のdressまたはapparelを検索すると、同じ結果が返されます。 この例をテストするには、上記のクエリのqueryフィールドの値をcarまたはvehicleに置き換え、上記のクエリのqueryフィールドの値をdressまたはapparelに置き換えます。クエリを再度実行します。

  1. SynonymsExplicitQuery.javaという名前のファイルを作成します。

  2. 以下のコードをコピーして、 ファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでboatという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語boatのシノニムとして構成されている単語を検索します。 。 このクエリは、 titleフィールドでhatという単語も検索し、 attireSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 attire_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語hatのシノニムとして設定されている単語を検索します。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1import java.util.Arrays;
    2import static com.mongodb.client.model.Filters.eq;
    3import static com.mongodb.client.model.Aggregates.limit;
    4import static com.mongodb.client.model.Aggregates.project;
    5import static com.mongodb.client.model.Projections.computed;
    6import static com.mongodb.client.model.Projections.excludeId;
    7import static com.mongodb.client.model.Projections.fields;
    8import static com.mongodb.client.model.Projections.include;
    9import com.mongodb.client.MongoClient;
    10import com.mongodb.client.MongoClients;
    11import com.mongodb.client.MongoCollection;
    12import com.mongodb.client.MongoDatabase;
    13import org.bson.Document;
    14
    15public 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;
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

  4. 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 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語 の フィールドに vesselboat 、および が含まれる映画が含まれます。これは、sail titleboatboatboatを 、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のタイトル フィールドにfedorahatが含まれる映画も含まれます。これは、シノニム(同意語)内でhathatfedoraheadgearのシノニムとして設定したためです。 attire_synonymsという名前のソース コレクション。

    Atlas Search では、 headgearというタームの検索結果のtitleフィールドにhatまたはfedoraのいずれかを持つドキュメントは含まれません。これは、 hat headgearを次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはfedoraに該当します。 同様に、Atlas Search では、 fedoraというタームの検索結果のtitleフィールドにhatまたはheadgearのいずれかを持つドキュメントは含まれません。これは、 fedoraを次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のhatまたはheadgearのいずれか。 これらの例をテストするには、上記のクエリのqueryフィールドの値をfedoraまたはheadgearに置き換えて、クエリを再度実行します。

1
mongodb-driver-kotlin-coroutine
4.10.0以降のバージョン
2

これらのコード例では、次のタスクを実行します。

  • mongodb パッケージと依存関係をインポートします。

  • Atlas クラスターへの接続を確立します。

  • クエリに一致するドキュメントをAggregateFlowインスタンスから出力します。

Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。

  1. SynonymsEquivalentQuery.ktという名前のファイルを作成します。

  2. 以下のコードをコピーして、 ファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでautomobileという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語automobileのシノニムとして構成されている単語を検索します。 。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1import com.mongodb.client.model.Aggregates.limit
    2import com.mongodb.client.model.Aggregates.project
    3import com.mongodb.client.model.Projections.*
    4import com.mongodb.kotlin.client.coroutine.MongoClient
    5import kotlinx.coroutines.runBlocking
    6import org.bson.Document
    7
    8fun 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}
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

  4. 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フィールドにcarautomobileである映画が含まれていますが、クエリ用語はautomobileです。これは、 automobilecarvehicleautomobileのシノニムとして設定したためです。コレクションのインデックスで指定されるsample_synonyms 名前のシノニム ソース コレクション内の }。 Atlas Search では、 carvehicleという単語の検索で同じ結果が返されます。 これをテストするには、上記のクエリのqueryフィールドの値をcarまたはvehicleに置き換えてクエリを実行します。

  1. SynonymsExplicitQuery.ktという名前のファイルを作成します。

  2. 以下のコードをコピーして、 ファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでboatという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語boatのシノニムとして構成されている単語を検索します。 。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1import com.mongodb.client.model.Aggregates.limit
    2import com.mongodb.client.model.Aggregates.project
    3import com.mongodb.client.model.Projections.*
    4import com.mongodb.kotlin.client.coroutine.MongoClient
    5import kotlinx.coroutines.runBlocking
    6import org.bson.Document
    7
    8fun 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}
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

  4. 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フィールドにboatvesselsailである映画が含まれていますboatvesselsailをシノニム(同意語)で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に置き換えて、クエリを再度実行します。

3

これらのコード例では、次のタスクを実行します。

  • mongodb パッケージと依存関係をインポートします。

  • Atlas クラスターへの接続を確立します。

  • クエリに一致するドキュメントをAggregateFlowインスタンスから出力します。

Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。

  1. SynonymsEquivalentQuery.ktという名前のファイルを作成します。

  2. 以下のコードをコピーして、 ファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでautomobileという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語automobileのシノニムとして構成されている単語を検索します。 。 このクエリは、 titleフィールドでattireという単語も検索し、 attireSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 attire_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語attireのシノニムとして設定されている単語を検索します。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1import com.mongodb.client.model.Aggregates.limit
    2import com.mongodb.client.model.Aggregates.project
    3import com.mongodb.client.model.Projections.*
    4import com.mongodb.kotlin.client.coroutine.MongoClient
    5import kotlinx.coroutines.runBlocking
    6import org.bson.Document
    7
    8fun 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}
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

  4. 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 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語automobiletitleフィールドにcarが含まれる映画が含まれます。これは、シノニム(同意語)ソース コレクションで、 automobilecarvehicleautomobileのシノニムとして設定したためです。 transport_synonyms 。 結果には、クエリ タームattireのタイトル フィールドにdressが含まれる映画も含まれます。これは、 attiredressapparelattireのシノニムとして設定したためです。名前はシノニム(同意語)ソース コレクションで、 attire_synonyms 10} を 、 、 のシノニムとして設定したためです。 .

    Atlas Search では、 transport_synonymsソース コレクション内のcarまたはvehicleおよびattire_synonymsソース コレクション内のdressまたはapparelを検索すると、同じ結果が返されます。 この例をテストするには、上記のクエリのqueryフィールドの値をcarまたはvehicleに置き換え、上記のクエリのqueryフィールドの値をdressまたはapparelに置き換えます。クエリを再度実行します。

  1. SynonymsExplicitQuery.ktという名前のファイルを作成します。

  2. 以下のコードをコピーして、 ファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでboatという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語boatのシノニムとして構成されている単語を検索します。 。 このクエリは、 titleフィールドでhatという単語も検索し、 attireSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 attire_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語hatのシノニムとして設定されている単語を検索します。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1import com.mongodb.client.model.Aggregates.limit
    2import com.mongodb.client.model.Aggregates.project
    3import com.mongodb.client.model.Projections.*
    4import com.mongodb.kotlin.client.coroutine.MongoClient
    5import kotlinx.coroutines.runBlocking
    6import org.bson.Document
    7
    8fun 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}
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。 詳しくは、「ドライバーによる接続 」を参照してください。

  4. 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 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語 の フィールドに vesselboat 、および が含まれる映画が含まれます。これは、sail titleboatboatboatを 、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のタイトル フィールドにfedorahatが含まれる映画も含まれます。これは、シノニム(同意語)内でhathatfedoraheadgearのシノニムとして設定したためです。 attire_synonymsという名前のソース コレクション。

    Atlas Search では、 headgearというタームの検索結果のtitleフィールドにhatまたはfedoraのいずれかを持つドキュメントは含まれません。これは、 hat headgearを次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはfedoraに該当します。 同様に、Atlas Search では、 fedoraというタームの検索結果のtitleフィールドにhatまたはheadgearのいずれかを持つドキュメントは含まれません。これは、 fedoraを次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のhatまたはheadgearのいずれか。 これらの例をテストするには、上記のクエリのqueryフィールドの値をfedoraまたはheadgearに置き換えて、クエリを再度実行します。

1

これらのコード例では、次のタスクを実行します。

  • MongoDB の Node.js ドライバーであるmongodbをインポートします。

  • Atlas クラスターへの接続を確立するためのMongoClientクラスのインスタンスを作成します。

  • カーソルを反復処理して、クエリに一致するドキュメントを出力します。

Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。

  1. synonyms-equivalent-query.jsという名前のファイルを作成します。

  2. コード例をコピーして、 synonyms-equivalent-query.jsファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでautomobileという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語automobileのシノニムとして構成されている単語を検索します。 。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1const MongoClient = require("mongodb").MongoClient;
    2const assert = require("assert");
    3
    4const 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
    27MongoClient.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);
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。

  4. 次のコマンドを実行して、コレクションをクエリします。

    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フィールドにcarautomobileである映画が含まれていますが、クエリ用語はautomobileです。これは、 automobilecarvehicleautomobileのシノニムとして設定したためです。コレクションのインデックスで指定されるsample_synonyms 名前のシノニム ソース コレクション内の }。 Atlas Search では、 carvehicleという単語の検索で同じ結果が返されます。 これをテストするには、上記のクエリのqueryフィールドの値をcarまたはvehicleに置き換えてクエリを実行します。

  1. synonyms-explicit-query.jsという名前のファイルを作成します。

  2. コード例をコピーして、 synonyms-explicit-query.jsファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでboatという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語boatのシノニムとして構成されている単語を検索します。 。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1const MongoClient = require("mongodb").MongoClient;
    2const assert = require("assert");
    3
    4const 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
    27MongoClient.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);
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。

  4. 次のコマンドを実行して、コレクションをクエリします。

    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フィールドにboatvesselsailである映画が含まれていますboatvesselsailをシノニム(同意語)で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に置き換えて、クエリを再度実行します。

2

これらのコード例では、次のタスクを実行します。

  • MongoDB の Node.js ドライバーであるmongodbをインポートします。

  • Atlas クラスターへの接続を確立するためのMongoClientクラスのインスタンスを作成します。

  • カーソルを反復処理して、クエリに一致するドキュメントを出力します。

Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。

  1. synonyms-equivalent-query.jsという名前のファイルを作成します。

  2. コード例をコピーして、 synonyms-equivalent-query.jsファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでautomobileという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語automobileのシノニムとして構成されている単語を検索します。 。 このクエリは、 titleフィールドでattireという単語も検索し、 attireSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 attire_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語attireのシノニムとして設定されている単語を検索します。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1pconst MongoClient = require("mongodb").MongoClient;
    2const assert = require("assert");
    3
    4const 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
    39MongoClient.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);
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。

  4. 次のコマンドを実行して、コレクションをクエリします。

    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 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語automobiletitleフィールドにcarが含まれる映画が含まれます。これは、シノニム(同意語)ソース コレクションで、 automobilecarvehicleautomobileのシノニムとして設定したためです。 transport_synonyms 。 結果には、クエリ タームattireのタイトル フィールドにdressが含まれる映画も含まれます。これは、 attiredressapparelattireのシノニムとして設定したためです。名前はシノニム(同意語)ソース コレクションで、 attire_synonyms 10} を 、 、 のシノニムとして設定したためです。 .

    Atlas Search では、 transport_synonymsソース コレクション内のcarまたはvehicleおよびattire_synonymsソース コレクション内のdressまたはapparelを検索すると、同じ結果が返されます。 この例をテストするには、上記のクエリのqueryフィールドの値をcarまたはvehicleに置き換え、上記のクエリのqueryフィールドの値をdressまたはapparelに置き換えます。クエリを再度実行します。

  1. synonyms-explicit-query.jsという名前のファイルを作成します。

  2. コード例をコピーして、 synonyms-explicit-query.jsファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでboatという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語boatのシノニムとして構成されている単語を検索します。 。 このクエリは、 titleフィールドでhatという単語も検索し、 attireSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 attire_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語hatのシノニムとして設定されている単語を検索します。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1const MongoClient = require("mongodb").MongoClient;
    2const assert = require("assert");
    3
    4const 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
    39MongoClient.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);
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。

  4. 次のコマンドを実行して、コレクションをクエリします。

    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 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語 の フィールドに vesselboat 、および が含まれる映画が含まれます。これは、sail titleboatboatboatを 、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のタイトル フィールドにfedorahatが含まれる映画も含まれます。これは、シノニム(同意語)内でhathatfedoraheadgearのシノニムとして設定したためです。 attire_synonymsという名前のソース コレクション。

    Atlas Search では、 headgearというタームの検索結果のtitleフィールドにhatまたはfedoraのいずれかを持つドキュメントは含まれません。これは、 hat headgearを次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはfedoraに該当します。 同様に、Atlas Search では、 fedoraというタームの検索結果のtitleフィールドにhatまたはheadgearのいずれかを持つドキュメントは含まれません。これは、 fedoraを次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のhatまたはheadgearのいずれか。 これらの例をテストするには、上記のクエリのqueryフィールドの値をfedoraまたはheadgearに置き換えて、クエリを再度実行します。

1

これらのコード例では、次のタスクを実行します。

  • pymongo、MongoDB の Python ドライバー、およびDNSシード リスト接続文字列を使用してpymongoAtlas に接続するために必要なdns モジュールをインポートします。

  • Atlas クラスターへの接続を確立するためのMongoClientクラスのインスタンスを作成します。

  • カーソルを反復処理して、クエリに一致するドキュメントを出力します。

Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。

  1. synonyms-equivalent-query.pyという名前のファイルを作成します。

  2. コード例をコピーして、 synonyms-equivalent.pyファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでautomobileという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語automobileのシノニムとして構成されている単語を検索します。 。

    • $limit ステージを使用して出力を10の結果に制限します

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1import pymongo
    2import dns
    3
    4client = pymongo.MongoClient('<connection-string>')
    5result = 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
    30for i in result:
    31 print(i)
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。

  4. 次のコマンドを実行して、コレクションをクエリします。

    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フィールドにcarautomobileである映画が含まれていますが、クエリ用語はautomobileです。これは、 automobilecarvehicleautomobileのシノニムとして設定したためです。コレクションのインデックスで指定されるsample_synonyms 名前のシノニム ソース コレクション内の }。 Atlas Search では、 carvehicleという単語の検索で同じ結果が返されます。 これをテストするには、上記のクエリのqueryフィールドの値をcarまたはvehicleに置き換えてクエリを実行します。

  1. synonyms-explicit-query.pyという名前のファイルを作成します。

  2. コード例をコピーして、 synonyms-explicit.pyファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでboatという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語boatのシノニムとして構成されている単語を検索します。 。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1import pymongo
    2import dns
    3
    4client = pymongo.MongoClient('<connection-string>')
    5result = 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
    30for i in result:
    31 print(i)
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。

  4. 次のコマンドを実行して、コレクションをクエリします。

    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フィールドにboatvesselsailである映画が含まれていますboatvesselsailをシノニム(同意語)で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に置き換えて、クエリを再度実行します。

2

これらのコード例では、次のタスクを実行します。

  • pymongo、MongoDB の Python ドライバー、およびDNSシード リスト接続文字列を使用してpymongoAtlas に接続するために必要なdns モジュールをインポートします。

  • Atlas クラスターへの接続を確立するためのMongoClientクラスのインスタンスを作成します。

  • カーソルを反復処理して、クエリに一致するドキュメントを出力します。

Atlas Search のクエリ結果は、シノニム(同意語)ソース コレクションに定義されている単語マッピングのタイプによって異なります。

  1. synonyms-equivalent-query.pyという名前のファイルを作成します。

  2. コード例をコピーして、 synonyms-equivalent.pyファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでautomobileという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語automobileのシノニムとして構成されている単語を検索します。 。 このクエリは、 titleフィールドでattireという単語も検索し、 attireSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 attire_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語attireのシノニムとして設定されている単語を検索します。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1import pymongo
    2import dns
    3
    4client = pymongo.MongoClient('<connection-string>')
    5result = 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
    40for i in result:
    41 print(i)
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。

  4. 次のコマンドを実行して、コレクションをクエリします。

    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 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語automobiletitleフィールドにcarが含まれる映画が含まれます。これは、シノニム(同意語)ソース コレクションで、 automobilecarvehicleautomobileのシノニムとして設定したためです。 transport_synonyms 。 結果には、クエリ タームattireのタイトル フィールドにdressが含まれる映画も含まれます。これは、 attiredressapparelattireのシノニムとして設定したためです。名前はシノニム(同意語)ソース コレクションで、 attire_synonyms 10} を 、 、 のシノニムとして設定したためです。 .

    Atlas Search では、 transport_synonymsソース コレクション内のcarまたはvehicleおよびattire_synonymsソース コレクション内のdressまたはapparelを検索すると、同じ結果が返されます。 この例をテストするには、上記のクエリのqueryフィールドの値をcarまたはvehicleに置き換え、上記のクエリのqueryフィールドの値をdressまたはapparelに置き換えます。クエリを再度実行します。

  1. synonyms-explicit-query.pyという名前のファイルを作成します。

  2. コード例をコピーして、 synonyms-explicit.pyファイルに貼り付けます。

    このコード例には、次のステージが含まれています。

    • $searchステージを使用して、 titleフィールドでboatという単語を検索し、 transportSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 transport_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語boatのシノニムとして構成されている単語を検索します。 。 このクエリは、 titleフィールドでhatという単語も検索し、 attireSynonymsという名前のシノニム(同意語)マッピング定義を使用して、 attire_synonymsという名前のシノニム(同意語)ソース コレクションでクエリ単語hatのシノニムとして設定されている単語を検索します。

    • $limit ステージを使用して、出力結果を 10 に制限します。

    • $projectステージでは、 title以外のすべてのフィールドを除外し、 scoreという名前のフィールドを追加します。

    1import pymongo
    2import dns
    3
    4client = pymongo.MongoClient('<connection-string>')
    5result = 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
    40for i in result:
    41 print(i)
  3. サンプルを実行する前に、<connection-string> をAtlas接続stringに置き換えます。 接続stringにデータベースユーザーの認証情報が含まれていることを確認します。

  4. 次のコマンドを実行して、コレクションをクエリします。

    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 結果には、両方の検索タームのドキュメントが含まれます。 結果には、クエリ用語 の フィールドに vesselboat 、および が含まれる映画が含まれます。これは、sail titleboatboatboatを 、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のタイトル フィールドにfedorahatが含まれる映画も含まれます。これは、シノニム(同意語)内でhathatfedoraheadgearのシノニムとして設定したためです。 attire_synonymsという名前のソース コレクション。

    Atlas Search では、 headgearというタームの検索結果のtitleフィールドにhatまたはfedoraのいずれかを持つドキュメントは含まれません。これは、 hat headgearを次のいずれかのシノニムとして使用しなかったためです。シノニム ソース コレクションでまたはfedoraに該当します。 同様に、Atlas Search では、 fedoraというタームの検索結果のtitleフィールドにhatまたはheadgearのいずれかを持つドキュメントは含まれません。これは、 fedoraを次のシノニムとして使用しなかったためです:シノニム ソース コレクション内のhatまたはheadgearのいずれか。 これらの例をテストするには、上記のクエリのqueryフィールドの値をfedoraまたはheadgearに置き換えて、クエリを再度実行します。

戻る

ファセット