为结果中的文档打分
Atlas Search 查询返回的每份文档都会根据相关性进行评分,结果集所包含的文档按分数高低顺序返回。
很多因素都会影响文档的分数,包括:
注意
当您查询数组中的值时,Atlas Search 不会根据与查询匹配的数组内的值数量更改匹配结果的分数。无论数组内有多少个匹配项,分数都将与单个匹配项相同。
分配给返回文档的分数是文档元数据的一部分。通过在聚合管道中使用 $project
阶段,可以将每个返回文档的分数与结果集一起包含在内。
在 $search
阶段之后,在 $project
阶段,score
字段采用 $meta 表达式,此表达式需要 searchScore
值。您也可以为 scoreDetails
字段 $meta 表达式指定 searchScoreDetails
值,以了解分数明细。
在 $vectorSearch
阶段之后,在 $project
阶段,score
字段采用了 $meta 表达式,需要 vectorSearchScore
值返回向量搜索结果中每个文档的分数。
例子
下面的查询使用 $project
阶段在返回的文档中添加名为 score
的字段:
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "text": { 5 <operator-specification> 6 }, 7 "scoreDetails": true 8 } 9 }, 10 { 11 "$project": { 12 "<field-to-include>": 1, 13 "<field-to-exclude>": 0, 14 "scoreDetails": { "$meta": "searchScoreDetails" } 15 } 16 } 17 ])
要了解更多信息,请参阅返回搜索分数详情。
1 db.movies.aggregate([ 2 { 3 "$vectorSearch": { 4 <query-syntax> 5 } 6 }, 7 { 8 "$project": { 9 "<field-to-include>": 1, 10 "<field-to-exclude>": 0, 11 "score": { "$meta": "vectorSearchScore" } 12 } 13 } 14 ])
要了解详细信息,请参阅 Atlas Vector Search 分数。
在 $project
阶段之后,不需要加入降序 $sort
,因为 Atlas Search 会从最高得分到最低得分返回文档。但是,如果结果中的多份文档具有相同得分,则文档顺序是不确定的。如果希望结果有明确的排序,建议您在 $search
阶段加入排序选项,以便按唯一字段对结果进行排序。如果未指定唯一字段,Atlas Search 默认会在结果分数相同时对结果进行任意排序。您还可以使用排序选项,按分数对结果进行升序排序。要了解更多信息,请参阅对 Atlas Search 结果进行排序和按分数排序示例。
注意
有关 Lucene 评分算法的更多信息,请参阅 Lucene 文档。