对于 AI 代理:可在 https://www.mongodb.com/zh-cn/docs/llms.txt 获取文档索引—通过在任何 URL 路径后添加 .md 可获取所有页面的 Markdown 版本。
Docs 菜单

在MongoDB搜索索引中定义同义词映射

synonymsMongoDB Search索引定义中的 选项指定同义词映射,允许您对集合进行索引和搜索以查找具有相同或几乎相同含义的单词。要使用同义词映射配置MongoDB搜索索引,您必须:

  1. 将同义词文档的集合添加到集群中。确保:

    • 您的集合与将引用该集合的索引位于同一数据库中。

    • 这些文档格式正确

  2. 引用索引定义的同义词映射中的同义词源集合。

同义词映射将MongoDB 搜索索引配置为支持以下查询:应用同义词源集合中的同义词,而该同义词源集合位于与要索引的集合相同的数据库中。您只能在使用文本短语操作符的查询中使用同义词。

注意

免费 (M0) 层级集群限制

一个索引定义只能有一个同义词映射

本页介绍同义词源集合的格式以及如何定义引用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 在索引定义中采用以下字段:

字段
类型
说明
必要性

analyzer

字符串

与该同义词映射一起使用的分析器名称。

您可以使用同义词映射仅查询使用同一分析器分析的字段。

要使用带停顿词的同义词,必须使用标准分析器为字段编制索引,或添加不带停顿词的同义词条目。

您可以使用任何MongoDB Search分析器,但以下分析器除外:

语言分析器:

  • lucene.kuromoji

  • lucene.cjk

自定义分析器分词器和令牌筛选器:

必需

name

字符串

同义词映射的名称。名称在索引定义中必须是唯一的。值不能是空字符串。

必需

source

文档

Source collection for synonyms. The source option takes the collection field.

必需

source.collection

字符串

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 个文档。

必须为每个文档配置以下字段:

字段
类型
说明
必要性

input

字符串数组

需要用于 mappingType: explicit 映射。

对于 explicit 映射,synonyms 值是每个 input 词元的同义词。 值不能为空或全空格字符串。 您可以在多个文档中指定相同的input值。

可选的

mappingType

字符串

映射类型。值可以是以下值之一:

  • equivalent — 描述一组彼此等价的词元。有关此 mappingType 的示例,请参见示例

  • explicit - 匹配 input 词元并将其替换为所有备用 synonyms 词元。 有关 mappingType 的示例,请参见示例。

必需

synonyms

字符串数组

若干词语,如果 mappingTypeequivalent,则这些词语彼此是同义词;如果 mappingTypeexplicit,则这些词语是 input 词元的同义词。synonyms 至少须有一个值。

要使用带停用词的同义词,必须添加不带停用词的同义词条目,或者使用标准分析器对字段进行索引。

For an example of each mappingType see Source Collection Document Examples.

必需

集合中的文档可以包含其他字段。集合中的文档是可加的,映射是去重的。MongoDB Search 同义词存储为单独的Atlas集合,与Atlas中的任何其他集合占用相同的存储配额。MongoDB Search 可能会使用更多计算资源来应用更大同义词源集合中的同义词。

警告

请勿在同义词源集合中包含无效的同义词文档。如果索引使用的同义词映射引用了具有无效文档的集合,则MongoDB Search 不会创建索引。仅包含同义词源集合中格式正确的同义词文档。

MongoDB 不建议在生产环境中向同义词源集合添加同义词文档,除非首先验证它们格式正确并且在测试环境中的行为符合预期。

如果对同义词源集合进行更改:

  • 您无需重建索引,因为MongoDB Search 会监视更改并自动更新其内部同义词映射。

  • MongoDB Search更新同义词映射所需的时间随着同义词源集合大小的增加而增加。请注意,对同义词文档的更改最终会反映在MongoDB搜索查询结果中。

Atlas在名为 sample_synonyms 的集合中提供以下MongoDB搜索映射类型示例的文档。您可以将这些文档加载到与集合相同的数据库中的集群上。要在集群上加载这些文档,请在为集合创建索引时执行以下操作:

  1. 选择 Configuration Method(配置方法)时,请选择 Visual Editor(可视化编辑器)。

  2. 向索引 Add synonym mapping(添加同义词映射)时,请从 Synonym source collection(同义词源集合)下拉列表中选择 Load sample collection(加载样本集合)。

在以下示例源集合文档中,mappingType 被设置为 equivalent,以便将令牌 carvehicleautomobile 配置为彼此的同义词。

{
"mappingType": "equivalent",
"synonyms": ["car", "vehicle", "automobile"]
}

对于应用包含此类文档的同义词映射的文本查询,carvehicleautomobile 的文本查询, MongoDB搜索将返回包含术语carvehicleautomobile 的文档。

在以下示例源集合文档中,mappingType 被设置为 explicit,以便将令牌 beerbrewpint 配置为 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"]
}