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

$search

在此页面上

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

The $search stage performs a full-text search on the specified field or fields. The field or fields must be covered by an Atlas Search index.

$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
Flag that specifies whether to retrieve a detailed breakdown of the score for the documents in the results. If omitted, defaults to false. To view the details, you must use the $meta expression in the $project stage. To learn more, see Return the Score Details.
sort
对象
Optional
文档,指定按升序或降序对 Atlas Search 结果进行排序的字段。您可以按日期、数字(整数、浮点数和 double)和字符串值排序。要了解详情,请参阅对 Atlas Search 结果进行排序
tracking
对象
Optional
指定用于检索搜索词相关分析信息的跟踪选项的文档。

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

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

The $$SEARCH_META aggregation variable can be used anywhere after a $search stage in any pipeline, but it can't be used after the $lookup or $unionWith stage in any pipeline. Starting in MongoDB 6.0, the $$SEARCH_META aggregation variable can't be used in any subsequent stage after a $searchMeta stage.

例子

假设 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 变量及其用法的更多信息,请参阅:

If you are experiencing issues with your Atlas Search $search queries, see Troubleshoot Atlas Search Errors.

后退

1。选择聚合管道阶段

来年

$searchMeta