Docs 菜单
Docs 主页
/
Atlas
/ /

查询引用

Atlas Search查询采用 聚合管道阶段 的形式。 Atlas Search提供 $search$searchMeta 阶段,这两个阶段都必须是任何查询管道(包括 $lookup$unionWith 子管道)中的第一阶段。这些阶段可与查询管道中的其他 聚合管道阶段 结合使用。

根据所选的管道阶段,查询返回全文搜索的搜索结果或关于搜索结果的元数据:

聚合管道阶段
用途

返回全文搜索的搜索结果。

返回关于搜索结果的元数据。

Atlas Search还提供可在 $search$searchMeta 聚合管道阶段中使用的查询操作符和收集器。 Atlas Search操作符允许您从Atlas 集群上的集合中查找和检索相关数据。收集器返回表示搜索元数据结果的文档。

您可以使用Atlas Search操作符来查询词、短语、地理形状和点、数值、类似文档、同义词等。

您还可以使用正则表达式和通配符表达式搜索。 Atlas Search 复合 运算符允许您在 阶段中组合多个操作符,以根据Atlas$search Search返回的文档中 必须 不得 或 应该 出现的内容执行复杂的数据搜索和过滤。您还可以使用 复合 运算符在$search$search 阶段匹配或过滤文档。在$match $search之后运行 的性能低于使用 复合 运算符运行 的性能。

要学习;了解有关操作符和收集器的更多信息,请参阅操作符和收集器。

mongodmongot 在同一节点上

当您运行查询时,Atlas Search 会使用配置的读取偏好来确定运行查询的节点。该查询首先进入 MongoDB 进程,对于副本集集群为 mongod,对于分片集群为 mongos

对于副本集集群,MongoDB 进程将查询路由到同一节点上的 mongot 。对于分片集群,您的集群数据跨 mongod 实例进行分区,并且每个 mongot 仅了解同一节点上的 mongod 数据。因此,您无法运行针对特定分片的 Atlas Search 查询。mongos 将查询定向到所有分片,使这些查询成为分散聚集查询。如果您使用区域将分片集合分布到集群中的一部分分片上,则 Atlas Search 将查询路由到包含所查询的集合分片的区域,并仅对该集合所在的分片运行 $search 查询。

Atlas Search 会执行搜索和评分,并将匹配结果的文档 ID 和其他搜索元数据返回 mongod。然后,mongod 将对匹配结果隐式执行完整文档查找,并将结果返回客户端。如果在查询中使用 $search 并发选项,则 Atlas Search 将启用查询内并行机制。要了解更多信息,请参阅并行查询各分段。

mongodmongot 在不同节点上

运行查询时,查询会首先根据配置的读取偏好进入 mongodmongod 进程通过同一节点上的负载均衡器路由搜索查询,以便将请求分发到所有 mongot 进程。

Atlas Search mongot 进程执行搜索和评分,并将匹配结果的文档 ID 和元数据返回到 mongod。然后,mongod 对匹配结果执行完整文档查找,并将结果返回客户端。如果在查询中使用 $search 并发选项,则 Atlas Search 将启用查询内并行机制。要了解更多信息,请参阅并行查询各分段。

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

另请参见:通过观看了解

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

时长:15 分钟

您可以使用以下客户端创建并运行Atlas Search查询:

mongot 不返回任何错误,但在以下情况下返回空结果集: $search查询:

  • 引用了不存在的索引。如果您不在查询中按名称指定索引, Atlas Search默认使用名为 default 的索引。如果您没有名为 default 的索引,或者您指定的索引不存在,则Atlas Search不会返回错误而是返回空结果设立。您可以使用 index 选项按名称指定有效索引。

  • 指定非索引字段。 如果您对未编入索引的字段运行查询,Atlas Search 不会返回错误并返回空结果集。您必须仅指定索引字段作为path参数的值。 您可以在集合的索引定义中启用动态映射,以确保自动为集合中的所有可动态索引的字段编制索引。 要了解更多信息,请参阅动态映射。

  • 在未索引为string类型的字段路径(Field Path)上使用text操作符。如果字段被索引为string以外的 Atlas Search 字段类型(例如stringFacetautocomplete ,则 Atlas Search 不会返回错误并返回空结果集。 您必须使用string BSON数据类型值作为字符串类型对字段进行索引,才能使用文本操作符查询字段。

mongot 如果$search查询出现以下情况,则会返回PlanExecutor错误:

  • 指定作为不正确数据类型进行索引的字段。在这种情况下,如果您运行查询,Atlas Search 会返回一条错误消息,标识索引不正确的字段及其正确的数据类型。例如:

    PlanExecutor error during aggregation :: caused by :: Cannot facet on field "genres" because
    it was not indexed as a "stringFacet" field.

    例如,要对stringnumberdate字段运行分面(Facet)查询,请分别使用相应的 Atlas Search 字段类型(例如stringFacetnumberdate为字段创建索引。要了解详情,请参阅支持和不支持的数据类型。

后退

索引分区

在此页面上