You can use the multi object in your index definition to specify
alternate analyzers with which to also index the field. When you index
a field with alternate analyzers in addition to the default analyzer,
you can search the collection with either the default or the alternate
analyzer. This page demonstrates how to specify alternate analyzers in
your index definition using multi.
Multi Analyzer Limitations
The multi path option is available only to fields of
type string.
MongoDB Search does not support nesting multiple layers of multi objects.
Examples
The following examples demonstrate index definitions on the fields in the
sample_mflix.movies collection. If you load the collection on your
cluster, you can create the example indexes using the Visual Editor or
the JSON Editor in the Atlas UI or using mongosh.
➤ Use the Select your language drop-down menu to set the interface for the example on this page.
Single Field Example
The following example index definition specifies an index on the
title field  using the standard analyzer. The index definition
also specifies lucene.french analyzer as
an alternate analyzer for the title field, with the name
frenchAnalyzer.
- Click Refine Your Index to configure your index. 
- In the Field Mappings section, click Add Field to open the Add Field Mapping window. 
- Select - titlefrom the Field Name dropdown.
- Click the Data Type dropdown and select String if it isn't already selected. 
- Expand String Properties and make the following changes: - Index Analyzer - Select - lucene.standardfrom the dropdown if it isn't already selected.- Search Analyzer - Select - lucene.standardfrom the dropdown if it isn't already selected.- Index Options - Use the default - offsets.- Store - Use the default - true.- Ignore Above - Keep the default setting. - Norms - Use the default - include.
- Click Add Multi Field to configure another analyzer on the - titlefield.
- Enter - frenchAnalyzerin the Multi Field Name field.
- Make the following changes to the Multi Field Properties : - Index Analyzer - Select - lucene.frenchfrom the dropdown if it isn't already selected.- Search Analyzer - Select - lucene.frenchfrom the dropdown if it isn't already selected.- Index Options - Use the default - offsets.- Store - Use the default - true.- Ignore Above - Keep the default setting. - Norms - Use the default - include.
- Click Add. 
- Click Save Changes. 
- Click Create Search Index. 
- Replace the default index definition with the following index definition. - 1 - { - 2 - "mappings": { - 3 - "dynamic": false, - 4 - "fields": { - 5 - "title": { - 6 - "type": "string", - 7 - "analyzer": "lucene.standard", - 8 - "multi": { - 9 - "frenchAnalyzer": { - 10 - "type": "string", - 11 - "analyzer": "lucene.french" - 12 - } - 13 - } - 14 - } - 15 - } - 16 - } - 17 - } 
- Click Next. 
- Click Create Search Index. 
1 db.movies.createSearchIndex( 2   "default", 3     { 4       "mappings": { 5         "dynamic": false, 6         "fields": { 7           "title": { 8             "type": "string", 9             "analyzer": "lucene.standard", 10             "multi": { 11               "frenchAnalyzer": { 12                 "type": "string", 13                 "analyzer": "lucene.french" 14               } 15           } 16         } 17       } 18     } 19   } 20 ) 
The following query uses the alternate analyzer, named
frenchAnalyzer, to search for the string liberte.
- Click the Query button for your index. 
- Click Edit Query to edit the query. 
- Click on the query bar and select the database and collection. 
- Replace the default query with the following and click Find: - [ - { - "$search": { - "text": { - "query": "liberte", - "path": { "value": "title", "multi": "frenchAnalyzer" } - } - } - } - ] - SCORE: 4.9305267333984375 _id: "573a1392f29313caabcd9950" - awards: Object - cast: Array (4) - countries: Array (1) - directors: Array (1) - fullplot: "A famous left-wing satirical comedy about two ex-convicts, one of whom…" - genres: Array (2) - imdb: Object - languages: Array (1) - lastupdated: "2015-08-21 00:02:36.330000000" - num_mflix_comments: 1 - plot: "A famous left-wing satirical comedy about two ex-convicts, one of whom…" - poster: "https://m.media-amazon.com/images/M/MV5BODg0ODAzNTItM2M4ZC00NGYxLWIzMm…" - rated: "APPROVED" - released: 1931-12-31T00:00:00.000+00:00 - runtime: 97 - title: "è Nous la Libertè" - tomatoes: Object - type: "movie" - writers: Array (1) - year: 1931 
1 db.movies.aggregate([ 2   { 3     "$search": { 4       "text": { 5         "query": "liberte", 6         "path": { "value": "title", "multi": "frenchAnalyzer" } 7       } 8     } 9   }, 10   { 11     "$project": { 12       "title": 1, 13       "year": 1, 14       "_id": 0 15     } 16   } 17 ]) 
[ { title: 'è Nous la Libertè', year: 1931 } ] 
The document in the results is a match because the frenchAnalyzer
reduced both the indexed string è Nous la Libertè and query term
liberte to the base word libert. MongoDB Search won't return this
document for a search with the standard analyzer because it doesn't
remove diacritics. Each analyzer generates the following tokens
(searchable terms) for the index and query:
| Analyzer | Index Tokens | Query Tokens | 
|---|---|---|
| Standard Analyzer | 
 | 
 | 
| French Analyzer | 
 | 
 | 
Multiple Fields Example
The following example index definition specifies an index on the
title and plot fields using the standard analyzer. The index
definition also specifies lucene.french as an alternate analyzer for the title
and the plot fields.
- Click Refine Your Index to configure your index. 
- In the Field Mappings section, click Add Field to open the Add Field Mapping window. 
- Select - titlefrom the Field Name dropdown.
- Click the Data Type dropdown and select String if it isn't already selected. 
- Expand String Properties and make the following changes: - Index Analyzer - Select - lucene.standardfrom the dropdown if it isn't already selected.- Search Analyzer - Select - lucene.standardfrom the dropdown if it isn't already selected.- Index Options - Use the default - offsets.- Store - Use the default - true.- Ignore Above - Keep the default setting. - Norms - Use the default - include.
- Click Add Multi Field to configure another analyzer on the - titlefield.
- Enter - frenchAnalyzerin the Multi Field Name field.
- Make the following changes to the Multi Field Properties : - Index Analyzer - Select - lucene.frenchfrom the dropdown if it isn't already selected.- Search Analyzer - Select - lucene.frenchfrom the dropdown if it isn't already selected.- Index Options - Use the default - offsets.- Store - Use the default - true.- Ignore Above - Keep the default setting. - Norms - Use the default - include.
- Click Add. 
- Click Add Field Mapping to open the Add Field Mapping window. 
- Select - plotfrom the Field Name dropdown.
- Repeat steps 4 to 9. 
- Click Save Changes. 
- Click Create Search Index. 
- Replace the default index definition with the following index definition. - 1 - { - 2 - "mappings": { - 3 - "dynamic": false, - 4 - "fields": { - 5 - "title": { - 6 - "type": "string", - 7 - "analyzer": "lucene.standard", - 8 - "multi": { - 9 - "frenchAnalyzer": { - 10 - "type": "string", - 11 - "analyzer": "lucene.french" - 12 - } - 13 - } - 14 - }, - 15 - "plot": { - 16 - "type": "string", - 17 - "analyzer": "lucene.standard", - 18 - "multi": { - 19 - "frenchAnalyzer": { - 20 - "type": "string", - 21 - "analyzer": "lucene.french" - 22 - } - 23 - } - 24 - } - 25 - } - 26 - } - 27 - } 
- Click Next. 
- Click Create Search Index. 
1 db.movies.createSearchIndex( 2   "default", 3     { 4       "mappings": { 5         "dynamic": false, 6         "fields": { 7           "title": { 8             "type": "string", 9             "analyzer": "lucene.standard", 10             "multi": { 11               "frenchAnalyzer": { 12                 "type": "string", 13                 "analyzer": "lucene.french" 14               } 15             } 16           }, 17           "plot": { 18             "type": "string", 19             "analyzer": "lucene.standard", 20             "multi": { 21               "frenchAnalyzer": { 22                 "type": "string", 23                 "analyzer": "lucene.french" 24               } 25             } 26           } 27         } 28       } 29     } 30 ) 
The following query searches for matches for the string revolution in the
title and the plot fields by using the alternate analyzer named
frenchAnalyzer.
- Click the Query button for your index. 
- Click Edit Query to edit the query. 
- Click on the query bar and select the database and collection. 
- Replace the default query with the following and click Find: - [ - { - "$search": { - "text": { - "query": "revolution", - "path": [ - "title", "plot", - { "value": "title", "multi": "frenchAnalyzer" }, - { "value": "plot", "multi": "frenchAnalyzer" } - ] - } - } - } - ] - SCORE: 14.07243537902832 _id: "573a13dbf29313caabdaf845" - awards: Object - cast: Array (4) - countries: Array (11) - directors: Array (1) - fullplot: "REVOLUTION is a film about changing the world, going for it, taking a …" - genres: Array (3) - imdb: Object - languages: Array (1) - lastupdated: "2015-07-09 11:14:18.300000000" - metacritic: 53 - num_mflix_comments: 0 - plot: "REVOLUTION is a film about changing the world, going for it, taking a …" - poster: "https://m.media-amazon.com/images/M/MV5BMTc1NDIxNjc0N15BMl5BanBnXkFtZT…" - rated: "PG" - released: 2015-04-22T00:00:00.000+00:00 - runtime: 85 - title: "Revolution" - tomatoes: Object - type: "movie" - writers: Array (1) - year: 2012 - SCORE: 13.935744285583496 _id: "573a1398f29313caabce9ae2" - awards: Object - cast: Array (4) - countries: Array (2) - directors: Array (1) - fullplot: "New York trapper Tom Dobb becomes an unwilling participant in the Amer…" - genres: Array (3) - imdb: Object - languages: Array (1) - lastupdated: "2015-08-14 00:46:28.990000000" - num_mflix_comments: 1 - plot: "New York trapper Tom Dobb becomes an unwilling participant in the Amer…" - poster: "https://m.media-amazon.com/images/M/MV5BZmZhMmEyNjktZTgxZC00NzQyLTkyZD…" - rated: "PG-13" - released: 1985-12-25T00:00:00.000+00:00 - runtime: 126 - title: "Revolution" - type: "movie" - writers: Array (1) - year: 1985 - SCORE: 11.623137474060059 _id: "573a13f5f29313caabde37d4" - awards: Object - cast: Array (4) - countries: Array (1) - directors: Array (1) - fullplot: "Together with five Soviet avant-garde artists, hero of the Russian rev…" - genres: Array (1) - imdb: Object - languages: Array (1) - lastupdated: "2015-09-15 03:33:53.177000000" - num_mflix_comments: 1 - plot: "Together with five Soviet avant-garde artists, hero of the Russian rev…" - released: 2014-11-18T00:00:00.000+00:00 - runtime: 113 - title: "Angels of Revolution" - type: "movie" - writers: Array (3) - year: 2014 - SCORE: 11.210482597351074 _id: "573a1396f29313caabce4248" - awards: Object - cast: Array (4) - countries: Array (1) - directors: Array (1) - fullplot: "An account of the adventures of two sets of identical twins, badly scr…" - genres: Array (2) - imdb: Object - languages: Array (1) - lastupdated: "2015-09-05 00:50:08.277000000" - num_mflix_comments: 0 - plot: "Two mismatched sets of identical twins - one aristocrat, one peasant -…" - poster: "https://m.media-amazon.com/images/M/MV5BODM2MzE3NmMtNmE2ZS00OGI2LWI5NT…" - rated: "M" - released: 1970-08-14T00:00:00.000+00:00 - runtime: 90 - title: "Start the Revolution Without Me" - tomatoes: Object - type: "movie" - writers: Array (2) - year: 1970 - SCORE: 8.332647323608398 _id: "573a1398f29313caabceba10" - awards: Object - cast: Array (4) - countries: Array (5) - directors: Array (2) - fullplot: "A history of the French Revolution from the decision of the king to co…" - genres: Array (3) - imdb: Object - languages: Array (2) - lastupdated: "2015-09-05 00:30:36.643000000" - num_mflix_comments: 0 - plot: "A history of the French Revolution from the decision of the king to co…" - released: 1989-10-25T00:00:00.000+00:00 - runtime: 360 - title: "La rèvolution franèaise" - tomatoes: Object - type: "movie" - writers: Array (5) - year: 1989 - SCORE: 7.699893474578857 _id: "573a13a4f29313caabd10215" - awards: Object - cast: Array (4) - countries: Array (1) - directors: Array (1) - genres: Array (1) - imdb: Object - languages: Array (1) - lastupdated: "2015-09-10 17:19:25.853000000" - metacritic: 63 - num_mflix_comments: 0 - poster: "https://m.media-amazon.com/images/M/MV5BMTkxOTUzNjg0Ml5BMl5BanBnXkFtZT…" - released: 2001-04-22T00:00:00.000+00:00 - runtime: 90 - title: "Revolution #9" - tomatoes: Object - type: "movie" - writers: Array (1) - year: 2001 - SCORE: 6.8415961265563965 _id: "573a13a0f29313caabd05edb" - awards: Object - cast: Array (4) - countries: Array (1) - directors: Array (1) - fullplot: "Friendship and betrayal between two poets during the French Revolution…" - genres: Array (2) - imdb: Object - languages: Array (1) - lastupdated: "2015-04-17 01:56:58.940000000" - metacritic: 60 - num_mflix_comments: 0 - plot: "Friendship and betrayal between two poets during the French Revolution…" - poster: "https://m.media-amazon.com/images/M/MV5BMTQ0Nzc0OTkwM15BMl5BanBnXkFtZT…" - rated: "PG-13" - released: 2001-04-18T00:00:00.000+00:00 - runtime: 124 - title: "Pandaemonium" - tomatoes: Object - type: "movie" - writers: Array (1) - year: 2000 - SCORE: 6.7074995040893555 _id: "573a1397f29313caabce8972" - awards: Object - cast: Array (4) - countries: Array (1) - directors: Array (1) - fullplot: "Set ten years after the most peaceful revolution in United States hist…" - genres: Array (3) - imdb: Object - languages: Array (1) - lastupdated: "2015-09-10 17:14:53.427000000" - num_mflix_comments: 1 - plot: "Set ten years after the most peaceful revolution in United States hist…" - poster: "https://m.media-amazon.com/images/M/MV5BYTE5MGNhN2QtMTNhYy00MDQ1LTgzOT…" - released: 1983-11-03T00:00:00.000+00:00 - runtime: 80 - title: "Born in Flames" - tomatoes: Object - type: "movie" - writers: Array (2) - year: 1983 - SCORE: 6.615457057952881 _id: "573a1395f29313caabce1c90" - awards: Object - cast: Array (4) - countries: Array (1) - directors: Array (1) - fullplot: "The study of a youth on the edge of adulthood and his aunt, ten years …" - genres: Array (2) - imdb: Object - languages: Array (1) - lastupdated: "2015-08-21 00:16:07.580000000" - num_mflix_comments: 0 - plot: "The study of a youth on the edge of adulthood and his aunt, ten years …" - poster: "https://m.media-amazon.com/images/M/MV5BMmJjOGRjNWMtOGE5Ni00YzYwLThkM2…" - released: 1964-05-12T00:00:00.000+00:00 - runtime: 105 - title: "Before the Revolution" - tomatoes: Object - type: "movie" - writers: Array (2) - year: 1964 - SCORE: 6.615457057952881 _id: "573a13cef29313caabd86ecc" - awards: Object - cast: Array (1) - countries: Array (1) - directors: Array (1) - fullplot: "Through intimate interviews, provocative art, and rare, historical fil…" - genres: Array (1) - imdb: Object - languages: Array (1) - lastupdated: "2015-04-02 00:54:39.997000000" - metacritic: 70 - num_mflix_comments: 1 - plot: "Through intimate interviews, provocative art, and rare, historical fil…" - poster: "https://m.media-amazon.com/images/M/MV5BMjE1MDU1MDA2Nl5BMl5BanBnXkFtZT…" - released: 2011-06-01T00:00:00.000+00:00 - runtime: 83 - title: "!Women Art Revolution" - tomatoes: Object - type: "movie" - year: 2010 
1 db.movies.aggregate([ 2   { 3     "$search": { 4       "text": { 5         "query": "revolution", 6         "path": ["title", "plot", 7           { "value": "title", "multi": "frenchAnalyzer" }, 8           {  "value": "plot", "multi": "frenchAnalyzer" } 9         ] 10       } 11     } 12   }, 13   { 14     "$limit": 5 15   }, 16   { 17     "$project": { 18       "title": 1, 19       "plot": 1, 20       "year": 1, 21       "_id": 0 22     } 23   } 24 ]) 
[   {     year: 2012,     plot: 'REVOLUTION is a film about changing the world, going for it, taking a stand, and fighting for something. A true-life adventure following Director, Rob Stewart (SHARKWATER) over four years ...',     title: 'Revolution'   },   {     plot: 'New York trapper Tom Dobb becomes an unwilling participant in the American Revolution after his son Ned is drafted into the Army by the villainous Sergeant Major Peasy. Tom attempts to find...',     title: 'Revolution',    year: 1985   },   {     plot: "Together with five Soviet avant-garde artists, hero of the Russian revolution Polina Schneider travels to Siberia to 'civilize' the native Khanty and Nenets tribes, for whom interaction ...",     title: 'Angels of Revolution',     year: 2014   },   {     plot: 'Two mismatched sets of identical twins - one aristocrat, one peasant - mistakenly exchange identities on the eve of the French Revolution.',     title: 'Start the Revolution Without Me',     year: 1970   },   {     plot: "A history of the French Revolution from the decision of the king to convene the Etats-Generaux in 1789 in order to deal with France's debt problem. The first part of the movie tells the ...",     title: 'La rèvolution franèaise',     year: 1989   } ] 
The documents in the results contain the query term in both the
title and the plot fields. Each analyzer creates the following
tokens (searchable terms) for the title field for each document in
the results:
| Year | Analyzer | Index Tokens | Query Tokens | 
| 2012 | Standard Analyzer French Analyzer | revolutionrevolution | revolutionrevolution | 
| 1985 | Standard Analyzer French Analyzer | revolutionrevolution | revolutionrevolution | 
| 2014 | Standard Analyzer French Analyzer | angels,of,revolutionangels,of,revolution | revolutionrevolution | 
| 1970 | Standard Analyzer French Analyzer | start,the,revolution,without,mestart,the,revolution,without | revolutionrevolution | 
| 1989 | Standard Analyzer French Analyzer | la,rèvolution,franèaiserevolution,franeais | revolutionrevolution | 
For the fifth document in the results, the frenchAnalyzer removed
the diacritics in the title field to match the document to the query
term.