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

$search

在此页面上

  • 语法
  • 字段
  • 行为
  • 聚合变量
  • 故障排除
$search

$search 阶段对指定的一个或多个字段执行全文搜索。这些字段必须由 Atlas Search 索引覆盖。

$search 管道阶段采用以下原型形式:

{
$search: {
"index": "<index-name>",
"<operator-name>"|"<collector-name>": {
<operator-specification>|<collector-specification>
},
"highlight": {
<highlight-options>
},
"concurrent": true | false,
"count": {
<count-options>
},
"searchAfter"|"searchBefore": "<encoded-token>",
"scoreDetails": true| false,
"sort": {
<fields-to-sort>: 1 | -1
},
"returnStoredSource": true | false,
"tracking": {
<tracking-option>
}
}
}

$search 阶段采用包含以下字段的文档:

字段
类型
必要性
说明
<collector-name>
对象
可选的
用于查询的收集器名称。您可以提供一个包含收集器特定选项的文档作为该字段的值。必须提供此项或 <operator-name>
concurrent
布尔
Optional
专用搜索节点上并行搜索各分段。如果您的集群上没有单独的搜索节点,Atlas Search 会忽略此标志。如果省略,则默认值为 false。要了解详情,请参阅并行查询各分段
count
对象
Optional
文件,用于指定检索结果计数的计数选项。 要了解更多信息,请参阅 Count Atlas 搜索结果。
highlight
对象
Optional
指定在原始上下文中显示搜索词的高亮选项的文档。
index
字符串
Optional

要使用的 Atlas Search 索引的名称。如果省略,则默认值为 default

如果将索引命名为 default,则在使用 $search 管道阶段时无需指定 index 参数。如果您为索引指定了自定义名称,则必须在 index 参数中指定此名称。

如果您写错索引名称,或者指定的索引在集群上尚不存在,则 Atlas Search 不会返回结果。

<operator-name>
对象
可选的
搜索使用的操作符名称。您可以提供一个包含操作符特定选项的文档作为该字段的值。必须提供此项或 <collector-name>。使用 compound 操作符可运行包含多个操作符的复合查询。
returnStoredSource
布尔
Optional
标志,指定是对后端数据库执行完整文档查找,还是直接从 Atlas Search 仅返回存储的源字段。如果省略,则默认值为 false。 要了解详情,请参阅返回已存储源字段
searchAfter
字符串
Optional
用于检索结果的参考点。searchAfter 返回紧随指定参考点之后开始的文档。参考点必须是由 $meta 关键字 searchSequenceToken 生成的 Base64 编码令牌。如要了解详情,请参阅对结果进行分页。此字段与 searchBefore 字段互斥。
searchBefore
字符串
Optional
用于检索结果的参考点。searchBefore 返回在指定参考点之前开始的文档。参考点必须是由 $meta 关键字 searchSequenceToken 生成的 Base64 编码令牌。要了解详情,请参阅分页结果。此字段与 searchAfter 字段互斥。
scoreDetails
布尔
Optional
标志,指定是否检索结果中文档得分的明细。如果省略,则默认值为 false。要查看详情,必须在 $project 阶段中使用 $meta 表达式。要了解更多信息,请参阅返回得分详情。
sort
对象
Optional
文档,指定按升序或降序对 Atlas Search 结果进行排序的字段。您可以按日期、数字(整数、浮点数和 double)和字符串值排序。要了解详情,请参阅对 Atlas Search 结果进行排序
tracking
对象
Optional
指定用于检索搜索词相关分析信息的跟踪选项的文档。

$search 必须是其所在的任何管道中的第一阶段。$search 不能用于以下场合中:

  • 视图定义

  • $facet 管道阶段

$search 仅返回查询结果。$search 查询的元数据结果保存在 $$SEARCH_META 聚合变量中。您可以使用 $$SEARCH_META 变量查看 $search 查询的元数据结果。

$$SEARCH_META 聚合变量可以用在任何管道中 $search 阶段之后的任何地方,但不能用在任何管道中 $lookup$unionWith 阶段之后。从 MongoDB 6.0 开始,$$SEARCH_META 聚合变量不能在 $searchMeta 阶段之后的任何后续阶段使用。

例子

假设 sample_mflix.movies 集合上有如下索引。

{
"mappings": {
"dynamic": false,
"fields": {
"released": {
"type": "date"
}
}
}
}

以下查询使用 $search 阶段搜索在 2011 年 9 月 01 日前后上映的电影。查询包括:

  • $project 阶段,用来排除文档中除 titlereleased 之外的所有字段。

  • $facet 阶段,将输出:

    • docs 字段,其中包含由前 5 项搜索结果组成的数组

    • meta 值为$$SEARCH_META变量的字段

db.movies.aggregate([
{
"$search": {
"near": {
"path": "released",
"origin": ISODate("2011-09-01T00:00:00.000+00:00"),
"pivot": 7776000000
}
}
},
{
$project: {
"_id": 0,
"title": 1,
"released": 1
}
},
{ "$limit": 5 },
{
"$facet": {
"docs": [],
"meta": [
{"$replaceWith": "$$SEARCH_META"},
{"$limit": 1}
]
}
}
])
{
"docs" : [
{
"title" : "Submarino",
"released" : ISODate("2011-09-01T00:00:00Z")
},
{
"title" : "Devil's Playground",
"released" : ISODate("2011-09-01T00:00:00Z")
},
{
"title" : "Bag It",
"released" : ISODate("2011-09-01T00:00:00Z")
},
{
"title" : "Dos",
"released" : ISODate("2011-09-01T00:00:00Z")
},
{
"title" : "We Were Here",
"released" : ISODate("2011-09-01T00:00:00Z")
}
],
"meta" : [
{ "count" : { "lowerBound" : NumberLong(17373) } }
]
}

要了解有关 $$SEARCH_META 变量及其用法的更多信息,请参阅:

如果您在使用 Atlas Search $search 查询时遇到问题,请参阅排除 Atlas Search 错误。

后退

1。选择聚合管道阶段