Puedes utilizar el multi objeto en su definición de índice para especificar analizadores alternativos con los que también indexar el campo. Cuando indexa un campo con analizadores alternativos además del analizador por defecto, puede buscar en la colección con cualquiera de los dos, el analizador por defecto o el alternativo. Esta página demuestra cómo especificar analizadores alternativos en su definición de índice multiutilizando.
Limitaciones del analizador múltiple
La opción de ruta multi solo está disponible para campos de tipo string.
MongoDB Search no admite la anidación de múltiples capas de objetos multi.
Ejemplos
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 JSON Editor en la interfaz de usuario de Atlas o usar mongosh.
➤ Utilice el menú desplegable Seleccione su idioma para configurar la interfaz para el ejemplo de esta página.
Ejemplo de campo único
La siguiente definición de índice de ejemplo especifica un índice en el campo title usando el analizador standard. La definición del índice también especifica el analizador lucene.french como un analizador alternativo para el campo title, con el nombre frenchAnalyzer.
Haga clic Refine Your Index para configurar su índice.
En la sección Field Mappings, haz clic en Add Field para abrir la ventana Add Field Mapping.
Selecciona
titledel menú desplegable Field Name.Haz clic en el menú desplegable Data Type y selecciona String si aún no está seleccionado.
Expande String Properties y realiza los siguientes cambios:
Analizador de índices
Selecciona
lucene.standarddel menú desplegable si aún no está seleccionado.Analizador de búsqueda
Selecciona
lucene.standarddel menú desplegable si aún no está seleccionado.Opciones del índice
Usa el
offsetspor defecto.Store
Usa el
truepor defecto.Ignorar lo anterior
Mantén la configuración por defecto.
Normas
Usa el
includepor defecto.Haz clic en Add Multi Field para configurar otro analizador en el campo
title.Introduzca
frenchAnalyzeren el campo Multi Field Name.Realiza los siguientes cambios en Multi Field Properties :
Analizador de índices
Selecciona
lucene.frenchdel menú desplegable si aún no está seleccionado.Analizador de búsqueda
Selecciona
lucene.frenchdel menú desplegable si aún no está seleccionado.Opciones del índice
Usa el
offsetspor defecto.Store
Usa el
truepor defecto.Ignorar lo anterior
Mantén la configuración por defecto.
Normas
Usa el
includepor defecto.Haga clic en Add.
Haga clic en Save Changes.
Haga clic en Create Search Index.
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 } Haga clic en Next.
Haga clic en 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 )
La siguiente consulta utiliza el analizador alternativo, denominado frenchAnalyzer, para buscar la string liberte.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz 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
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 } ]
El documento en los resultados es una coincidencia porque el frenchAnalyzer redujo tanto la string indexada è Nous la Libertè como el query término liberte a la palabra base libert. MongoDB Search no devolverá este documento para una búsqueda con el analizador standard porque no remueve los diacríticos. Cada analizador genera los siguientes tokens (términos buscables) para el índice y la query:
Analizador | Index Tokens | Query Tokens |
|---|---|---|
Analizador estándar |
|
|
Analizador de francés |
|
|
Ejemplo de campos múltiples
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.
Se debe hacer clic en Refine Your Index para configurar el índice.
En la sección Field Mappings, haz clic en Add Field para abrir la ventana Add Field Mapping.
Selecciona
titledel menú desplegable Field Name.Haz clic en el menú desplegable Data Type y selecciona String si aún no está seleccionado.
Expande String Properties y realiza los siguientes cambios:
Analizador de índices
Selecciona
lucene.standarddel menú desplegable si aún no está seleccionado.Analizador de búsqueda
Selecciona
lucene.standarddel menú desplegable si aún no está seleccionado.Opciones del índice
Usa el
offsetspor defecto.Store
Usa el
truepor defecto.Ignorar lo anterior
Mantén la configuración por defecto.
Normas
Usa el
includepor defecto.Haz clic en Add Multi Field para configurar otro analizador en el campo
title.Introduzca
frenchAnalyzeren el campo Multi Field Name.Realiza los siguientes cambios en Multi Field Properties :
Analizador de índices
Selecciona
lucene.frenchdel menú desplegable si aún no está seleccionado.Analizador de búsqueda
Selecciona
lucene.frenchdel menú desplegable si aún no está seleccionado.Opciones del índice
Usa el
offsetspor defecto.Store
Usa el
truepor defecto.Ignorar lo anterior
Mantén la configuración por defecto.
Normas
Usa el
includepor defecto.Haga clic en Add.
Haz clic en Add Field Mapping para abrir la ventana Add Field Mapping.
Selecciona
plotdel menú desplegable Field Name.Repite los pasos 4 a 9.
Haga clic en Save Changes.
Haga clic en Create Search Index.
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 } Haga clic en Next.
Haga clic en 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 )
La siguiente consulta busca coincidencias para la string revolution en los campos title y plot, utilizando el analizador alternativo llamado frenchAnalyzer.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz 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
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 } ]
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 | 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 |
Para el quinto documento en los resultados, el frenchAnalyzer eliminó los signos diacríticos en el campo title para que coincida el documento con el término de query.