在 Atlas Search 索引中定义同义词映射
synonyms
允许您创建索引并搜索集合中具有相同或几乎相同含义的单词。要使用同义词映射配置 Atlas Search 索引,您必须:
本页面介绍同义词源集合的格式以及如何定义引用 Atlas Search 索引中同义词源集合的同义词映射。同义词映射将 Atlas Search 索引配置为支持应用来自单独同义词源集合的同义词的查询。您可以使用 Atlas UI 或 Atlas Search API 中的 Atlas Search Visual Editor 视图或 Atlas Search JSON Editor 视图来创建索引。只能在使用文本操作符的查询中使用同义词。
语法
synonyms
在索引定义中具有以下语法:
1 { 2 "name": "<index-name>", 3 "analyzer": "<analyzer-for-index>", 4 "searchAnalyzer": "<analyzer-for-query>", 5 "mappings": { 6 "dynamic": <boolean>, 7 "fields": { <field-definition> } 8 }, 9 "synonyms": [ 10 { 11 "name": "<synonym-mapping-name>", 12 "source": { 13 "collection": "<source-collection-name>" 14 }, 15 "analyzer": "<synonym-mapping-analyzer>" 16 } 17 ] 18 }
选项
synonyms
在索引定义中采用以下字段:
字段 | 类型 | 说明 | 必要性 |
---|---|---|---|
| 字符串 | 与该同义词映射一起使用的分析器名称。 您可以使用同义词映射仅查询使用同一分析器分析的字段。默认情况下,Atlas Search 使用标准分析器 ( 要使用带停顿词的同义词,必须使用标准分析器为字段编制索引,或添加不带停顿词的同义词条目。 您可以使用任何 Atlas Search 分析器,但以下除外:
自定义分析器分词器和令牌筛选器:
| 必需 |
| 字符串 | 同义词映射的名称。名称在索引定义中必须是唯一的。值不能是空字符串。 | 必需 |
| 文档 | 必需 | |
| 字符串 | 必需 |
同义词源集合文档
集合中指定为同义词源的每个文档都描述一个或多个单词如何映射到这些单词的一个或多个同义词。
注意
在免费和共享层级 Atlas 集群上,同义词集合不能超过 10,000 个文档。
同义词源集合文档的格式
必须为每个文档配置以下字段:
字段 | 类型 | 说明 | 必要性 |
---|---|---|---|
| 字符串数组 | 需要用于 对于 | 可选的 |
| 字符串 | 映射类型。值可以是以下值之一:
| 必需 |
| 字符串数组 | 若干词语,如果 Atlas Search 将每个字符串(无论其中包含多少单词)都视为单一令牌。例如,Atlas Search 会将字符串 要使用带停用词的同义词,必须添加不带停用词的同义词条目,或者使用标准分析器对字段进行索引。 有关每个 | 必需 |
集合中的文档可以包含其他字段。集合中的文档允许重复,映射则不允许重复。Atlas Search 同义词作为单独的 Atlas 集合存储,该集合与 Atlas 中的任何其他集合一样,占用同一存储配额。为了应用更大同义词源集合中的同义词,Atlas Search 可能会使用更多计算资源来。
警告
请勿在同义词源集合中包含无效的同义词文档。如果索引使用的同义词映射引用了具有无效文档的集合,Atlas Search 不会创建索引。请仅包含同义词源集合中格式正确的同义词文档。
MongoDB 不建议在生产环境中向同义词源集合添加同义词文档,除非首先验证它们格式正确并且在测试环境中的行为符合预期。
对同义词源集合文档的更改
如果对同义词源集合进行更改:
您不需要重新索引,因为 Atlas Search 会监视更改并自动更新其内部同义词映射。
Atlas Search 更新同义词映射所需的时间随着同义词源集合规模的增加而增加。请注意,对同义词文档的更改最终会反映在 Atlas Search 查询结果中。
mappingType
示例
Atlas 在名为 sample_synonyms
的集合中提供了以下 Atlas Search 映射类型示例的文档。您可以将这些文档加载到与集合相同的数据库中的集群上。如需在集群上加载这些文档,请在创建集合索引时执行以下操作:
选择 Configuration Method(配置方法)时,请选择 Visual Editor(可视化编辑器)。
向索引 Add synonym mapping(添加同义词映射)时,请从 Synonym source collection(同义词源集合)下拉列表中选择 Load sample collection(加载样本集合)。
equivalent
例子
在这个 equivalent
映射类型示例中,synonyms
的令牌 car
、vehicle
和 automobile
被配置为彼此的同义词:
{ "mappingType": "equivalent", "synonyms": ["car", "vehicle", "automobile"] }
对于应用同义词映射(包括此类文档)的 car
、vehicle
或 automobile
文本查询,Atlas Search 会返回包含词 car
、vehicle
或 automobile
的文档。
explicit
例子
在此 explicit
映射类型示例中,input
令牌 beer
被配置为将 beer
、brew
和 pint
视为同义词:
{ "mappingType": "explicit", "input": ["beer"], "synonyms": ["beer", "brew", "pint"] }
对于 beer
应用包含此类文档的同义词映射的文本查询,Atlas Search 会返回包含“beer”、“brew”或“pint”这些术语的文档,因为 input
词元beer
已显式映射到所有这些 synonyms
词元。 但是,对于pint
的查询,Atlas Search 找不到包含beer
的文档,因为pint
未显式映射到beer
。
例子
此页面上的示例包括:
sample_mflix
数据库中名为synonymous_terms
的示例同义词源集合。依赖
sample_mflix.movies
和sample_mflix.synonymous_terms
集合中的文档的索引定义示例。
同义词源集合示例
以下名为 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"] }
索引定义示例
sample_mflix.movies
集合的以下示例显示了使用静态和动态映射的索引定义。
静态映射
以下索引:
使用单个文本字段和单个同义词映射定义配置索引,该定义使用
synonymous_terms
集合中配置的映射。使用
lucene.english
分析器分析plot
字段。针对使用
lucene.english
分析器分析的字段的查询启用来自synonymous_terms
集合的同义词。
你可以使用 Atlas 用户界面中的可视化编辑器或 JSON 编辑器来配置以下索引。若要配置此索引,请在选择配置方法后,选择 sample_mflix
数据库中的 movies
集合。
单击 Refine Your Index(连接)。
在 Field Mappings 部分中,单击 Add Field。
单击 Customized Configuration(连接)。
在 Add Field Mapping 窗口中配置以下设置:
Field NameEnable Dynamic MappingData Type Configuration选择
plot
。切换为禁用。
单击 Add Data Type(连接)。
从下拉列表中选择 String。
从 Index Analyzer 下拉列表中选择
lucene.language
下方的lucene.english
。
单击 Add(连接)。
在 Synonyms Mappings 部分中,单击 Add Synonym Mapping。
在 Add Synonym Mapping 窗口中配置以下设置:
Synonym mapping nameSynonym source collectionAnalyzer输入
my_synonyms
选择
synonymous_terms
。在
lucene.language
下,从下拉菜单选择lucene.english
。单击 Add(连接)。
将默认索引替换为以下索引。
{ "mappings": { "dynamic": false, "fields": { "plot": { "type": "string", "analyzer": "lucene.english" } } }, "synonyms": [ { "analyzer": "lucene.english", "name": "my_synonyms", "source": { "collection": "synonymous_terms" } } ] }
动态映射
以下索引:
为文档中的所有字段配置索引,并配置使用
synonymous_terms
集合中配置的映射的单个同义词映射定义。使用默认分析器
lucene.standard
来分析所有字段。针对使用
lucene.standard
分析器分析的字段的查询启用来自synonymous_terms
集合的同义词。
您可以使用 Atlas 用户界面中的“可视化编辑器”或“JSON 编辑器”配置以下索引。如需配置此索引,请在选择配置方法后,选择 sample_mflix
数据库中的 movies
集合。
单击 Refine Your Index(连接)。
在 Synonyms Mappings 部分中,单击 Add Synonym Mapping。
在 Add Synonym Mapping 窗口中配置以下设置:
Synonym mapping nameSynonym source collectionAnalyzer输入
my_synonyms
选择
synonymous_terms
。如果尚未选择,请从下拉菜单中选择
lucene.standard
。单击 Add(连接)。
{ "mappings": { "dynamic": true }, "synonyms": [ { "analyzer": "lucene.standard", "name": "my_synonyms", "source": { "collection": "synonymous_terms" } } ] }