synonyms
MongoDB Search 索引定义中的 选项指定同义词映射,允许您对集合进行索引和搜索以查找具有相同或几乎相同含义的单词。要使用同义词映射配置MongoDB搜索索引,您必须:
同义词映射将MongoDB Search索引配置为支持查询:应用同义词源集合位于与要索引的集合相同的数据库中。只能在使用文本操作符的查询中使用同义词。
本页介绍同义词源集合的格式以及如何定义引用MongoDB搜索索引中同义词源集合的同义词映射。
语法
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
在索引定义中采用以下字段:
字段 | 类型 | 说明 | 必要性 |
---|---|---|---|
| 字符串 | 必需 | |
| 字符串 | 同义词映射的名称。名称在索引定义中必须是唯一的。值不能是空字符串。 | 必需 |
| 文档 | 必需 | |
| 字符串 | 与MongoDB Search索引位于同一数据库中的MongoDB集合的名称。此集合中的文档必须采用同义词源集合文档中描述的格式。 | 必需 |
同义词源集合文档
集合中指定为同义词源的每个文档都描述一个或多个单词如何映射到这些单词的一个或多个同义词。
注意
在免费套餐集群上,同义词集合不能超过 10,000 个文档。
同义词源集合文档的格式
必须为每个文档配置以下字段:
字段 | 类型 | 说明 | 必要性 |
---|---|---|---|
| 字符串数组 | 需要用于 对于 | 可选的 |
| 字符串 | 映射类型。值可以是以下值之一:
| 必需 |
| 字符串数组 | 必需 |
集合中的文档可以包含其他字段。集合中的文档是可加的,映射是去重的。MongoDB Search 同义词存储为单独的Atlas集合,与Atlas中的任何其他集合占用相同的存储配额。MongoDB Search 可能会使用更多计算资源来应用更大同义词源集合中的同义词。
警告
请勿在同义词源集合中包含无效的同义词文档。如果索引使用的同义词映射引用了具有无效文档的集合,则MongoDB Search 不会创建索引。仅包含同义词源集合中格式正确的同义词文档。
MongoDB 不建议在生产环境中向同义词源集合添加同义词文档,除非首先验证它们格式正确并且在测试环境中的行为符合预期。
对同义词源集合文档的更改
如果对同义词源集合进行更改:
您无需重建索引,因为MongoDB Search 会监视更改并自动更新其内部同义词映射。
MongoDB Search更新同义词映射所需的时间随着同义词源集合大小的增加而增加。请注意,对同义词文档的更改最终会反映在MongoDB搜索查询结果中。
集合文档示例
源集合文档示例
Atlas在名为 sample_synonyms
的集合中提供以下MongoDB搜索映射类型示例的文档。您可以将这些文档加载到与集合相同的数据库中的集群上。要在集群上加载这些文档,请在为集合创建索引时执行以下操作:
选择 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搜索将返回包含术语car
、vehicle
或 automobile
的文档。
explicit
mappingType
在以下示例源集合文档中,mappingType
被设置为 explicit
,以便将令牌 beer
、brew
和 pint
配置为 input
令牌 beer
的同义词。
{ "mappingType": "explicit", "input": ["beer"], "synonyms": ["beer", "brew", "pint"] }
对于文本查询 beer
应用了包含此类文档的同义词映射的, MongoDB搜索会返回包含 "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"] }