text¶
Definition¶
The text
operator performs a full-text search using the
analyzer specified in the index
configuration. If you do not specify an
analyzer, the default standard
analyzer is used.
Syntax¶
text
has the following syntax:
{ $search: { "index": <index name>, // optional, defaults to "default" "text": { "query": "<search-string>", "path": "<field-to-search>", "fuzzy": <options>, "score": <options> } } }
Fields¶
Field | Type | Description | Required? |
---|---|---|---|
query | string or array of strings | The string or strings to search for. If there are multiple terms in a string, Atlas Search also looks for a match for each term in the string separately. | yes |
path | string or array of strings | The indexed field or fields to search. You can also specify a wildcard path to search. See path construction for more information. | yes |
fuzzy | object | Enable fuzzy search. Find strings which are similar to the search term or terms. | no |
fuzzy.maxEdits | integer | Maximum number of single-character edits required to match the
specified search term. Value can be 1 or 2 . The default
value is 2 . Uses Levenshtein distance. | no |
fuzzy.prefixLength | integer | Number of characters at the beginning of each term in the result
that must exactly match. The default value is 0 . | no |
fuzzy.maxExpansions | integer | The maximum number of variations to generate and search for. This
limit applies on a per-token basis. The default value is 50 . | no |
score | object | The score assigned to matching search term results. Use one of the following options to modify the score:
| no |
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 index on the title
field and
run the queries on your cluster. The Tutorial: Create and Query an Atlas Search Index contains
instructions for loading the sample dataset,
creating an index definition, and running Atlas Search
queries.
Basic Example¶
The following Atlas Search example uses the text
operator to search the title
field in the movies
collection for the term surfer
.
The following query searches the title
field for the term surfer
.
It includes a $project
stage to:
- Exclude all fields except
title
- Add a field named
score
db.movies.aggregate([ { $search: { "text": { "path": "title", "query": "surfer" } } }, { $project: { "_id": 0, "title": 1, score: { $meta: "searchScore" } } } ])
The above query returns the following results:
{ "title" : "Soul Surfer", "score" : 4.572484970092773 } { "title" : "Little Surfer Girl", "score" : 3.9323642253875732 } { "title" : "Fantastic 4: Rise of the Silver Surfer", "score" : 2.520784616470337 }
Fuzzy Examples¶
The following examples use the text
operator to search the title
field in the movies
collection for terms that are within one
character variation of each term in the query
phrase naw yark
.
The following query searches the title
field for terms that are
within one character of each term in the string naw yark
. It uses:
- The
maxEdits
field to indicate that only one character variation is allowed for each term to match the query to a document. - The
maxExpansions
field to indicate that up to one hundred similar terms fornaw
and one hundred similar terms toyark
must be considered when matching the query to a document.
The query also includes a $limit stage to limit the output to 10 results and a $project stage to:
- Exclude all fields except
title
- Add a field named
score
db.movies.aggregate([ { $search: { "text": { "path": "title", "query": "naw yark", "fuzzy": { "maxEdits": 1, "maxExpansions": 100, } } } }, { $limit: 10 }, { $project: { "_id": 0, "title": 1, score: { $meta: "searchScore" } } } ])
The above query returns the following results:
{ "title" : "New York, New York", "score" : 4.392756462097168 } { "title" : "New York", "score" : 4.050914287567139 } { "title" : "New York Stories", "score" : 3.4838104248046875 } { "title" : "New York Minute", "score" : 3.4838104248046875 } { "title" : "Synecdoche, New York", "score" : 3.4838104248046875 } { "title" : "New York Doll", "score" : 3.4838104248046875 } { "title" : "Little New York", "score" : 3.4838104248046875 } { "title" : "Escape from New York", "score" : 3.0559897422790527 } { "title" : "King of New York", "score" : 3.0559897422790527 } { "title" : "Naked in New York", "score" : 3.0559897422790527 }