Docs Menu
Docs Home
/ /

Multianalizador

Puedes utilizar el multi objeto en la definición del índice para especificar analizadores alternativos con los que indexar también el campo. Al indexar un campo con analizadores alternativos además del analizador predeterminado, puede buscar en la colección con el analizador predeterminado o el alternativo. Esta página muestra cómo especificar analizadores alternativos en su definición de índice multiutilizando.

La multi opción de ruta solo está disponible para campos de tipo cadena.

MongoDB Search no admite la anidación de múltiples capas de objetos multi.

Los siguientes ejemplos muestran definiciones de índices en los campos de la colección sample_mflix.movies. Si carga la colección en su clúster, puede crear los índices de ejemplo mediante el Editor visual o el EditorJSON en la interfaz de usuario de Atlas o usando mongosh.


➤ Utilice el menú desplegable Seleccione su idioma para configurar la interfaz para el ejemplo de esta página.


El siguiente ejemplo de definición de índice especifica un índice en el title campo mediante el standard analizador. La definición de índice también especifica el analizador lucene.french como analizador alternativo para el title campo, con el frenchAnalyzer nombre.

  1. Haga clic Refine Your Index para configurar su índice.

  2. En la sección Field Mappings, haz clic en Add Field para abrir la ventana Add Field Mapping.

  3. Selecciona title del menú desplegable Field Name.

  4. Haga clic en el menú desplegable Data Type y seleccione String si aún no está seleccionado.

  5. Expande String Properties y realiza los siguientes cambios:

    Analizador de índices

    Seleccione lucene.standard del menú desplegable si aún no está seleccionado.

    Analizador de búsqueda

    Seleccione lucene.standard del menú desplegable si aún no está seleccionado.

    Opciones del índice

    Usa el offsets por defecto.

    Store

    Usa el true por defecto.

    Ignorar lo anterior

    Mantener la configuración predeterminada.

    Normas

    Usa el include por defecto.

  6. Haga clic en Add Multi Field para configurar otro analizador en el campo title.

  7. Introduzca frenchAnalyzer en el campo Multi Field Name.

  8. Realice los siguientes cambios en Multi Field Properties :

    Analizador de índices

    Seleccione lucene.french del menú desplegable si aún no está seleccionado.

    Analizador de búsqueda

    Seleccione lucene.french del menú desplegable si aún no está seleccionado.

    Opciones del índice

    Usa el offsets por defecto.

    Store

    Usa el true por defecto.

    Ignorar lo anterior

    Mantener la configuración predeterminada.

    Normas

    Usa el include por defecto.

  9. Haga clic en Add.

  10. Haga clic en Save Changes.

  11. Haga clic en Create Search Index.

  1. Reemplazar la definición predeterminada del índice con la siguiente definición del índice.

    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. Haga clic en Next.

  3. Haga clic en 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)

La siguiente consulta utiliza el analizador alternativo, llamado frenchAnalyzer, para buscar la cadena liberte.

  1. Haga clic en el botón Query para su índice.

  2. Haga clic en Edit Query para editar la consulta.

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. Reemplace la consulta predeterminada por la siguiente y haga clic en 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 } ]

El documento en los resultados coincide porque frenchAnalyzer redujo tanto la cadena indexada è Nous la Libertè como el término de consulta liberte a la palabra base libert. MongoDB Search no devolverá este documento al buscarlo con el analizador standard porque no elimina los diacríticos. Cada analizador genera los siguientes tokens (términos de búsqueda) para el índice y la consulta:

Analizador
Index Tokens
Query Tokens

Analizador estándar

è, nous, la, libertè

libertè

Analizador de francés

è, libert

libert

El siguiente ejemplo de definición de índice especifica un índice en los title plot campos y mediante el standard analizador. La definición de índice también especifica lucene.french como analizador alternativo para title los plot campos y.

  1. Se debe hacer clic en Refine Your Index para configurar el índice.

  2. En la sección Field Mappings, haz clic en Add Field para abrir la ventana Add Field Mapping.

  3. Selecciona title del menú desplegable Field Name.

  4. Haga clic en el menú desplegable Data Type y seleccione String si aún no está seleccionado.

  5. Expande String Properties y realiza los siguientes cambios:

    Analizador de índices

    Seleccione lucene.standard del menú desplegable si aún no está seleccionado.

    Analizador de búsqueda

    Seleccione lucene.standard del menú desplegable si aún no está seleccionado.

    Opciones del índice

    Usa el offsets por defecto.

    Store

    Usa el true por defecto.

    Ignorar lo anterior

    Mantener la configuración predeterminada.

    Normas

    Usa el include por defecto.

  6. Haga clic en Add Multi Field para configurar otro analizador en el campo title.

  7. Introduzca frenchAnalyzer en el campo Multi Field Name.

  8. Realice los siguientes cambios en Multi Field Properties :

    Analizador de índices

    Seleccione lucene.french del menú desplegable si aún no está seleccionado.

    Analizador de búsqueda

    Seleccione lucene.french del menú desplegable si aún no está seleccionado.

    Opciones del índice

    Usa el offsets por defecto.

    Store

    Usa el true por defecto.

    Ignorar lo anterior

    Mantener la configuración predeterminada.

    Normas

    Usa el include por defecto.

  9. Haga clic en Add.

  10. Haz clic en Add Field Mapping para abrir la ventana Add Field Mapping.

  11. Selecciona plot del menú desplegable Field Name.

  12. Repita los pasos 4 a 9.

  13. Haga clic en Save Changes.

  14. Haga clic en Create Search Index.

  1. Reemplazar la definición predeterminada del índice con la siguiente definición del índice.

    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. Haga clic en Next.

  3. Haga clic en 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)

La siguiente consulta busca coincidencias para la cadena revolution en los campos title y plot utilizando el analizador alternativo llamado frenchAnalyzer.

  1. Haga clic en el botón Query para su índice.

  2. Haga clic en Edit Query para editar la consulta.

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. Reemplace la consulta predeterminada por la siguiente y haga clic en 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
}
]

Los documentos en los resultados contienen el término de query tanto en el campo title como en el campo plot. Cada analizador crea los siguientes tokens (términos que se pueden buscar) para el campo title de cada documento en los resultados:

Año

Analizador

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

Para el quinto documento en los resultados, frenchAnalyzer eliminó los signos diacríticos en el campo title para hacer coincidir el documento con el término de consulta.

Volver

Idioma

En esta página