MongoDB Search インデックス定義の synonyms
オプションは、コレクション内で同じ意味またはほぼ同じ意味を持つコレクションをインデックスして検索できるシノニム マッピングを指定します。シノニム(同意語)マッピングを使用してMongoDB Searchインデックスを構成するには、次の手順を実行する必要があります。
クラスターにシノニム ドキュメントのコレクションを追加します。以下を確認してください。
コレクションは、参照先となるインデックスと同じデータベース内にあります。
ドキュメントは適切な形式でフォーマットされています。
シノニム(同意語)マッピングにより、インデックスを作成するコレクションと同じデータベース内のシノニム(同意語)ソースコレクションからシノニムを適用するクエリをサポートするようにMongoDB Searchインデックスが構成されます。シノニム(同意語) は テキスト 演算子を使用するクエリでのみ使用できます。
このページでは、 シノニム(同意語)ソースコレクションの形式と、 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にできません。 | 必須 |
| ドキュメント | 必須 | |
| string | MongoDB Searchインデックスと同じデータベース内のMongoDBコレクションの名前。このコレクション内のドキュメントは、シノニム ソース コレクションのドキュメントで説明されている形式である必要があります。 | 必須 |
シノニム ソース コレクション ドキュメント
シノニム(同意語)のソースとして指定されるコレクション内の各ドキュメントは、1 つ以上の単語がその単語の 1 つ以上のシノニム(同意語)にマップする方法を示します。
注意
無料階層クラスターでは、シノニムコレクションは10,000 ドキュメントを超えることはできません。
シノニム ソース コレクション ドキュメントの形式
各ドキュメントは、次のフィールドで構成する必要があります。
フィールド | タイプ | 説明 | 必要性 |
---|---|---|---|
| 文字列の配列 |
| 条件付き |
| string | マッピングのタイプ。 値は次のいずれかになります。
| 必須 |
| 文字列の配列 |
ストップワードを含むシノニムを使用するには、ストップワードを含まずにシノニムを追加するか、標準アナライザを使用してフィールドにインデックスを付ける必要があります。 各 | 必須 |
コレクション内のドキュメントには他のフィールドを含めることができます。コレクション内のドキュメントは追加的であり、マッピングは重複を排除します。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"] }