Docs 菜单
Docs 主页
/
MongoDB Atlas
/ / /

在 Atlas Search 索引中定义同义词映射

在此页面上

  • 语法
  • 选项
  • 同义词源集合文档
  • 同义词源集合文档的格式
  • 对同义词源集合文档的更改
  • mappingType 举例
  • equivalent
  • explicit
  • 例子
  • 同义词源集合示例
  • 索引定义示例
  • 静态映射
  • 动态映射

synonyms 允许您对集合进行索引和搜索具有相同或几乎相同含义的单词。要使用同义词映射配置 Atlas Search 索引,您必须:

  1. 创建一个包含适当格式的同义词文档的新集合。确保:

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

    • 您可以按照同义词源集合文档中的描述来格式化集合中的文档。

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

    注意

    免费 (M 0 ) 和共享(M 2和 M 5 )层级集群限制

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

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

字段
类型
说明
必要性
analyzer
字符串

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

您可以使用同义词映射仅查询使用同一分析器分析的字段。默认情况下,Atlas Search 使用标准分析器 ("lucene.standard")。

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

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

语言分析器:

  • lucene.kuromoji

  • lucene.cjk

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

必需
name
字符串
同义词映射的名称。名称在索引定义中必须是唯一的。值不能是空字符串。
必需
source
文档
同义词的源集合source选项采用collection字段。
必需
source.collection
字符串
与 Atlas Search 索引位于同一数据库中的 MongoDB 集合的名称。此集合中的文档使用同义词源集合文档中描述的格式。
必需

集合中指定为同义词源的每个文档都描述一个或多个单词如何映射到这些单词的一个或多个同义词。

注意

在免费和共享层级 Atlas 集群上,同义词集合不能超过 10,000 个文档。

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

字段
类型
说明
必要性
input
字符串数组

需要用于 mappingType: explicit 映射。

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

可选的
mappingType
字符串

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

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

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

必需
synonyms
字符串数组

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

Atlas Search 将每个字符串(无论其中包含多少单词)都视为单一令牌。例如,Atlas Search 会将字符串 sushi chef 标记为单个词,并且不会返回任何单独搜索 sushichef 的结果。

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

有关每个mappingType的示例,请参阅mappingType示例。

必需

集合中的文档可以包含其他字段。集合中的文档允许重复,映射则不允许重复。Atlas Search 同义词作为单独的 Atlas 集合存储,该集合与 Atlas 中的任何其他集合一样,占用同一存储配额。为了应用更大同义词源集合中的同义词,Atlas Search 可能会使用更多计算资源来。

警告

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

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

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

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

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

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

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

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

例子

在这个 equivalent 映射类型示例中,synonyms 的令牌 carvehicleautomobile 被配置为彼此的同义词:

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

对于应用同义词映射(包括此类文档)的 carvehicleautomobile 文本查询,Atlas Search 会返回包含词 carvehicleautomobile 的文档。

例子

在此 explicit 映射类型示例中,input 令牌 beer 被配置为将 beerbrewpint 视为同义词:

{
"mappingType": "explicit",
"input": ["beer"],
"synonyms": ["beer", "brew", "pint"]
}

对于 beer 应用包含此类文档的同义词映射的文本查询,Atlas Search 会返回包含“beer”、“brew”或“pint”这些术语的文档,因为 input 词元beer 已显式映射到所有这些 synonyms 词元。 但是,对于pint的查询,Atlas 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"]
}

sample_mflix.movies 集合的以下示例显示了使用静态和动态映射的索引定义。

注意

sample_mflix.movies有关使用下面的动态映射索引对 集合进行的示例查询,请参阅 文本短语 操作符中的 示例 。

以下索引:

  • 使用单个文本字段和单个同义词映射定义配置索引,该定义使用 synonymous_terms 集合中配置的映射。

  • 使用 lucene.english 分析器分析 plot 字段。

  • 对使用lucene.english分析器的字段进行查询时,启用synonymous_terms集合中的同义词。

你可以使用 Atlas 用户界面中的可视化编辑器或 JSON 编辑器来配置以下索引。若要配置此索引,请在选择配置方法后,选择 sample_mflix 数据库中的 movies 集合。

  1. 单击 Refine Your Index(连接)。

  2. Field Mappings 部分中,单击 Add Field

  3. 单击 Customized Configuration(连接)。

  4. Add Field Mapping 窗口中配置以下设置:

    Field Name
    Enable Dynamic Mapping
    Data Type Configuration
    选择 plot
    切换为禁用。
    1. 单击 Add Data Type(连接)。

    2. 从下拉列表中选择 String

    3. Index Analyzer 下拉列表中选择 lucene.language 下方的 lucene.english

  5. 单击 Add(连接)。

  6. Synonyms Mappings 部分中,单击 Add Synonym Mapping

  7. Add Synonym Mapping 窗口中配置以下设置:

    Synonym mapping name
    Synonym source collection
    Analyzer
    输入 my_synonyms
    选择 synonymous_terms
    lucene.language 下,从下拉菜单选择 lucene.english
  8. 单击 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 集合。

  1. 单击 Refine Your Index(连接)。

  2. Synonyms Mappings 部分中,单击 Add Synonym Mapping

  3. Add Synonym Mapping 窗口中配置以下设置:

    Synonym mapping name
    Synonym source collection
    Analyzer
    输入 my_synonyms
    选择 synonymous_terms
    如果尚未选择,请从下拉菜单中选择 lucene.standard
  4. 单击 Add(连接)。

{
"mappings": {
"dynamic": true
},
"synonyms": [
{
"analyzer": "lucene.standard",
"name": "my_synonyms",
"source": {
"collection": "synonymous_terms"
}
}
]
}

后退

3: 配置存储字段