Analisador múltiplo
Você pode usar o objeto multi
em sua definição de índice para especificar analisadores alternativos com os quais também indexar o campo. Quando indexa 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
. Para saber mais sobre como pesquisar com analisadores alternativos, consulte Construir um caminho de consulta.
Limitações
A opção de caminho do multi
está disponível somente para campos do tipo string.
O Atlas Search não suporta o aninhamento de várias camadas de objetos multi
.
Exemplos
Os exemplos a seguir demonstram definições de índice nos campos da coleção sample_mflix.movies
. Se você carregou a coleção no seu cluster, poderá criar os índices de exemplo usando o Editor Visual ou o Editor JSON na interface do usuário do Atlas. Depois de selecionar seu método de configuração preferido, selecione o banco de dados e a coleção para definir o índice.
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
title
no 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.standard
no menu suspenso se ainda não estiver selecionado.Analisador de pesquisa
Selecione
lucene.standard
no menu suspenso se ainda não estiver selecionado.Opções de índice
Use o
offsets
padrão.Store
Use o
true
padrão.Ignorar acima
Manter a configuração padrão.
Normas
Use o
include
padrão.Clique em Add Multi Field para configurar outro analyzer no campo
title
.Insira
frenchAnalyzer
no campo Multi Field Name .Faça as seguintes alterações em Multi Field Properties:
Analisador de índice
Selecione
lucene.french
no menu suspenso se ainda não estiver selecionado.Analisador de pesquisa
Selecione
lucene.french
no menu suspenso se ainda não estiver selecionado.Opções de índice
Use o
offsets
padrão.Store
Use o
true
padrão.Ignorar acima
Manter a configuração padrão.
Normas
Use o
include
padrã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.
A query a seguir usa o analisador alternativo, chamado frenchAnalyzer
, para pesquisar a string liberte
.
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
reduziu tanto a string indexada è Nous la Libertè
quanto o termo de consulta liberte
à palavra base libert
. O Atlas Search não retornará este documento em uma pesquisa com o analisador standard
porque ele não remove diacríticos. Cada analisador gera os seguintes tokens (termos pesquisáveis) para o índice e a consulta:
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
title
no 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.standard
no menu suspenso se ainda não estiver selecionado.Analisador de pesquisa
Selecione
lucene.standard
no menu suspenso se ainda não estiver selecionado.Opções de índice
Use o
offsets
padrão.Store
Use o
true
padrão.Ignorar acima
Manter a configuração padrão.
Normas
Use o
include
padrão.Clique em Add Multi Field para configurar outro analyzer no campo
title
.Insira
frenchAnalyzer
no campo Multi Field Name .Faça as seguintes alterações em Multi Field Properties:
Analisador de índice
Selecione
lucene.french
no menu suspenso se ainda não estiver selecionado.Analisador de pesquisa
Selecione
lucene.french
no menu suspenso se ainda não estiver selecionado.Opções de índice
Use o
offsets
padrão.Store
Use o
true
padrão.Ignorar acima
Manter a configuração padrão.
Normas
Use o
include
padrão.Clique em Add.
Clique em Add Field Mapping para abrir a janela Add Field Mapping.
Selecione
plot
no 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.
A seguinte query busca correspondências para a string revolution
nos campos title
e plot
usando o analisador alternativo chamado frenchAnalyzer
.
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 | 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 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.