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

短语

在此页面上

  • 定义
  • 语法
  • 选项
  • 举例
  • 单个短语示例
  • 多个短语示例
  • Slop 示例
  • 同义词示例
phrase

phrase操作符使用 索引配置 中指定的 分析器 搜索包含有序术语序列的文档。如果未指定分析器,则使用默认的 标准 分析器。

phrase 通过以下语法实现:

1{
2 $search: {
3 "index": <index name>, // optional, defaults to "default"
4 "phrase": {
5 "query": "<search-string>",
6 "path": "<field-to-search>",
7 "score": <options>,
8 "slop": <distance-number>,
9 "synonyms": "<synonyms-mapping-name>"
10 }
11 }
12}

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

字段
类型
说明
必要性
query
字符串或字符串数组
要搜索的一个或多个字符串。
path
字符串或字符串数组
要搜索的一个或多个带索引字段。您还可以指定要搜索的通配符路径。请参阅构建查询路径。
slop
整型
query 短语中单词之间允许的距离。较低值允许单词之间的位置距离较小,而较大值允许对单词之间的更多重组和单词之间的距离更大,以满足查询条件。默认值为 0,这意味着词语必须与查询位于完全相同的位置才能视为匹配。精确匹配的得分更高。
no
score
对象

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

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

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

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

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

有关修改默认评分选项的信息,请参阅对结果中的文档进行评分

no
synonyms
字符串

使用同义词运行查询时必需。

索引定义 中 同义词映射定义 的名称。值不能为空字符串。

注意

Atlas Search 执行使用同义词映射的查询所需时间取决于同义词源集合中文档的数量和大小。使用基于很少同义词文档的同义词映射的查询可能比使用基于许多同义词文档的同义词映射的查询更快。

Optional

本页中的示例使用sample_mflix数据库中的movies集合。将示例数据集加载到集群后,使用动态映射创建Atlas Search索引,并在集群上运行示例查询。要尝试同义词示例,您还必须将synonymous_terms集合添加到sample_mflix数据库,然后使用synonyms映射集合定义索引

以下 Atlas Search 示例在 title 字段中执行查询字符串 new york 的基本搜索。查询中没有 slop,因此 slop 值默认为 0,这意味着单词的位置必须与查询字符串完全匹配,才能包含在结果中。该查询还包括:

  • $limit 阶段用于将输出限制为 10 个结果。

  • $project阶段排除title以外的所有字段,并添加名为score的字段。

例子

1db.movies.aggregate([
2 {
3 "$search": {
4 "phrase": {
5 "path": "title",
6 "query": "new york"
7 }
8 }
9 },
10 { $limit: 10 },
11 {
12 $project: {
13 "_id": 0,
14 "title": 1,
15 score: { $meta: "searchScore" }
16 }
17 }
18])

以下 Atlas Search 示例在 title 字段中对查询字符串 the manthe moon 进行基本搜索。查询中没有 slop,因此 slop 值默认为 0,这意味着单词位置必须与查询字符串完全匹配,才能包含在结果中。该查询还包括:

例子

  • $limit 阶段,将输出限制为 10 个结果。

  • $project阶段排除title以外的所有字段,并添加名为score的字段。

1db.movies.aggregate([
2 {
3 "$search": {
4 "phrase": {
5 "path": "title",
6 "query": ["the man", "the moon"]
7 }
8 }
9 },
10 { $limit: 10 },
11 {
12 $project: {
13 "_id": 0,
14 "title": 1,
15 score: { $meta: "searchScore" }
16 }
17 }
18])

以下 Atlas Search 示例在title字段中执行查询字符串men women的搜索。 query5slop值允许更大的单词移动以及单词menwomen之间的距离。该查询包括$project阶段,用于:

  • 排除所有字段,但不包括 title

  • 添加字段 score

1db.movies.aggregate([
2 {
3 "$search": {
4 "phrase": {
5 "path": "title",
6 "query": "men women",
7 "slop": 5
8 }
9 }
10 },
11 {
12 $project: {
13 "_id": 0,
14 "title": 1,
15 score: { $meta: "searchScore" }
16 }
17 }
18])

以下查询在plot movies集合中的 字段中搜索给定查询字符串中的术语。 Atlas Search根据 同义词源集合 synonymous_termssample_mflix.movies 的映射类型返回结果,该类型 在 集合的索引的同义词映射定义中指定。

以下查询在plot字段中的任何位置搜索短语automobile race ,词之间的距离最大为5

db.movies.aggregate([
{
$search: {
"phrase": {
"path": "plot",
"query": "automobile race",
"slop": 5,
"synonyms": "my_synonyms"
}
}
},
{
"$limit": 5
},
{
$project: {
"_id": 0,
"plot": 1,
"title": 1,
score: { $meta: "searchScore" }
}
}
])

结果中的文档在plot字段中包含以下术语,术语之间的距离最大为5

  • automobilecarvehicle ,它们在synonymous_terms集合中定义为equivalent同义词,

  • racecontestrally ,它们在 sy``synonymous_terms``集合中定义为explicit同义词,

Atlas Search会为car racevehicle race的搜索返回类似的结果,因为我们将automobilecarvehicle配置为equivalent同义词。但是, automobile contest的结果不包括带有racerally的文档, automobile rally的结果不包括带有racecontest的文档,因为我们没有配置contestrally作为任何术语的同义词。

后退

接近