MongoDB Searchインデックス定義の synonyms オプションは、コレクション内で同じ意味またはほぼ同じ意味を持つ単語をインデックスて検索できるシノニム マッピングを指定します。シノニム(同意語)マッピングを使用してMongoDB Searchインデックスを構成するには、次の手順を実行する必要があります。
クラスターにシノニム ドキュメントのコレクションを追加します。以下を確認してください。
コレクションは、参照先となるインデックスと同じデータベース内にあります。
The documents are properly formatted
シノニム(同意語)マッピングにより、インデックスの作成を行うコレクションと同じデータベース内のシノニム(同意語)ソースコレクションからシノニムを適用するクエリをサポートするようにMongoDB検索インデックスが構成されます。シノニム(同意語)は、テキストまたはフレーズ演算子を使用するクエリでのみ使用できます。
このページでは、 シノニム(同意語)ソースコレクションの形式と、 MongoDB Searchインデックスのシノニム ソースコレクションを参照シノニム マッピングを定義する方法について説明します。
構文
synonyms のインデックス定義の構文は次のとおりです。
1 { 2 "synonyms": [ 3 { 4 "name": "<synonym-mapping-name>", 5 "source": { 6 "collection": "<source-collection-name>" 7 }, 8 "analyzer": "<synonym-mapping-analyzer>" 9 } 10 ] 11 }
オプション
synonyms は、インデックス定義で次のフィールドを取ります。
フィールド | タイプ | 説明 | 必要性 |
|---|---|---|---|
| string | このシノニムマッピングで使用するアナライザの名前。 シノニム マッピングを使用すると、同じアナライザで分析されたフィールドのみをクエリすることができます。 ストップワードを含むシノニムを使用するには、標準アナライザを使用してフィールドをインデックス化するか、ストップワードを含まずにシノニム エントリを追加する必要があります。 以下を除く任意のMongoDB Searchアナライザを使用できます。
カスタムアナライザトークナイザとトークン フィルター:
| 必須 |
| string | シノニム(同意語)マッピング の名前。 名前は、インデックス定義内で一意である必要があります。 値は空のstringにできません。 | 必須 |
| ドキュメント | Source collection for synonyms. The | 必須 |
| string | Name of the MongoDB collection that is in the same database as the MongoDB Search index. Documents in this collection must be in the format described in the Synonyms Source Collection Documents. | 必須 |
シノニム ソース コレクション ドキュメント
シノニム(同意語)のソースとして指定されるコレクション内の各ドキュメントは、1 つ以上の単語がその単語の 1 つ以上のシノニム(同意語)にマップする方法を示します。
注意
On free clusters, the synonyms collection can't exceed 10,000 documents.
シノニム ソース コレクション ドキュメントの形式
各ドキュメントは、次のフィールドで構成する必要があります。
フィールド | タイプ | 説明 | 必要性 |
|---|---|---|---|
| 文字列の配列 |
| 条件付き |
| string | 必須 | |
| 文字列の配列 |
ストップワードを含むシノニムを使用するには、ストップワードを含まずにシノニムを追加するか、標準アナライザを使用してフィールドにインデックスを付ける必要があります。 For an example of each | 必須 |
コレクション内のドキュメントには他のフィールドを含めることができます。コレクション内のドキュメントは追加的であり、マッピングは重複を排除します。MongoDB Search シノニム(同意語)は別の Atlasコレクションとして保存され、Atlas の他のコレクションと同じストレージ割り当てに対してカウントされます。MongoDB Search は、大きなシノニム ソース コレクションからシノニムを適用するために、より多くのコンピューティング リソースを使用する場合があります。
警告
シノニム(同意語)ソースコレクションに無効なシノニム ドキュメントを含めないでください。MongoDB Search では、インデックスが無効なドキュメントを含むコレクションを参照シノニム マッピングを使用する場合、インデックスは作成されません。シノニム(同意語)ソースコレクションには、適切にフォーマットされたシノニム ドキュメントのみを含めます。
MongoDB では、テスト環境で適切にフォーマットされ、期待どおりに動作することを検証することなく、本番環境のシノニム ソース コレクションにシノニム ドキュメントを追加することは推奨されません。
シノニムソースコレクションのドキュメントに対する変更
シノニム(同意語)ソース コレクションに変更を加える場合、
MongoDB Search は変更を監視し、内部のシノニム マップを自動的に更新するため、インデックスを再作成する必要はありません。
MongoDB Search がシノニム マッピングを更新するのにかかる時間は、シノニム ソースコレクションのサイズに応じて増加します。シノニム ドキュメントへの変更は最終的にMongoDB Search クエリ結果に反映されることに注意してください。
コレクションドキュメントの例
ソース コレクション ドキュメントの例
Atlas は、sample_synonyms という名前のコレクションに次のMongoDB Searchマッピング型の例のドキュメントを提供します。これらのドキュメントは、コレクションと同じデータベース内のクラスターにロードできます。コレクションのインデックスを作成するときに、これらのドキュメントをクラスターにロードするには、次の手順を実行します。
Configuration Methodを選択した場合、 Visual Editorを選択します。
インデックスをAdd synonym mappingするときは、 Synonym source collectionドロップダウンからLoad sample collectionを選択します。
equivalent mappingType
次の例のソース コレクション ドキュメントでは、mappingType が equivalent に設定されており、car、vehicle、automobile の各トークンが互いに同義語として構成されています。
{ "mappingType": "equivalent", "synonyms": ["car", "vehicle", "automobile"] }
このようなドキュメントを含むシノニム マッピングを適用すると、car、vehicle、または automobile のテキスト クエリでは、 MongoDB Search は car、vehicle、または automobile というタームを含むドキュメントを返します。
explicit mappingType
次の例のソース コレクション ドキュメントでは、mappingType が explicit に設定されており、beer、brew、pint が input トークン beer の同義語として構成されています。
{ "mappingType": "explicit", "input": ["beer"], "synonyms": ["beer", "brew", "pint"] }
このようなドキュメントを含むシノニム マッピングを適用する beer のテキスト クエリでは、 MongoDB Search は「beer」、「brew」、または「pint」というタームを含むドキュメントを返します。これは、input トークン beer が明示的にマッピングされているためです。これらのすべての synonyms トークンに適用されます。ただし、pint のクエリでは、 MongoDB Search は beer を含むドキュメントを見つけられません。pint は beer に明示的にマップされていないためです。
シノニム ソース コレクションの例
次の synonymous_terms というコレクションは、sample_mflix データベースの movies コレクションで使用できるシノニムソースコレクションの例です。
sample_mflix.synonymous_terms コレクションには次のドキュメントが含まれます。
{ "mappingType": "equivalent", "synonyms": ["car", "vehicle", "automobile"] }
{ "mappingType": "explicit", "input": ["race"], "synonyms": ["contest", "rally"] }
{ "mappingType": "equivalent", "synonyms": ["dress", "apparel", "attire"] }
{ "mappingType": "explicit", "input": ["boat"], "synonyms": ["vessel", "sail"] }