Você pode usar o objeto multi em sua definição de índice para especificar analisadores alternativos com os quais também indexar o campo. Ao indexar um campo com analisadores alternativos além do analisador padrão, você pode pesquisar a coleção com o analisador padrão ou alternativo. Esta página demonstra como especificar analisadores alternativos na sua definição de índice usando multi.
Limitações do multianalisador
A opção de caminho do multi está disponível somente para campos do tipo string.
A Pesquisa do MongoDB não suporta o aninhamento de múltiplas camadas de objetos multi.
Exemplos
Os exemplos seguintes demonstram definições de índice nos campos na coleção sample_mflix.movies . Se você carregar a coleção no seu cluster, você poderá criar os índices de exemplo utilizando o Editor Visual ou oEditor JSON do na UI do Atlas ou utilizando omongosh.
➤ Use o menu suspenso Selecione seu idioma para definir a interface para o exemplo nesta página.
Exemplo de Campo Único
O exemplo de definição de índice a seguir especifica um índice no campo title usando o analisador standard. A definição do índice também especifica o analisador lucene.french como um analisador alternativo para o campo title, com o nome frenchAnalyzer.
Clique em Refine Your Index para configurar seu índice.
Na seção Field Mappings, clique em Add Field para abrir a janela Add Field Mapping.
Selecione
titleno menu suspenso Field Name.Clique no menu suspenso Data Type e selecione String se ainda não estiver selecionado.
Expanda o String Properties e faça as seguintes alterações:
Analisador de índice
Selecione
lucene.standardno menu suspenso se ainda não estiver selecionado.Analisador de pesquisa
Selecione
lucene.standardno menu suspenso se ainda não estiver selecionado.Opções de índice
Use o
offsetspadrão.Store
Use o
truepadrão.Ignorar acima
Manter a configuração padrão.
Normas
Use o
includepadrão.Clique em Add Multi Field para configurar outro analyzer no campo
title.Insira
frenchAnalyzerno campo Multi Field Name .Faça as seguintes alterações em Multi Field Properties:
Analisador de índice
Selecione
lucene.frenchno menu suspenso se ainda não estiver selecionado.Analisador de pesquisa
Selecione
lucene.frenchno menu suspenso se ainda não estiver selecionado.Opções de índice
Use o
offsetspadrão.Store
Use o
truepadrão.Ignorar acima
Manter a configuração padrão.
Normas
Use o
includepadrão.Clique em Add.
Clique em Save Changes.
Clique em Create Search Index.
Substitua a definição de índice padrão pela seguinte definição de í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 } Clique em Next.
Clique em 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 )
A query a seguir usa o analisador alternativo, chamado frenchAnalyzer, para pesquisar a string liberte.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
Substitua a query padrão pelo seguinte e clique em 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 } ]
O documento nos resultados é uma correspondência porque o frenchAnalyzer reduz a string indexada è Nous la Libertè e o termo de query liberte para a palavra base libert. O MongoDB Search não retornará este documento para uma pesquisa com o analisador standard porque ele não remove os diacríticos. Cada analisador gera os seguintes tokens (termos pesquisáveis) para o índice e query:
Analisador | Index Tokens | Tokens de consulta |
|---|---|---|
Analisador padrão |
|
|
Analisador Francês |
|
|
Exemplo de Múltiplos Campos
A definição de exemplo de índice a seguir especifica um índice nos campos title e plot usando o analisador standard. A definição do índice também especifica lucene.french como um analisador alternativo para os campos title e plot.
Clique em Refine Your Index para configurar seu índice.
Na seção Field Mappings, clique em Add Field para abrir a janela Add Field Mapping.
Selecione
titleno menu suspenso Field Name.Clique no menu suspenso Data Type e selecione String se ainda não estiver selecionado.
Expanda o String Properties e faça as seguintes alterações:
Analisador de índice
Selecione
lucene.standardno menu suspenso se ainda não estiver selecionado.Analisador de pesquisa
Selecione
lucene.standardno menu suspenso se ainda não estiver selecionado.Opções de índice
Use o
offsetspadrão.Store
Use o
truepadrão.Ignorar acima
Manter a configuração padrão.
Normas
Use o
includepadrão.Clique em Add Multi Field para configurar outro analyzer no campo
title.Insira
frenchAnalyzerno campo Multi Field Name .Faça as seguintes alterações em Multi Field Properties:
Analisador de índice
Selecione
lucene.frenchno menu suspenso se ainda não estiver selecionado.Analisador de pesquisa
Selecione
lucene.frenchno menu suspenso se ainda não estiver selecionado.Opções de índice
Use o
offsetspadrão.Store
Use o
truepadrão.Ignorar acima
Manter a configuração padrão.
Normas
Use o
includepadrão.Clique em Add.
Clique em Add Field Mapping para abrir a janela Add Field Mapping.
Selecione
plotno menu suspenso Field Name.Repita as etapas 4 a 9.
Clique em Save Changes.
Clique em Create Search Index.
Substitua a definição de índice padrão pela seguinte definição de í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 } Clique em Next.
Clique em 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 )
A seguinte query busca correspondências para a string revolution nos campos title e plot usando o analisador alternativo chamado frenchAnalyzer.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
Substitua a query padrão pelo seguinte e clique em 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 } ]
Os documentos nos resultados contêm o termo de consulta em ambos os campos title e plot. Cada analisador cria os seguintes tokens (termos pesquisáveis) para o campo title de cada documento nos resultados:
Ano | Analisador | Index Tokens | Tokens de consulta |
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 o quinto documento nos resultados, o frenchAnalyzer removeu os diacríticos no campo title para fazer a correspondência do documento com o termo de consulta.