티스토리 수익 글 보기
Use text searches
Use text search features in Firestore with MongoDB compatibility to search for specific strings within a collection.
Before you begin
Before you start using text searches, do the following:
Ensure that you have access to an existing MongoDB compatible operations database, or Create a database and connect to it.
Ensure that you have a text index, or Create a text index.
Run a text search
Text searches use the $text operator inside a filter.
Specify the queried string in the $search argument.
Run a general text search
Run the following command to perform a general text search:
# Find search
db.cities.find({ $text: { $search: "french bread" } })
# Aggregation search
db.cities.aggregate([
{ $match: { $text: { $search: "french bread" } } }
]);
If your index is partitioned, then you can filter based on the partition by
including the partition in an "and" equality filter within your search.
For example, if you had a city partition, you could filter a text search as
follows:
db.myCollection.find( { $and: [
{ $text: { $search: "french bread" } },
{ "city": "Paris" }
] } )
You can also filter an aggregation based on a partition. For example:
db.myCollection.aggregate([
{ $match: { $text: { $search: "french bread" } } },
{ "city": "Paris" }
] );
The value of your partition must be a string. Your partition filter must be joined to your text search by using an "and".
Set the text search language
You can set the text search language using the $language argument. For
example:
db.cities.find({ $text: { $search: "french bread", $language: "en"} })
If you don't set a language, then the search uses the language of the text index.
Search for an exact term
To search for an exact term, configure the term as a sequence of words enclosed by double quotes. For example:
# Find search
db.cities.find({ $text: { $search: "\"best french bread\"" } })
# Aggregation search
db.cities.aggregate([
{ $match: { $text: { $search: "\"best french bread\"" } } },
]);
Search for a term combination
To make your text search more precise, specify a chain of terms. For example, the following search returns documents that match the combination best AND french AND ("bread" OR "is"):
# Find search
db.cities.find({ $text: { $search: "\"best\" \"french\" bread is" } })
# Aggregation search
db.cities.aggregate([
{ $match: { $text: { $search: "\"best\" \"french\" bread is" } } },
]);
Exclude a term
To exclude a term from a text search, prefix the term with a hyphen (-):
# Find search
db.cities.find({ $text: { $search: "best bread -french"} })
# Aggregation search
db.cities.aggregate([
{ $match: { $text: { $search: "best bread -french" } } },
]);
Calculate relevance score
Use the {$meta: "textScore"} expression to calculate the relevance score of
the documents matched by the text search. To sort the results in descending
score order, use $meta in a sort expression. Consider the following examples,
where SCORE_FIELD is the name of the field used to store the score
value:
# Find search
db.cities
.find({ $text: { $search: "best french bread" } })
.sort({ SCORE_FIELD: { $meta: "textScore" } })
# Aggregation search
db.cities.aggregate([
{ $match: { $text: { $search: "best french bread" } } },
{ $sort: { "SCORE_FIELD": { $meta: "textScore"} } },
]);
You can also use text score in projection expressions. For example:
# Find search
db.cities
.find({ $text: { $search: "best french bread" } })
.project({ score: { $meta: "textScore" } })
# Aggregation search
db.cities.aggregate([
{ $match: { $text: { $search: "best french bread" } } },
{ $project: { "scoreField": { $meta: "textScore"} } },
]);
Expand search
To enhance the relevance of text search outcomes, the $text operator augments
the search string according to the specified language to include matches for
context-aware synonyms, stemmed forms, spelling-corrected terms,
diacritic variations and more.
Limitations
$nearoperators and$textoperators can't be used in the same text search.- A single
$textoperator is permitted perfindoraggregationsearch. - In aggregations, the
$matchstage with$textmust be the first pipeline stage. $textcan only be nested inside$andand$or.- If
$textis inside$or, the non-search disjuncts may use existing ordered indexes to optimize the search. If the other disjuncts are not indexed, then the search relies on a collection scan. $textcannot be used with hints.- Queries with text search can't sort by
$natural. - Text search isn't supported for
Assured Workloads
control packages that enforce
in-use data residency,
where the
constraints/firestore.managed.disableEnhancedTextSearchorganization policy constraint is enforced by default.
Except as otherwise noted, the content of this page is licensed under the Creative Commons Attribution 4.0 License, and code samples are licensed under the Apache 2.0 License. For details, see the Google Developers Site Policies. Java is a registered trademark of Oracle and/or its affiliates.
Last updated 2026-10-20 UTC.