Scoring¶
Every document returned by an Atlas Search query is assigned a score based on relevance, and the documents included in a result set are returned in order from highest score to lowest.
Behavior¶
Many factors can influence a document's score, including:
- The position of the search term in the document,
- The frequency of occurrence of the search term in the document,
- The type of operator the query uses,
- The type of analyzer the query uses.
The score assigned to a returned document is part of the document's
metadata. You can include each returned document's score along with the
result set by using a $project
in your aggregation
pipeline.
The following example query uses a $project
stage to add a
field named score
to the returned documents:
1 db.movies.aggregate([ 2 { 3 $search: { 4 "text": { 5 "query": "Helsinki", 6 "path": "plot" 7 } 8 } 9 }, 10 { 11 $project: { 12 plot: 1, 13 title: 1, 14 score: { $meta: "searchScore" } 15 } 16 } 17 ])
More information about the Lucene scoring algorithm can be found in the Lucene documentation.
Options¶
The following score modifying options are available to all operators. For details and examples, click any of the following options:
boost
¶
The boost
option multiplies a result's base score by a given number
or the value of a numeric field in the documents.
- The
boost
andconstant
options can't be used together. - The
boost
option withpath
is the same as multiplying using thefunction
option with a path expression.
Fields¶
The boost
option takes the following fields:
Field | Type | Necessity | Description |
---|---|---|---|
value | float | Conditional | Number to multiply the default base score by. Value must be a
positive number. Either value or path is required, but
you can't specify both. |
path | string | Conditional | Name of the numeric field whose value to multiply the default
base score by. Either path or value is required, but you
can't specify both. |
undefined | float | Optional | Numeric value to substitute for path if the numeric field
specified through path is not found in the documents. If
omitted, defaults to 0 . You can specify this only if you
specify path . |
Examples¶
The following examples use the movies
collection in the
sample_mflix
database. If you have the sample dataset on your cluster, you can create the Atlas Search
default
index and run the example queries on your cluster.
The sample queries include a $project
stage to exclude all fields
except title
and score
.
constant
¶
The constant
option replaces the base score with a specified number.
The constant
and boost
options may not be used together.
Examples¶
The following example uses the default index on the sample_mflix.movies
collection to query the title
field. In the query, the text
operator uses score
with the constant
option to replace all score results
with 5
.
1 db.movies.aggregate([ 2 { 3 $search: { 4 "text": { 5 "query": "tower", 6 "path": "title", 7 "score": { "constant": { "value": 5 } } 8 } 9 } 10 }, 11 { 12 $project: { 13 "_id": 0, 14 "title": 1, 15 "score": { "$meta": "searchScore" } 16 } 17 } 18 ])
The above query returns the following results, in which the score is
replaced with the specified constant
value:
1 { "title": "Tower Heist", "score": 5 } 2 { "title": "Tokyo Tower", "score": 5 } 3 { "title": "The Leaning Tower", "score": 5 } 4 { "title" : "Tower Block", "score" : 5 } 5 { "title": "Ivory Tower", "score": 5 }
function
¶
The function
option allows you to alter the final score of the document
using a numeric field . You can specify the numeric field for
computing the final score through an expression.
Expressions¶
Use the following expressions with the function
option
to alter the final score of the document:
- Arithmetic expressions, which add or multiply a series of numbers.
- Constant expressions, which allow a constant number in the function score.
- Path expressions, which incorporate an indexed numeric field value into a function score.
- Score expressions, which return the relevance score assigned by Atlas Search.
- Unary expressions, which are expressions that take a single argument. In Atlas Search, you can calculate the log10(x) or log10(x+1) of a specified number.
Examples¶
The following examples use the default index on the
sample_mflix.movies
collection to query the title
field. The
sample queries include a $limit
stage to limit the output to 5
results and a $project
stage to exclude all fields except title
and score
.