synonymsMongoDB Search索引定义中的 选项指定同义词映射,允许您对集合进行索引和搜索以查找具有相同或几乎相同含义的单词。要使用同义词映射配置MongoDB搜索索引,您必须:
同义词映射将MongoDB 搜索索引配置为支持以下查询:应用同义词源集合中的同义词,而该同义词源集合位于与要索引的集合相同的数据库中。您只能在使用文本或短语操作符的查询中使用同义词。
本页介绍同义词源集合的格式以及如何定义引用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 在索引定义中采用以下字段:
字段 | 类型 | 说明 | 必要性 |
|---|---|---|---|
| 字符串 | 必需 | |
| 字符串 | 同义词映射的名称。名称在索引定义中必须是唯一的。值不能是空字符串。 | 必需 |
| 文档 | Source collection for synonyms. The | 必需 |
| 字符串 | 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. | 必需 |
同义词源集合文档
集合中指定为同义词源的每个文档都描述一个或多个单词如何映射到这些单词的一个或多个同义词。
注意
在免费套餐集群上,同义词集合不能超过 10,000 个文档。
同义词源集合文档的格式
必须为每个文档配置以下字段:
字段 | 类型 | 说明 | 必要性 |
|---|---|---|---|
| 字符串数组 | 需要用于 对于 | 可选的 |
| 字符串 | 必需 | |
| 字符串数组 | 若干词语,如果 要使用带停用词的同义词,必须添加不带停用词的同义词条目,或者使用标准分析器对字段进行索引。 For an example of each | 必需 |
集合中的文档可以包含其他字段。集合中的文档是可加的,映射是去重的。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"] }