Docs 菜单
Docs 主页
/
MongoDB Atlas
/

Atlas Search 概述

在此页面上

  • Atlas Search 基础知识
  • 索引
  • 分词器
  • 查询
  • 评分
  • Atlas Search 可用性
  • Atlas Search 架构
  • 存储源架构
  • 搜索节点架构
  • Atlas Search 索引
  • Atlas Search 查询
  • 搜索节点成本
  • 后续步骤

MongoDB 的 Atlas Search 允许对 Atlas 集群上的数据进行细粒度的文本索引和数据查询。它为您的应用程序提供高级搜索功能,无需任何额外的管理或在数据库旁边有单独的搜索系统。Atlas Search 提供了多种文本分析器的选项,这是一种丰富的查询语言,它使用 Atlas Search 聚合管道阶段(如 $search$searchMeta )与其他 MongoDB 聚合管道阶段结合使用,以及基于分数的结果排名。

提示

通过 Atlas Search Playground快速试用 Atlas Search,而无需 Atlas 帐户、集群或集合。要了解更多信息,请参阅文档。

以下概念构成了 Atlas Search 的基础,对于优化应用程序至关重要。

在搜索中,索引是一种数据结构,它以易于搜索的格式对数据进行分类。搜索索引可以更快地检索包含给定术语的文档,而无需扫描整个集合。虽然 Atlas Search 索引和MongoDB 索引都可以加快数据检索速度,但请注意,它们并不相同。就像书本后面的索引一样,搜索索引是术语与包含这些术语的文档之间的映射。搜索索引还包含其他相关元数据,例如术语在文档中的位置。

在任何搜索应用程序中,通常都需要创建至少一个搜索索引。有关更多信息,请参阅Atlas Search 索引。

创建搜索索引时,必须首先将数据转换为词元术语序列。分析器通过以下步骤促进此过程:

  • 标记:将字符串中的单词分解为可索引的标记。例如,用空格和标点符号分隔句子。

  • 规范化:组织数据,使其呈现一致且易于分析。例如,将文本转换为小写或删除称为停用词的不需要的词语

  • 词干提取:将单词简化为其词根形式。例如,忽略后缀、前缀和复数单词形式。

分词的细节因语言而异,可能需要做出额外的选择。使用哪种分析器取决于您的数据和应用程序。有关更多信息,请参阅使用分析器处理数据。

搜索查询会查阅索引以返回一组结果。搜索查询与传统的数据库查询不同,它们旨在满足更一般的信息需求。数据库查询必须遵循严格的语法,而搜索查询可以进行简单的文本匹配,但也可以查找相似的短语、数字或日期范围,或者使用正则表达式或通配符。

有关更多信息,请参阅Atlas Search 查询。

每个文档都会收到一个相关性分数,以便能够按从最高相关性到最低相关性的顺序返回查询结果。在最简单的评分形式中,如果查询词在文档中频繁出现,则文档得分较高;如果查询词出现在集合中的许多文档中,则文档得分较低。评分也可以自定义。为特定领域定制搜索通常意味着通过提高、降低或以其他方式修改基于相关性的默认分数来自定义分数。

有关更多信息,请参阅对文档进行评分。

Atlas Search 仅适用于运行 MongoDB 4.2 或更高版本的 Atlas 实例。对于某些功能,Atlas Search 可能需要特定的 MongoDB 版本。下表列出了需要特定 MongoDB 版本的 Atlas Search 功能。

Atlas Search 功能
适合该功能的 MongoDB 版本
分面
5.0.4+、6.0+、7.0+
6.0+、7.0+
5.0.6+、6.0+、7.0+
5.0+
6.0+、7.0+
6.0+、7.0+
5.0+、6.0+、7.0+
6.0+、7.0+
6.0+、7.0+
6.0+、7.0+
使用 Atlas CLI 进行Atlas Search 本地部署
6.0+、7.0+
$search searchAftersearchBefore 选项
6.0.13+、7.0.5+

时间序列集合不支持 Atlas Search。

Atlas Searchmongot 进程使用 Apache Lucene 并在mongod Atlas 集群的每个节点上与 一起运行。mongot 进程:

  1. 根据该集合的索引定义中的规则来创建 Atlas Search 索引。

  2. 监控变更流以了解文档的当前状态以及您为其定义 Atlas Search 索引的集合的索引更改。

  3. 处理 Atlas Search 查询并返回匹配的文档。

Atlas Search 架构

如果您在 Atlas Search 索引中定义存储源字段,则mongot进程会存储指定的字段,并且如果您在查询中指定了 returnStoredSource 选项,则会为匹配的文档直接从mongot返回存储的这些字段,而不是对数据库执行完整文档查找。

Atlas Search 存储源架构

对于 AWS或 Google Cloud 上的专用( M10或更高层级)分片和非分片 Atlas 集群,您可以部署单独的搜索节点,仅运行mongot进程以实现工作负载隔离。 Atlas 为每个集群或集群上的每个分片部署搜索节点。例如,如果您为具有3分片的集群部署2搜索节点,则 Atlas 会部署6搜索节点,每个分片2个。

单独部署搜索节点具有以下优势:

  • 独立于 MongoDB 集群扩展存储空间。

  • 独立于 MongoDB 扩展查询负载。

部署单独的搜索节点时,mongot 进程将在您可以独立配置的单独搜索节点上运行。

Atlas Search 独立搜索节点架构

您可以配置搜索节点,使其运行的 mongot 进程,与 Atlas 集群上运行 mongod 进程的数据库节点分开运行。您还可以预配搜索节点的数量,以及为每个搜索节点配置的资源量。

您只能为单区域AWS或 GCP 集群配置搜索节点。您无法为无服务器集群或多云集群单独部署搜索节点。要了解有关单独部署搜索节点的更多信息,请参阅用于隔离工作负载的搜索节点。要从用户界面或API部署搜索节点,请参阅创建集群。

部署单独的搜索节点时,Atlas 会自动为每个 mongot 分配一个mongodmongot 会与 mongod 通信,以侦听并同步其所存储索引的索引更改。

如果删除集群上的所有搜索节点,则在处理搜索查询结果时会出现短暂中断。要了解详情,请参阅修改集群。如果删除 Atlas 集群,Atlas 则会暂停,然后删除所有关联的 Atlas Search 部署(mongot 进程)。

注意

用于搜索节点的本地固态硬盘需要20%的存储开销来支持索引操作。

Atlas Search 索引是一种数据结构,它会以可搜索的格式对数据进行分类。它是术语与包含这些术语的文档之间的映射。Atlas Search 索引可以使用某些标识符更快地检索文档。您必须配置 Atlas Search 索引才能使用 Atlas Search 查询 Atlas 集群中的数据。

您可在单个字段或多个字段上创建 Atlas Search 索引。我们建议您对经常用于排序或筛选数据的字段建立索引,以便在查询时快速检索包含相关数据的文档。

您可以使用以下方法指定要进行索引的字段:

  • 动态映射,使 Atlas Search 能够自动索引每个文档中支持类型的所有字段。这样会占用磁盘空间,可能对集群性能产生负面影响。

  • 静态映射,可让您有选择地确定要索引的字段。如果字段包含多态数据,Atlas Search 仅对与索引定义中的映射相对应的文档进行索引编制,并忽略包含如下值的文档:与字段的索引定义中指定的映射不对应的值。

虽然 Atlas Search 上存储的数据与 Atlas 集群上的集合中的数据副本不同,Atlas Search 索引仍会占用部分磁盘空间和内存。如果您为包含字符串值的字段启用 store 选项,或在索引中配置存储的源字段,Atlas Search 则会在磁盘上存储指定字段的相同副本,而此副本可能会占用磁盘空间。

Atlas Search 提供内置分析器,用于创建可索引术语,纠正标点符号、大写、停用词等方面的差异。分析器会在查询中应用解析规则和语言规则。您还可以使用可用的内置字符筛选器、分词器和令牌筛选器创建自定义分析器。要了解有关内置和自定义分析器的更多信息,请参阅使用分析器处理数据

要进一步了解 Atlas Search 对其他数据类型的支持情况,请参阅数据类型mongot 进程在磁盘上按索引存储集群上集合的索引字段和 _id 字段。

如果您更改现有索引,Atlas Search 无需停机即可重建索引。这允许您继续将旧索引用于现有查询和新查询,直到索引重建完成。如果部署了单独的搜索节点,Atlas Search 还会为以下事件重建索引:

如果您部署了单独的搜索节点,Atlas 会在索引重建期间自动部署额外的搜索节点,以使旧索引保持最新状态,并在构建新索引时可用于查询。

如果您对为其定义 Atlas Search 索引的集合进行更改,最新数据可能无法立即用于查询。但是,mongot 会监控变更流,使其能够更新存储的数据副本,Atlas Search 索引最终也会保持一致。

注意

对于专用搜索节点

添加和调整分片会触发 Atlas Search 索引的重建。在此索引重建期间,索引可能没有最新数据。因此,对这些分片上的数据进行查询可能会失败或返回不正确的结果。

如果您对包含Atlas Search 索引的集合进行重新分片,则在重新分片操作完成后,该集合上的 Atlas Search 索引将变为不可用。重新分片操作完成后,您必须重建 Atlas Search 索引。

注意

Atlas Search 不支持使用 Atlas 用户界面中的 Customer Key Management(客户密钥管理)通过加密密钥对 Atlas Search 索引进行加密。

提示

另请参见:通过观看了解

观看此视频,了解关于 Atlas Search 索引的概要信息。在此视频中,您可以了解有关分析器和 Atlas Search 自动完成字段类型的更多信息。

时长:8 分钟

为集合设置 Atlas Search 索引后,您可以对已建立索引的字段运行查询。

Atlas Search 查询采用聚合管道阶段的形式。 Atlas Search 提供$search$searchMeta阶段,这两个阶段都必须是查询管道中的第一个阶段。这些阶段可以与查询管道中的其他聚合管道阶段结合使用。要了解有关这些管道阶段的更多信息,请参阅选择聚合管道阶段。

Atlas Search 还提供查询运算符收集器,而您可在 $search$searchMeta 聚合管道阶段使用它们。Atlas Search 运算符允许您从 Atlas 集群上的集合中查找和检索匹配的数据。收集器会返回一个代表搜索元数据结果的文档。

您可以使用 Atlas Search 操作符来查询词、短语、地理形状和点、数值、类似文档、同义词等。您还可以使用正则表达式和通配符表达式进行搜索。 Atlas Search 复合 操作符允许您在 阶段中组合多个操作符,以根据 Atlas$search Search 返回的文档中 必须 不得 应该 存在的内容执行复杂的数据搜索和过滤。您还可以使用 复合 运算符在$search 阶段匹配或筛选文档。在$match $search} 之后运行 的性能低于使用$search 复合 运算符运行 。

要了解有关 Atlas Search 操作符的事务语法、选项和用法的详情,请参阅在 Atlas Search 查询中使用操作符和收集器

运行查询时,Atlas Search 会使用配置的读取偏好来识别运行查询的节点。查询首先进入 MongoDB 进程,对于副本集集群为mongod ,对于分片集群为mongos 。对于分片集群,您的集群数据跨mongod实例进行分区,并且每个mongot仅了解同一节点上的mongod数据。因此,您无法运行针对特定分片的查询。 mongos将查询定向到所有分片,使这些查询成为分散聚集查询。如果您使用区域将分片集合分布在集群中的一部分分片上,则 Atlas Search 会将查询路由到包含您正在查询的集合的分片的区域,并仅对满足以下条件的分片运行$search查询:集合所在的位置。

MongoDB 进程会将查询路由到同一节点上的 mongot。Atlas Search 执行搜索和评分,并将匹配结果的文档 ID 和其他搜索元数据返回 mongod。然后,mongod 对匹配结果隐式执行完整文档查找,并将结果返回客户端。

注意

对于专用搜索节点

运行查询时,查询首先根据配置的读取偏好进入 MongoDB 进程。mongod 进程通过同一节点上的负载均衡器路由搜索查询,以便将请求分发到所有 mongot 进程。Atlas Search mongot 进程执行搜索和评分,并将匹配结果返回 mongodmongod 再将该结果返回客户端。如果在查询中使用 $search 并发选项,Atlas Search 将启用查询内并行机制。如要了解详情,请参阅并行查询各分段

Atlas Search 会将基于相关性的分数与结果集中的每个文档相关联。基于相关性的评分允许 Atlas Search 按从最高分到最低分的顺序返回文档。如果查询词频繁出现在某一文档中,Atlas Search 则会将此文档评为较高分;如果该查询词出现在集合内的很多文档中,则其评分较低。Atlas Search 还支持通过提升、衰减或其他修改选项来自定义基于相关性的默认分数。要了解有关自定义所生成分数的更多信息,请参阅对结果中的文档进行评分

提示

另请参见:通过观看了解

观看此视频,了解使用 Atlas Search 搜索和跟踪查询的概述。在本视频中,您可以详细了解 Atlas Search 操作符以及 Atlas Search 如何对结果中的文档进行评分

时长:15 分钟

MongoDB 仅支持在单地区AWS或 GCP 专用( M10或更高版本)集群上使用单独的搜索节点。搜索节点部署在计算密集型 NVMe 实例上。您必须至少部署两个节点。每天将按每个节点的每小时资源使用量向您收费。要了解更多信息,请参阅搜索节点成本。

要亲身体验创建 Atlas Search 索引和对示例数据集运行 Atlas Search 查询,请尝试以下页面中的教程:

喜欢通过观看视频来学习?

观看 Atlas 和 Atlas Search 的概述,并开始为您的数据设置 Atlas Search。该视频演示了如何在集群上加载样本数据、创建 Atlas Search 索引以及使用 Search TesterData Explorer 运行样本查询。

时长:10 分钟

← 什么是 MongoDB Atlas Search?