Docs 菜单

Docs 主页启动和管理 MongoDBMongoDB Atlas

queryString

在此页面上

  • 定义
  • 语法
  • 选项
  • 举例
  • 布尔操作符查询
  • 范围查询
  • 通配符查询
queryString

queryString 操作符支持查询索引字段和值的组合。您可以使用 queryString 操作符对 string 字段执行文本、通配符、正则表达式、模糊和范围搜索。

queryString 通过以下语法实现:

1{
2 "$search": {
3 "index": <index name>, // optional, defaults to "default"
4 "queryString": {
5 "defaultPath": "<default-field-to-search>",
6 "query": "(<field-to-search>: (<search-values>) AND|OR (<search-values>)) AND|OR (<search-values>)"
7 }
8 }
9}

queryString 使用以下词条来构造查询:

字段
类型
说明
必要性
defaultPath
字符串
默认搜索的索引字段。如果您没有在 query 中提供要搜索的字段,则 Atlas Search 仅搜索 defaultPath 中的字段。
query
字符串

要搜索的一个或多个索引字段和值。字段和值以冒号分隔。例如,要在 plot 字段中搜索字符串 baseball,请使用 plot:baseball。以下操作符可用于组合多个搜索条件:

您可以使用以下方法组合字段和值:

AND
表示 AND 布尔操作符。必须存在所有搜索值,文档才能包含在结果中。
OR
表示 OR 布尔操作符。必须至少有一个搜索值存在,搜索结果中才能包含文档。
NOT
表示 NOT 布尔操作符。指定的搜索值必须不存在,文档才能包含在搜索结果中。
TO
表示要搜索的范围。您可以使用 [] 表示包含范围,使用 {} 表示排除范围,或使用 {][} 表示半开范围。必须存在指定范围内的值,文档才能包含在结果中。
()
子查询的分隔符。使用括号对要搜索的字段和值进行分组。

提示

另请参阅:

使用操作符和分隔符搜索示例movies集合的一些示例查询的示例。

您可以使用以下符号运行通配符和正则表达式查询:

?
指示要匹配的任何单个字符。
*
表示要匹配 0 个或多个字符。
/
正则表达式的分隔符。
~

指示模糊搜索以查找与搜索词相似的字符串。如果将其与字符串中的多个术语一起使用,则queryString 操作符会对指定数量术语内的术语进行邻近搜索。

注意

对于模糊搜索,queryString 操作符匹配最多 2 次编辑的词语。较高的距离没有用处,因为它可能与字典中的大量词语相匹配。例如,"foo":"stop"~2 等于以下查询:

{ "path": "foo", "query": "stop", "maxEdits": 2 }

对于邻近搜索,queryString 操作符使用搜索短语中单词之间指定的距离来匹配词语。例如,"foo":"New York"~2 等于以下查询:

{ "path": "foo", "query": "New York", "slop": 2 }

注意

queryString 操作符不支持以 * 作为查询中第一个字符的通配符查询。queryString 操作符会将 * 前面的任何字符视为前缀或必须完全匹配的字符。

score
对象

分配给匹配搜索词结果的分数。您可以使用以下选项修改默认分数:

  • boost将生成的分数乘以给定数字。

  • constant将结果分数替换为给定数字。

  • function:使用给定的表达式替换结果分数。

有关在查询中使用 score 的信息,请参阅对结果中的文档进行评分

注意

当您查询数组中的值时,Atlas Search 不会根据与查询匹配的数组内的值数量更改匹配结果的分数。无论数组内有多少个匹配项,分数都将与单个匹配项相同。

以下示例使用 sample_mflix 数据库中的 movies 集合。如果集群上有样本数据集,则可以使用动态映射创建名为 default 的 Atlas Search 索引,并在集群上运行示例查询。

以下示例使用 queryString 操作符查询包含词语 captainkirkchess 的电影情节。此示例展示了如何使用括号对相同的搜索词进行不同的分组,从而导致不同的文档被包含在搜索结果中。

例子

以下查询在 plot 字段中搜索词 captainkirkchess 的组合。根据搜索词的分组方式,每次查询都会返回不同的结果。

查询还包括一个$project阶段,用于:

  • 排除 titleplotfullpath 以外的所有字段

  • 添加字段 score

以下示例使用queryString操作符通过模糊、通配符和正则表达式查询电影标题。查询包括$project阶段,用于排除title以外的所有字段。

← 短语
范围 →