创建和运行 Atlas Search 查询
Atlas Search 查询采用 聚合管道阶段的形式。Atlas Search 提供 $search
和 $searchMeta
阶段,二者都必须是任何查询管道的第一阶段,包括 $lookup
和 $unionWith
子管道。这些阶段可与查询管道中的其他聚合管道阶段结合使用。要了解有关这些管道阶段的更多信息,请参阅选择聚合管道阶段。
Atlas Search 还提供查询操作符和收集器,而您可在 $search
和 $searchMeta
聚合管道阶段中使用它们。Atlas Search 操作符允许您从 Atlas 集群上的集合中查找和检索相关数据。收集器会返回代表搜索元数据结果的文档。
您可以使用 Atlas Search 操作符来查询词、短语、地理形状和点、数值、类似文档、同义词等。您还可使用正则表达式和通配符表达式进行搜索。Atlas Search 复合操作符允许您在 $search
阶段组合使用多个操作符,以便根据 Atlas Search 返回的文档中必须、不得、或应该出现的内容执行复杂的数据搜索与筛选操作。您也可使用复合操作符在 $search
阶段匹配或筛选文档。在 $search
之后运行 $match
的性能低于使用复合操作符运行 $search
的性能。
要了解有关 Atlas Search 操作符的事务语法、选项和用法的详情,请参阅在 Atlas Search 查询中使用操作符和收集器。
mongod
和mongot
在同一节点上当您运行查询时,Atlas Search 会使用配置的读取偏好来确定运行查询的节点。该查询首先进入 MongoDB 进程,对于副本集集群为
mongod
,对于分片集群为mongos
。对于副本集集群,MongoDB 进程将查询路由到同一节点上的
mongot
。对于分片集群,您的集群数据跨mongod
实例进行分区,并且每个mongot
仅了解同一节点上的mongod
数据。因此,您无法运行针对特定分片的 Atlas Search 查询。mongos
将查询定向到所有分片,使这些查询成为分散聚集查询。如果您使用区域将分片集合分布到集群中的一部分分片上,则 Atlas Search 将查询路由到包含所查询的集合分片的区域,并仅对该集合所在的分片运行$search
查询。Atlas Search 会执行搜索和评分,并将匹配结果的文档 ID 和其他搜索元数据返回
mongod
。然后,mongod
将对匹配结果隐式执行完整文档查找,并将结果返回客户端。如果在查询中使用$search
并发选项,则 Atlas Search 将启用查询内并行机制。要了解更多信息,请参阅并行查询各分段。mongod
和mongot
在不同节点上运行查询时,查询会首先根据配置的读取偏好进入
mongod
。mongod
进程通过同一节点上的负载均衡器路由搜索查询,以便将请求分发到所有mongot
进程。Atlas Search
mongot
进程执行搜索和评分,并将匹配结果的文档 ID 和元数据返回到mongod
。然后,mongod
对匹配结果执行完整文档查找,并将结果返回客户端。如果在查询中使用$search
并发选项,则 Atlas Search 将启用查询内并行机制。要了解更多信息,请参阅并行查询各分段。
Atlas Search 会将基于相关性的分数与结果集中的每个文档相关联。基于相关性的评分允许 Atlas Search 按从最高分到最低分的顺序返回文档。如果查询词频繁出现在某一文档中,Atlas Search 则会将此文档评为较高分;如果该查询词出现在集合内的很多文档中,则其评分较低。Atlas Search 还支持通过提升、衰减或其他修改选项来自定义基于相关性的默认分数。要了解有关自定义所生成分数的更多信息,请参阅对结果中的文档进行评分。
提示
另请参见:通过观看了解
支持的客户端
您可以使用以下命令创建并运行 Atlas Search 查询:
MongoDB Compass
Atlas CLI
后续步骤
要了解如何创建和运行查询,请参阅创建查询。要亲身体验创建 Atlas Search 索引和对示例数据集运行 Atlas Search 查询,请尝试以下页面中的教程: