O analisador keyword
aceita uma string ou array de strings como parâmetro e as indexa como um único termo (token). Somente as correspondências exatas no campo são retornadas. Ele deixa todo o texto em suas letras maiúsculas e minúsculas originais.
Dica
Para correspondência exata, em vez de usar o keyword
analisador , você pode indexar o campo como o tipo token MongoDB Search e usar o operador igual para pesquisar o campo.
Se você selecionar Refine Your Index, a UI do Atlas exibirá uma seção intitulada View text analysis of your selected index configuration dentro da seção Index Configurations. Se você expandir esta seção, a UI do Atlas exibirá o índice e os tokens de pesquisa que o analisador keyword
gera para cada string de amostra. É possível ver os tokens que o analisador keyword
cria para um documento de amostra integrado e uma cadeia de query ao criar ou editar um índice na UI do Atlas Visual Editor.
Importante
O MongoDB Search não indexará campos de string em que os tokens do analisador excedam 32766 bytes de tamanho. Se estiver usando o analisador de palavras-chave, os campos de string que excederem 32766 bytes não serão indexados.
Exemplo
A seguinte definição de índice de exemplo especifica um índice no title
campo na coleção sample_mflix.movies utilizando o keyword
analisador . Para acompanhar esse exemplo, carregue os dados de amostra em seu cluster e use mongosh
ou navegue até a Create a Search
Index página na interface do usuário do Atlas seguindo as etapas do tutorial Criar um índice de pesquisa do MongoDB .
Em seguida, usando a movies
collection como sua fonte de dados, siga o procedimento de exemplo para criar um índice a partir de ou da UI do mongosh
Atlas Visual Editor JSON editorou.
➤ Use o menu suspenso Selecione a linguagem para definir a linguagem do exemplo nesta página.
Clique em Refine Your Index para configurar seu índice.
Na seção Index Configurations, alterne Dynamic Mapping para off.
Na seção Field Mappings, clique em Add Field para abrir a janela Add Field Mapping.
Clique em Customized Configuration.
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.keyword
no menu suspenso.Analisador de pesquisa
Selecione
lucene.keyword
no menu suspenso.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.
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "lucene.keyword" } } } } Clique em Next.
Clique em Create Search Index.
1 db.movies.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "title": { 7 "type": "string", 8 "analyzer": "lucene.keyword" 9 } 10 } 11 } 12 } 13 )
A query abaixo procura a frase Class Action
no campo title
.
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": "Class Action", "path": "title" } } } ] SCORE: 4.346973419189453 _id: "573a1399f29313caabcec6b7" awards: Object cast: Array (4) countries: Array (1) directors: Array (1) fullplot: "Jeb Ward is an attorney who specializes in whistle blower, David vs. G…" genres: Array (2) imdb: Object languages: Array (1) lastupdated: "2015-09-06 00:42:51.167000000" metacritic: 58 num_mflix_comments: 2 plot: "Jeb Ward is an attorney who specializes in whistle blower, David vs. G…" poster: "https://m.media-amazon.com/images/M/MV5BNWY5Mjk4ZmItMTAzYS00NWE3LWEzYz…" rated: "R" released: 1991-03-15T00:00:00.000+00:00 runtime: 110 title: "Class Action" tomatoes: Object type: "movie" writers: Array (3) year: 1991
db.movies.aggregate([ { "$search": { "text": { "query": "Class Action", "path": "title" } } }, { "$project": { "_id": 0, "title": 1 } } ])
[ { title: 'Class Action' } ]
O MongoDB Search devolveu o documento porque correspondeu o termo de query Class
Action
ao único token Class Action
que ele cria para o texto no campo usando o analisador lucene.keyword
. Por outro lado, o MongoDB Search não retorna nenhum resultado para a seguinte query:
db.cases.aggregate([ { "$search": { "text": { "query": "action", "path": "title" } } } ])
Muitos documentos na coleção contêm a string action
, mas o analisador keyword
só corresponde aos documentos em que o termo de pesquisa corresponde exatamente a todo o conteúdo do campo . Para a query anterior, o analisador keyword
não retornaria nenhum resultado. No entanto, se você indexar o campo usando o analisador padrão ou o analisador simples, o MongoDB Search retornará vários documentos nos resultados, incluindo o documento com o valor do campo de título Class
Action
, porque criaria tokens semelhantes aos seguintes, que seriam em seguida, corresponda ao termo de query:
Analisador | Tokens de saída | Partidas action | Partidas Class Action |
---|---|---|---|
Tokens do analisador de palavras-chave |
| X | √ |
Tokens de analisador padrão |
| √ | √ |
Tokens de analisador simples |
| √ | √ |