Join us Sept 17 at .local NYC! Use code WEB50 to save 50% on tickets. Learn more >
MongoDB Event
Docs Menu
Docs Home
/
Atlas
/ / / /

Multi Analyzer

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.

The multi path option is available only to fields of type string.

Atlas Search does not support nesting multiple layers of multi objects.

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.


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.

  1. Click Refine Your Index to configure your index.

  2. In the Field Mappings section, click Add Field to open the Add Field Mapping window.

  3. Select title from the Field Name dropdown.

  4. Click the Data Type dropdown and select String if it isn't already selected.

  5. Expand String Properties and make the following changes:

    Index Analyzer

    Select lucene.standard from the dropdown if it isn't already selected.

    Search Analyzer

    Select lucene.standard from 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.

  6. Click Add Multi Field to configure another analyzer on the title field.

  7. Enter frenchAnalyzer in the Multi Field Name field.

  8. Make the following changes to the Multi Field Properties :

    Index Analyzer

    Select lucene.french from the dropdown if it isn't already selected.

    Search Analyzer

    Select lucene.french from 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.

  9. Click Add.

  10. Click Save Changes.

  11. Click Create Search Index.

  1. 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}
  2. Click Next.

  3. Click Create Search Index.

1db.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.

  1. Click the Query button for your index.

  2. Click Edit Query to edit the query.

  3. Click on the query bar and select the database and collection.

  4. 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
1db.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. Atlas 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

è, nous, la, libertè

libertè

French Analyzer

è, libert

libert

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.

  1. Click Refine Your Index to configure your index.

  2. In the Field Mappings section, click Add Field to open the Add Field Mapping window.

  3. Select title from the Field Name dropdown.

  4. Click the Data Type dropdown and select String if it isn't already selected.

  5. Expand String Properties and make the following changes:

    Index Analyzer

    Select lucene.standard from the dropdown if it isn't already selected.

    Search Analyzer

    Select lucene.standard from 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.

  6. Click Add Multi Field to configure another analyzer on the title field.

  7. Enter frenchAnalyzer in the Multi Field Name field.

  8. Make the following changes to the Multi Field Properties :

    Index Analyzer

    Select lucene.french from the dropdown if it isn't already selected.

    Search Analyzer

    Select lucene.french from 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.

  9. Click Add.

  10. Click Add Field Mapping to open the Add Field Mapping window.

  11. Select plot from the Field Name dropdown.

  12. Repeat steps 4 to 9.

  13. Click Save Changes.

  14. Click Create Search Index.

  1. 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}
  2. Click Next.

  3. Click Create Search Index.

1db.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.

  1. Click the Query button for your index.

  2. Click Edit Query to edit the query.

  3. Click on the query bar and select the database and collection.

  4. 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
1db.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
revolution
revolution
revolution
revolution

1985

Standard Analyzer
French Analyzer
revolution
revolution
revolution
revolution

2014

Standard Analyzer
French Analyzer
angels, of, revolution
angels, of, revolution
revolution
revolution

1970

Standard Analyzer
French Analyzer
start, the, revolution, without, me
start, the, revolution, without
revolution
revolution

1989

Standard Analyzer
French Analyzer
la, rèvolution, franèaise
revolution, franeais
revolution
revolution

For the fifth document in the results, the frenchAnalyzer removed the diacritics in the title field to match the document to the query term.

Back

Language

On this page