Filtros de token
Nesta página
- asciiFolding
- Atributos
- Exemplo
- daitchMokotoffSoundex
- Atributos
- Exemplo
- edgeGram
- Atributos
- Exemplo
- englishPossessive
- Atributos
- Exemplo
- flattenGraph
- Atributos
- Exemplo
- Dobramento de UTI
- Atributos
- Exemplo
- icuNormalizer
- Atributos
- Exemplo
- kStemming
- Atributos
- Exemplo
- Tamanho
- Atributos
- Exemplo
- minúsculas
- Atributos
- Exemplos
- nGram
- Atributos
- Exemplo
- porterStemming
- Atributos
- Exemplo
- regex
- Atributos
- Exemplo
- reverter
- Atributos
- Exemplo
- shingle
- Atributos
- Exemplo
- snowballStemming
- Atributos
- Exemplo
- spanishPluralStemming
- Atributos
- Exemplo
- stempel
- Atributos
- Exemplo
- stopword
- Atributos
- Exemplo
- cortar
- Atributos
- Exemplo
- wordDelimiterGraph
- Atributos
- Exemplo
Um filtro de token executa operações como as seguintes:
Stemming, que reduz palavras relacionadas, como "falar", "falou" e "fala" à sua palavra raiz "falar".
Redação, remoção de informações confidenciais de documentos públicos.
Os filtros de token sempre exigem um campo de tipo, e alguns também aceitam opções adicionais. Tem a seguinte sintaxe:
"tokenFilters": [ { "type": "<token-filter-type>", "<additional-option>": <value> } ]
As seguintes definições de índice de amostra e queries usam a coleção de amostras chamada minutes
. Se você adicionar a coleção minutes
a um banco de dados no seu cluster do Atlas, poderá criar os seguintes índices de amostra a partir do Atlas Search Visual Editor ou do Editor JSON na IU do Atlas e executar as queries de amostra nesta coleção. Para criar esses índices, depois de selecionar seu método de configuração preferido na UI do Atlas, selecione o banco de dados e a coleção, e filtre o índice para adicionar analisadores personalizados que usam filtros de token.
Observação
Quando você adiciona um analisador personalizado usando o Visual Editor na interface do usuário do Atlas, a interface do usuário do Atlas exibe os seguintes detalhes sobre o analisador na seção Custom Analyzers.
Nome | Etiqueta que identifica o analisador customizado. |
Usado em | Campos que usam o analisador customizado. O valor é Nenhum se o analisador customizado não for usado para analisar quaisquer campos. |
Filtros de caracteres | Filtros de caracteres do Atlas Search configurados no analisador customizado. |
Tokenizador | Tokenizer do Atlas Search configurado no analisador personalizado. |
Filtros de token | Filtros de token do Atlas Search configurados no analisador personalizado. |
Ações | Ícones clicáveis que indicam as ações que você pode executar no analisador customizado.
|
asciiFolding
O asciiFolding
filtro de token converte caracteres unicode alfabéticos, numéricos e simbólicos que não estão no bloco Unicode latino básico aos ASCII equivalentes, se disponíveis.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser asciiFolding . |
originalTokens | string | no | String que especifica se incluir ou omitir os tokens originais na saída do filtro de token. O valor pode ser um dos seguintes:
Padrão: |
Exemplo
A seguinte definição de índice indexa o campo page_updated_by.first_name
na coleção minutos utilizando um analisador personalizado denominado asciiConverter
. O analisador personalizado especifica o seguinte:
Aplique o tokenizador padrão para criar tokens com base em regras de quebra de palavras.
Aplique o filtro de token
asciiFolding
para converter os valores de campo em seu equivalente ASCII.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
asciiConverter
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione asciiFolding no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo page_updated_by.first_name.
Selecione page_updated_by.first_name no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
asciiConverter
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "mappings": { "dynamic": false, "fields": { "page_updated_by": { "type": "document", "dynamic": false, "fields": { "first_name": { "type": "string", "analyzer": "asciiConverter" } } } } }, "analyzers": [ { "name": "asciiConverter", "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "asciiFolding" } ] } ] }
A seguinte query pesquisa o campo first_name
na coleção minutos para nomes utilizando seu equivalente ASCII.
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "Sian", "path": "page_updated_by.first_name" } } }, { "$project": { "_id": 1, "page_updated_by.last_name": 1, "page_updated_by.first_name": 1 } } ])
[ { _id: 1, page_updated_by: { last_name: 'AUERBACH', first_name: 'Siân'} } ]
O Atlas Search retorna o documento com _id: 1
nos resultados, pois o Atlas Search criou os seguintes tokens (termos pesquisáveis) para o campo page_updated_by.first_name
no documento, que então foi utilizado para corresponder ao termo de query Sian
:
Nome do campo | Tokens de saída |
---|---|
page_updated_by.first_name | Sian |
daitchMokotoffSoundex
O daitchMokotoffSoundex
filtro de token do cria tokens para palavras que soam iguais baseado no Daitch-Mokotoff Soundex algoritmo fonético. O filtro pode gerar várias codificações para cada entrada, onde cada token codificado é um número 6 dígitos.
Observação
Não use o filtro de token daitchMokotoffSoundex
em:
Definições de mapeamento do tipo sinônimo ou preenchimento automático.
Operadores onde
fuzzy
está ativado. O Atlas Search oferece suporte à opçãofuzzy
para os seguintes operadores:
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser daitchMokotoffSoundex . |
originalTokens | string | no | String que especifica se incluir ou omitir os tokens originais na saída do filtro de token. O valor pode ser um dos seguintes:
Padrão: |
Exemplo
A seguinte definição de índice indexa o campo page_updated_by.last_name
na coleção minutos utilizando um analisador personalizado denominado dmsAnalyzer
. O analisador personalizado especifica o seguinte:
Aplique o tokenizador padrão para criar tokens com base em regras de quebra de palavras.
Aplique o filtro de token
daitchMokotoffSoundex
para codificar os tokens para palavras que soam as mesmas.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
dmsAnalyzer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione daitchMokotoffSoundex no menu suspenso e selecione o valor mostrado na tabela a seguir para o campo originalTokens:
CampoValororiginalTokens
include
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo page_updated_by.last_name.
Selecione page_updated_by.last_name no menu suspenso Field Name e String no menu suspenso Data Type .
Na seção de propriedades do tipo de dados, selecione
dmsAnalyzer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "mappings": { "dynamic": false, "fields": { "page_updated_by": { "type": "document", "dynamic": false, "fields": { "last_name": { "type": "string", "analyzer": "dmsAnalyzer" } } } } }, "analyzers": [ { "name": "dmsAnalyzer", "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "daitchMokotoffSoundex", "originalTokens": "include" } ] } ] }
A query abaixo busca termos que soam semelhantes a AUERBACH
no campo page_updated_by.last_name
da collection de minutos.
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "AUERBACH", "path": "page_updated_by.last_name" } } }, { "$project": { "_id": 1, "page_updated_by.last_name": 1 } } ])
[ { "_id" : 1, "page_updated_by" : { "last_name" : "AUERBACH" } } { "_id" : 2, "page_updated_by" : { "last_name" : "OHRBACH" } } ]
O Atlas Search retorna documentos com _id: 1
e _id: 2
porque os termos em ambos os documentos são foneticamente semelhantes e codificados usando os mesmos números de seis dígitos (097400
e 097500
). A tabela abaixo mostra os tokens (termos pesquisáveis e codificações de seis dígitos) que o Atlas Search cria para os documentos nos resultados:
ID do documento | Tokens de saída |
---|---|
"_id": 1 | AUERBACH , 097400 , 097500 |
"_id": 2 | OHRBACH , 097400 , 097500 |
edgeGram
O filtro de token edgeGram
tokeniza a entrada do lado esquerdo, ou a "borda", de uma entrada de texto em n-gramas de tamanhos configurados.
Observação
Normalmente, os filtros de token operam de forma semelhante a um pipeline, em que cada token de entrada produz no máximo um token de saída que é então inserido no token subsequente. O filtro de token edgeGram
, por outro lado, é um filtro de produção de gráficos que produz vários tokens de saída a partir de um único token de entrada.
Como as definições de mapeamento de tipo de campo de preenchimento automático e sinônimo só funcionam quando usadas com filtros de token que não produzem gráficos, você não pode usar o filtro de token edgeGram em definições de mapeamento de tipo de campo de preenchimento automático ou sinônimo.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser edgeGram . |
minGram | inteiro | sim | Número que especifica o comprimento mínimo de n-grams gerados. O valor deve ser menor ou igual a maxGram . |
maxGram | inteiro | sim | Número que especifica o comprimento máximo de n-grams gerados. O valor deve ser maior ou igual a minGram . |
termNotInBounds | string | no | String que especifica se os tokens de índice são menores que
Se Padrão: |
Exemplo
A seguinte definição de índice indexa o campo title
na coleção minutos utilizando um analisador personalizado denominado titleAutocomplete
. O analisador personalizado especifica o seguinte:
Aplique o tokenizador padrão para criar tokens com base em regras de quebra de palavras.
Aplique os seguintes filtros nos tokens:
icuFolding
filtro de token para aplicar dobraduras de caracteres aos tokens.edgeGram
filtro de token para criar tokens de 4 a 7 caracteres do lado esquerdo.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
titleAutocomplete
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione icuFolding no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione edgeGram no menu suspenso e digite o valor mostrado na tabela a seguir para os campos:
CampoValorminGram
4maxGram
7Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo título.
Selecione título no menu suspenso Field Name e Cadeia de caracteres no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
titleAutocomplete
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "analyzer": "titleAutocomplete", "mappings": { "dynamic": false, "fields": { "title": { "type": "string", "analyzer": "titleAutocomplete" } } }, "analyzers": [ { "name": "titleAutocomplete", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "icuFolding" }, { "type": "edgeGram", "minGram": 4, "maxGram": 7 } ] } ] }
A query abaixo pesquisa no campo title
da collection de minutos os termos que começam com mee
, seguidos por qualquer número de outros caracteres.
db.minutes.aggregate([ { "$search": { "wildcard": { "query": "mee*", "path": "title", "allowAnalyzedField": true } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 1, title: 'The team's weekly meeting' }, { _id: 3, title: 'The regular board meeting' } ]
O Atlas Search retorna documentos com _id: 1
e _id: 3
porque os documentos contêm o termo meeting
, que corresponde aos critérios da query. Especificamente, o Atlas Search cria os seguintes tokens de 4 a 7 caracteres (termos pesquisáveis) para os documentos nos resultados, que então corresponde ao termo da query mee*
:
ID do documento | Tokens de saída |
---|---|
"_id": 1 | team , team' , team's , week , weekl , weekly , meet , meeti , meetin , meeting |
"_id": 3 | regu , regul , regula , regular , boar , board , meet , meeti , meetin , meeting |
englishPossessive
O filtro de token englishPossessive
remove a apóstrofe possessiva ('s
extras) das palavras.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser englishPossessive . |
Exemplo
A seguinte definição de índice indexa o campo title
na coleção minutos utilizando um analisador personalizado denominado englishPossessiveStemmer
. O analisador personalizado especifica o seguinte:
Aplique o tokenizador padrão para criar tokens (termos de pesquisa) com base nas regras de quebra de palavras.
Aplique o filtro de token EnglishPossessive para remover possessivos (
's
à direita) dos tokens.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
englishPossessiveStemmer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione englishPossessive no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo título.
Selecione título no menu suspenso Field Name e Cadeia de caracteres no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
englishPossessiveStemmer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "englishPossessiveStemmer" } } }, "analyzers": [ { "name": "englishPossessiveStemmer", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "englishPossessive" } ] } ] }
A seguinte query pesquisa o campo title
na coleção minutos do termo team
.
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "team", "path": "title" } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 1, title: 'The team's weekly meeting' }, { _id: 2, title: 'The check-in with sales team' } ]
O Atlas Search retorna resultados que contêm o termo team
no campo title
. O Atlas Search retorna o documento com _id: 1
porque o Atlas Search transforma o team's
no campo title
no token team
durante a análise. Especificamente, o Atlas Search cria os seguintes tokens (termos pesquisáveis) para os documentos nos resultados, que então corresponde ao termo da query:
ID do documento | Tokens de saída |
---|---|
"_id": 1 | The , team , weekly , meeting |
"_id": 2 | The , check , in , with , sales , team |
flattenGraph
O filtro de token flattenGraph
transforma um gráfico de filtro de token em um formulário simples adequado para indexação. Use o filtro de token wordDelimiterGraph somente após o filtro de token wordDelimiterGraph.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser flattenGraph . |
Exemplo
A definição de índice a seguir indexa o campo message
na coleção de minutos usando um analisador personalizado chamado wordDelimiterGraphFlatten
. O analisador personalizado especifica o seguinte:
Aplique o token whitespace para criar tokens com base em ocorrências de whitespace entre palavras.
Aplique os seguintes filtros aos tokens:
Filtro de token wordDelimiterGraph para dividir tokens com base em subpalavras, gerar tokens para as palavras originais e também proteger a palavra
SIGN_IN
de deliminação.Filtro de token flattenGraph para nivelar os tokens em um formato simples.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
wordDelimiterGraphFlatten
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione whitespace no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione wordDelimiterGraph no menu suspenso e configure os campos a seguir do filtro de token.
Selecione os seguintes campos:
CampoValordelimiterOptions.generateWordParts
truedelimiterOptions.preserveOriginal
trueDigite
SIGN_IN
no campoprotectedWords.words
.Selecione
protectedWords.ignoreCase
.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione flattenGraph no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo mensagem.
Selecione a mensagem na lista suspensa Field Name e Cadeia de caracteres na lista suspensa Data Type .
Na seção de propriedades do tipo de dados, selecione
wordDelimiterGraphFlatten
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "mappings": { "fields": { "message": { "type": "string", "analyzer": "wordDelimiterGraphFlatten" } } }, "analyzers": [ { "name": "wordDelimiterGraphFlatten", "charFilters": [], "tokenizer": { "type": "whitespace" }, "tokenFilters": [ { "type": "wordDelimiterGraph", "delimiterOptions" : { "generateWordParts" : true, "preserveOriginal" : true }, "protectedWords": { "words": [ "SIGN_IN" ], "ignoreCase": false } }, { "type": "flattenGraph" } ] } ] }
A seguinte query pesquisa o campo message
na coleção minutos do termo sign
.
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "sign", "path": "message" } } }, { "$project": { "_id": 1, "message": 1 } } ])
[ { _id: 3, message: 'try to sign-in' } ]
O Atlas Search retorna o documento com _id: 3
nos resultados do termo da query sign
mesmo que o documento contenha o termo hifenizado sign-in
no campo title
. O filtro de token wordDelimiterGraph cria um gráfico de filtro de token e o filtro de token flattenGraph transforma o gráfico de filtro de token em um formulário plano adequado para a indexação. Especificamente, o Atlas Search cria os seguintes tokens (termos pesquisáveis) para o documento nos resultados, que então corresponde ao termo da query sign
:
ID do documento | Tokens de saída |
_id: 3 | try , to , sign-in , sign , in |
Dobramento de UTI
O icuFolding
filtro de token aplica o dobramento de caracteres do Relatório técnico Unicode #30 como remoção de acentos, dobramento de maiúsculas e minúsculas, dobramento de duplicatas canônicas e muitos outros detalhados no relatório.
Atributos
Tem o seguinte atributo:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser icuFolding . |
Exemplo
A seguinte definição de índice indexa o campo text.sv_FI
na coleção minutos utilizando um analisador personalizado denominado diacriticFolder
. O analisador personalizado especifica o seguinte:
Aplique o tokenizador de palavra-chave para tokenizar todos os termos no campo de string como um termo único.
Use o filtro de token
icuFolding
para aplicar dobramentos, como remoção de acentos, troca de maiúsculas por minúsculas, dobramento de duplicatas canônicas e assim por diante.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
diacriticFolder
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione keyword no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione icuFolding no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.sv_FI.
Selecione o campo aninhado text.sv_FI no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
diacriticFolder
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "analyzer": "diacriticFolder", "mappings": { "fields": { "text": { "type": "document", "fields": { "sv_FI": { "analyzer": "diacriticFolder", "type": "string" } } } } }, "analyzers": [ { "name": "diacriticFolder", "charFilters": [], "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "icuFolding" } ] } ] }
A query abaixo usa o operador de curinga para pesquisar o campo text.sv_FI
na collection de minutos para todos os termos que contêm o termo avdelning
, precedido e seguido por qualquer número de outros caracteres.
db.minutes.aggregate([ { "$search": { "index": "default", "wildcard": { "query": "*avdelning*", "path": "text.sv_FI", "allowAnalyzedField": true } } }, { "$project": { "_id": 1, "text.sv_FI": 1 } } ])
[ { _id: 1, text: { sv_FI: 'Den här sidan behandlar avdelningsmöten' } }, { _id: 2, text: { sv_FI: 'Först talade chefen för försäljningsavdelningen' } } ]
O Atlas Search retorna o documento com _id: 1
e _id: 2
nos resultados porque os documentos contêm o termo de query avdelning
seguido por outros caracteres no documento com _id: 1
e precedidos e seguidos por outros caracteres no documento com _id: 2
. Especificamente, o Atlas Search cria os seguintes tokens para os documentos nos resultados, que então corresponde ao termo de query *avdelning*
.
ID do documento | Tokens de saída |
---|---|
_id: 1 | den har sidan behandlar avdelningsmoten |
_id: 2 | forst talade chefen for forsaljningsavdelningen |
icuNormalizer
O filtro de token icuNormalizer
normaliza os tokens usando um modo de normalização unicode padrão.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser icuNormalizer . |
normalizationForm | string | no | Formulário de normalização a ser aplicado. Os valores aceitos são:
Para saber mais sobre os formulários de normalização aceitos, consulte a seção 1.2: Formulários de normalização, UTR#15. Padrão: |
Exemplo
A seguinte definição de índice indexa o campo message
na coleção minutos utilizando um analisador personalizado denominado textNormalizer
. O analisador personalizado especifica o seguinte:
Use o tokenizador de espaço em branco para criar tokens com base em ocorrências de espaço em branco entre as palavras.
Use o filtro de token
icuNormalizer
para normalizar tokens por decomposição de compatibilidade, seguido por composição canônica.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
textNormalizer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione whitespace no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione icuNormalizer no menu suspenso e selecione
nfkc
no menu suspenso normalizationForm.Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo mensagem.
Selecione a mensagem na lista suspensa Field Name e Cadeia de caracteres na lista suspensa Data Type .
Na seção de propriedades do tipo de dados, selecione
textNormalizer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "analyzer": "textNormalizer", "mappings": { "fields": { "message": { "type": "string", "analyzer": "textNormalizer" } } }, "analyzers": [ { "name": "textNormalizer", "charFilters": [], "tokenizer": { "type": "whitespace" }, "tokenFilters": [ { "type": "icuNormalizer", "normalizationForm": "nfkc" } ] } ] }
A seguinte query pesquisa o campo message
na coleção minutos do termo 1
.
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "1", "path": "message" } } }, { "$project": { "_id": 1, "message": 1 } } ])
[ { _id: 2, message: 'do not forget to SIGN-IN. See ① for details.' } ]
O Atlas Search retorna o documento com _id: 2
nos resultados do termo da query 1
mesmo que o documento contenha o número circulado ①
no campo message
porque o filtro de token icuNormalizer
cria o 1
de token para esse caractere usando o formulário de normalização de nfkc
. A tabela abaixo mostra os tokens (termos pesquisáveis) que o Atlas Search cria para o documento nos resultados utilizando o formulário de normalização do nfkc
e, para fins de comparação, os tokens que ele cria para os outros formulários de normalização.
Formulários de normalização | Tokens de saída | Partidas 1 |
nfd | do , not , forget , to , SIGN-IN. , See , ① , for , details. | X |
nfc | do , not , forget , to , SIGN-IN. , See , ① , for , details. | X |
nfkd | do , not , forget , to , SIGN-IN. , See , 1 , for , details. | √ |
nfkc | do , not , forget , to , SIGN-IN. , See , 1 , for , details. | √ |
kStemming
O filtro de token kStemming
combina o stemming algorítmico com um dicionário incorporado para o idioma inglês para fazer o stemming das palavras. Ele espera texto em minúsculas e não modifica o texto em maiúscula.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser kStemming . |
Exemplo
A seguinte definição de índice indexa o campo text.en_US
na coleção minutos utilizando um analisador personalizado denominado kStemmer
. O analisador personalizado especifica o seguinte:
Aplique o tokenizer padrão para criar tokens com base em regras de quebra de palavras.
Aplique os seguintes filtros nos tokens:
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
kStemmer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione kStemming no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.en_US.
Selecione o campo aninhado text.en_US no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
kStemmer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "analyzer": "kStemmer", "mappings": { "dynamic": true }, "analyzers": [ { "name": "kStemmer", "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "kStemming" } ] } ] }
A seguinte query pesquisa o campo text.en_US
na coleção minutos do termo Meeting
.
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "Meeting", "path": "text.en_US" } } }, { "$project": { "_id": 1, "text.en_US": 1 } } ])
[ { _id: 1, text: { en_US: '<head> This page deals with department meetings. </head>' } } ]
O Atlas Search retorna o documento com _id: 1
, que contém o termo plural meetings
em letras minúsculas. O Atlas Search faz a correspondência do termo da query com o documento porque o filtro de token em minúsculas normaliza o texto do token para minúsculas, e o filtro de token kStemming permite que o Atlas Search faça a correspondência do plural meetings
no campo text.en_US
do documento com o termo da query no singular. O Atlas Search também analisa o termo da query usando o analisador de índice (ou, se especificado, usando o searchAnalyzer
). Especificamente, o Atlas Search cria os seguintes tokens (termos pesquisáveis) para o documento nos resultados, que então utiliza para corresponder ao termo da query:
head
, this
, page
, deal
, with
, department
, meeting
, head
Tamanho
O filtro de token length
remove tokens muito curtos ou muito longos.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser length . |
min | inteiro | no | Número que especifica o comprimento mínimo de um token. O valor deve ser menor ou igual a Padrão: |
max | inteiro | no | Número que especifica o comprimento máximo de um token. O valor deve ser maior ou igual a Padrão: |
Exemplo
A seguinte definição de índice indexa o campo text.sv_FI
na coleção minutos utilizando um analisador personalizado denominado longOnly
. O analisador personalizado especifica o seguinte:
Use o tokenizador padrão para criar tokens com base em regras de quebra de palavras.
Aplique os seguintes filtros nos tokens:
Filtro de token icuFolding para aplicar dobramentos de caracteres.
length
filtro de token para indexar apenas tokens que sejam pelo menos 20 unidades de código UTF-16 muito tempo após tokenização.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
longOnly
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione icuFolding no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione length no menu suspenso e configure o seguinte campo para o filtro de token:
CampoValormin
20
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.sv.FI.
Selecione text.sv.FI aninhado no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
longOnly
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "mappings": { "fields": { "text": { "type": "document", "dynamic": true, "fields": { "sv_FI": { "type": "string", "analyzer": "longOnly" } } } } }, "analyzers": [ { "name": "longOnly", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "icuFolding" }, { "type": "length", "min": 20 } ] } ] }
A seguinte query pesquisa o campo text.sv_FI
na coleção minutos do termo forsaljningsavdelningen
.
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "forsaljningsavdelningen", "path": "text.sv_FI" } } }, { "$project": { "_id": 1, "text.sv_FI": 1 } } ])
[ { _id: 2, text: { sv_FI: 'Först talade chefen för försäljningsavdelningen' } } ]
O Atlas Search retorna o documento com _id: 2
, que contém o termo försäljningsavdelningen
. O Atlas Search corresponde ao documento ao termo da query porque o termo tem mais de 20 caracteres. Além disso, embora o termo da query forsaljningsavdelningen
não inclua os caracteres diacríticos, o Atlas Search corresponde o termo da query ao documento dobrando os diacríticos no termo original no documento. Especificamente, o Atlas Search cria os seguintes tokens (termos pesquisáveis) para o documento com _id: 2
.
forsaljningsavdelningen
O Atlas Search não retornará nenhum resultado para uma pesquisa de qualquer outro termo no campo text.sv_FI
da coleção porque todos os outros termos no campo têm menos de 20 caracteres.
minúsculas
O filtro de token do lowercase
normaliza o texto de token para minúsculas.
Atributos
Tem o seguinte atributo:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser lowercase . |
Exemplos
O exemplo de definição de índice a seguir indexa o campo title
na coleção de minutos como o tipo autocompletar com a estratégia de tokenização nGram
. Ele aplica um analisador customizado denominado keywordLowerer
ao campo title
. O analisador customizado especifica o seguinte:
Aplique o tokenizador de palavra-chave para criar um único token para uma string ou array de strings.
Aplique o filtro de token
lowercase
para converter texto de token em minúsculas.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Escolha o botão de opção Create Your Own e clique em Next.
Digite
keywordLowerer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido e selecione keyword no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo título.
Selecione título no menu suspenso Field Name e Preenchimento automático no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione os seguintes valores na lista suspensa da propriedade:
Nome da propriedadeValorAnalyzerkeywordLowerer
TokenizationnGram
Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte:
{ "mappings": { "fields": { "title": { "analyzer": "keywordLowerer", "tokenization": "nGram", "type": "autocomplete" } } }, "analyzers": [ { "name": "keywordLowerer", "charFilters": [], "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "lowercase" } ] } ] }
A seguinte query pesquisa o campo title
utilizando o operador autocomplete para os caracteres standup
.
db.minutes.aggregate([ { "$search": { "index": "default", "autocomplete": { "query": "standup", "path": "title" } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 4, title: 'The daily huddle on tHe StandUpApp2' } ]
O Atlas Search retorna o documento com _id: 4
nos resultados porque o documento contém o termo de query standup
. O Atlas Search cria tokens para o campo title
usando o tokenizer keyword
, o filtro de token lowercase
e a estratégia de tokenização nGram
para o tipo preenchimento automático. Especificamente, o Atlas Search usa o tokenizador keyword
para tokenizar a string inteira como um único token, o que oferece suporte apenas a correspondências exatas em toda a string e, em seguida, usa o filtro de token lowercase
para converter os tokens em letras minúsculas. Para o documento nos resultados, o Atlas Search cria o seguinte token utilizando o analisador personalizado:
ID do documento | Tokens de saída |
_id: 4 | the daily huddle on the standupapp2 |
Após aplicar o analisador customizado, o Atlas Search cria mais tokens de n-grams, pois o Atlas Search indexa o campo title
como o tipo autocomplete como especificado na definição de índice. O Atlas Search utiliza os tokens de n-grams, que incluem um token para standup
, para corresponder o documento ao termo de query standup
.
A seguinte definição de índice indexa o campo message
na coleção minutos utilizando um analisador personalizado denominado lowerCaser
. O analisador personalizado especifica o seguinte:
Aplique o tokenizador padrão para criar tokens com base em regras de quebra de palavras.
Aplique os seguintes filtros nos tokens:
icuNormalizer para normalizar os tokens usando um modo de normalização unicode padrão.
lowercase
Filtro de token para converter texto de token em minúsculas.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
lowerCaser
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione icuNormalizer no menu suspenso e selecione
nfkd
no menu suspenso normalizationForm.Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione lowercase no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo mensagem.
Selecione a mensagem na lista suspensa Field Name e Cadeia de caracteres na lista suspensa Data Type .
Na seção de propriedades do tipo de dados, selecione
lowerCaser
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
{ "mappings": { "fields": { "message": { "type": "string", "analyzer": "lowerCaser" } } }, "analyzers": [ { "name": "lowerCaser", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "icuNormalizer", "normalizationForm": "nfkd" }, { "type": "lowercase" } ] } ] }
A query a seguir pesquisa o campo message
para o termo sign-in
.
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "sign-in", "path": "message" } } }, { "$project": { "_id": 1, "message": 1 } } ])
[ { _id: 1, message: 'try to siGn-In' }, { _id: 3, message: 'try to sign-in' }, { _id: 2, message: 'do not forget to SIGN-IN. See ① for details.' } ]
O Atlas Search retorna os documentos com _id: 1
, _id: 3
, e _id:
2
nos resultados para o termo de query sign-in
porque o tokenizador icuNormalizer
cria primeiro tokens separados dividendo o texto, incluindo a palavra hierárquica, mas mantém a maiúsculas e minúsculas originais no documento e, em seguida, o filtro de token lowercase
converte os tokens para minúsculas. O Atlas Search também analisa o termo da query usando o analisador de índice (ou, se especificado, usando o searchAnalyzer
) para dividir o termo da query e corresponder ao documento.
Formulários de normalização | Tokens de saída |
_id: 1 | try , to , sign , in |
_id: 3 | try , to , sign , in |
_id: 2 | do , not , forget , to , sign , in , see , for , details |
nGram
O filtro de token do nGram
tokeniza a entrada em n-grams de tamanhos configurados. Você não pode usar o filtro de token nGram em definições de mapeamento de sinônimos ou de preenchimento automático.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser nGram . |
minGram | inteiro | sim | Número que especifica o comprimento mínimo de n-grams gerados. O valor deve ser menor ou igual a maxGram . |
maxGram | inteiro | sim | Número que especifica o comprimento máximo de n-grams gerados. O valor deve ser maior ou igual a minGram . |
termNotInBounds | string | no | String que especifica se os tokens de índice são menores que
Se Padrão: |
Exemplo
A seguinte definição de índice indexa o campo title
na collection minutos utilizando o analisador customizado denominado titleAutocomplete
. A função do analisador customizado especifica o seguinte:
Aplique o tokenizador padrão para criar tokens com base nas regras de quebra de palavras.
Aplicar uma série de filtros de token nos tokens:
englishPossessive
para remover possessivos ('s
à direita) das palavras.nGram
para tokenizar palavras em 4 a 7 caracteres de comprimento.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
titleAutocomplete
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione englishPossessive no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione nGram no menu suspenso e configure os seguintes campos para o filtro de token:
CampoValorminGram
4maxGram
7Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo título.
Selecione título no menu suspenso Field Name e Cadeia de caracteres no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
titleAutocomplete
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "titleAutocomplete" } } }, "analyzers": [ { "name": "titleAutocomplete", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "englishPossessive" }, { "type": "nGram", "minGram": 4, "maxGram": 7 } ] } ] }
A query seguinte utiliza o operador curinga para pesquisar o campo title
na coleção minutos para o termo meet
seguido por qualquer número de outros caracteres após o termo.
db.minutes.aggregate([ { "$search": { "index": "default", "wildcard": { "query": "meet*", "path": "title", "allowAnalyzedField": true } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 1, title: 'The team's weekly meeting' }, { _id: 3, title: 'The regular board meeting' } ]
O Atlas Search retorna os documentos com _id: 1
e _id: 3
porque os documentos contêm o termo meeting
, que o Atlas Search corresponde aos critérios da query meet*
criando os seguintes tokens (termos pesquisáveis).
Formulários de normalização | Tokens de saída |
---|---|
_id: 2 | team , week , weekl , weekly , eekl , eekly , ekly , meet , meeti , meetin , meeting , eeti , eeti , eeting , etin , eting , ting |
_id: 3 | regu , regul , regula , regular , egul , egula , egular , gula , gular , ular , boar , board , oard , meet , meeti , meetin , meeting , eeti , eeti , eeting , etin , eting , ting |
Observação
O Atlas Search não cria tokens para termos com menos de 4 caracteres (como the
) e mais de 7 caracteres porque o parâmetro termNotInBounds
é definido como omit
por padrão. Se você definir o valor do parâmetro termNotInBounds
para include
, o Atlas Search também criará tokens para o termo the
.
porterStemming
O filtro de token porterStemming
usa o algoritmo de derivação de porter para remover os sufixos morfológicos e flexionais comuns das palavras em inglês. Ele espera texto em minúsculas e não funciona como esperado para texto em maiúsculas.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser porterStemming . |
Exemplo
A seguinte definição de índice indexa o campo title
na coleção minutos utilizando um analisador personalizado denominado porterStemmer
. O analisador personalizado especifica o seguinte:
Aplique o tokenizer padrão para criar tokens com base em regras de quebra de palavras.
Aplique os seguintes filtros de token nos tokens:
Filtro de token minúsculo para converter as palavras em minúsculo.
Filtro de token porterStemming para remover os sufixos morfológicos e infleccionais comuns das palavras.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
porterStemmer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione porterStemming no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo título.
Selecione título no menu suspenso Field Name e Cadeia de caracteres no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
porterStemmer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "porterStemmer" } } }, "analyzers": [ { "name": "porterStemmer", "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "porterStemming" } ] } ] }
A seguinte query pesquisa o campo title
na coleção minutos do termo Meet
.
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "Meet", "path": "title" } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 1, title: 'The team's weekly meeting' }, { _id: 3, title: 'The regular board meeting' } ]
O Atlas Search retorna os documentos com _id: 1
e _id: 3
, pois o filtro de token em minúsculas normaliza o texto do token para minúsculas e, em seguida, o filtro de token porterStemming
cede o sufixo morfológico do token meeting
para criar o token meet
, que O Atlas Search corresponde ao termo de query Meet
. Especificamente, o Atlas Search cria os seguintes tokens (termos pesquisáveis) para os documentos nos resultados, que então corresponde ao termo da query Meet
:
Formulários de normalização | Tokens de saída |
---|---|
_id: 1 | the , team' , weekli , meet |
_id: 3 | the , regular , board , meet |
regex
O filtro de token do regex
aplica uma expressão regular para cada token, substituindo as correspondências por uma string especificada.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição | |||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
type | string | sim | Etiqueta legível por humanos que identifica este filtro de token. O valor deve ser regex . | |||||||||||||||||||||
pattern | string | sim | Padrão de expressão regular para aplicar a cada token. | |||||||||||||||||||||
replacement | string | sim | String de substituição para substituir sempre que ocorrer um padrão correspondente. Se você especificar uma string vazia (
| |||||||||||||||||||||
matches | string | sim | Os valores aceitáveis são:
Se |
Exemplo
A seguinte definição de índice indexa o campo page_updated_by.email
na coleção minutos utilizando um analisador personalizado denominado emailRedact
. O analisador personalizado especifica o seguinte:
Aplique o tokenizador de palavra-chave para indexar todas as palavras no valor do campo como um único termo.
Aplique os seguintes filtros de token nos tokens:
Filtro de token em minúsculas para transformar caracteres maiúsculos nos tokens em minúsculas.
regex
Filtro de token para encontrar strings que parecem endereços de e-mail nos tokens e substituí-las pela palavraredacted
.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
emailRedact
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione keyword no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione regex no menu suspenso e configure o seguinte para o filtro de token:
Digite
^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,5})$
no campo pattern.Digite
redacted
no campo replacement.Selecione
all
no menu suspenso matches.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado page_updated_by.email.
Selecione page_updated_by.email aninhado no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
emailRedact
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "analyzer": "lucene.standard", "mappings": { "dynamic": false, "fields": { "page_updated_by": { "type": "document", "fields": { "email": { "type": "string", "analyzer": "emailRedact" } } } } }, "analyzers": [ { "charFilters": [], "name": "emailRedact", "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "lowercase" }, { "matches": "all", "pattern": "^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,5})$", "replacement": "redacted", "type": "regex" } ] } ] }
A seguinte query pesquisa o campo page_updated_by.email
na coleção minutos utilizando o operador curinga para o termo example.com
precedido por qualquer número de outros caracteres.
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "index": "default", 5 "wildcard": { 6 "query": "*example.com", 7 "path": "page_updated_by.email", 8 "allowAnalyzedField": true 9 } 10 } 11 }, 12 { 13 "$project": { 14 "_id": 1, 15 "page_updated_by.email": 1 16 } 17 } 18 ])
O Atlas Search não retorna quaisquer resultados para a query, embora o campo page_updated_by.email
contenha a palavra example.com
nos endereços de e-mail. O Atlas Search tokeniza strings que correspondem à expressão regular fornecida no analisador customizado com a palavra redacted
e, por isso, o Atlas Search não corresponde ao termo de query a nenhum documento.
reverter
O filtro de token reverse
inverte cada token de string.
Atributos
Tem o seguinte atributo:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível por humanos que identifica este filtro de token. O valor deve ser reverse . |
Exemplo
A seguinte definição de índice indexa os campos do page_updated_by.email
na collection de minutos utilizando um analisador personalizado denominado keywordReverse
. O analisador personalizado especifica o seguinte:
Aplique o tokenizador de palavra-chave para tokenizar strings inteiras como termos únicos.
Aplique o filtro de token
reverse
para inverter os tokens de string.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
keywordReverse
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione keyword no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione reverse no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado page_updated_by.email.
Selecione page_updated_by.email aninhado no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
keywordReverse
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "analyzer": "lucene.keyword", "mappings": { "dynamic": }, "analyzers": [ { "name": "keywordReverse", "charFilters": [], "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "reverse" } ] } ] }
A query abaixo pesquisa o campo page_updated_by.email
na collection de minutos usando o operador de curinga para corresponder a quaisquer caracteres anteriores aos caracteres @example.com
na ordem inversa. O filtro de token do reverse
pode acelerar as principais queries de curingas.
db.minutes.aggregate([ { "$search": { "index": "default", "wildcard": { "query": "*@example.com", "path": "page_updated_by.email", "allowAnalyzedField": true } } }, { "$project": { "_id": 1, "page_updated_by.email": 1, } } ])
Para a query anterior, o Atlas Search aplica o analisador personalizado à query curinga para transformar a query da seguinte maneira:
moc.elpmaxe@*
O Atlas Search então executa a query em relação aos tokens indexados, que também são invertidos. A query retorna os seguintes documentos:
[ { _id: 1, page_updated_by: { email: 'auerbach@example.com' } }, { _id: 2, page_updated_by: { email: 'ohrback@example.com' } }, { _id: 3, page_updated_by: { email: 'lewinsky@example.com' } }, { _id: 4, page_updated_by: { email: 'levinski@example.com' } } ]
Especificamente, o Atlas Search cria os seguintes tokens (termos pesquisáveis) para os documentos nos resultados, que então corresponde ao termo da query moc.elpmaxe@*
:
Formulários de normalização | Tokens de saída |
---|---|
_id: 1 | moc.elpmaxe@hcabreua |
_id: 2 | moc.elpmaxe@kcabrho |
_id: 3 | moc.elpmaxe@yksniwel |
_id: 4 | moc.elpmaxe@iksnivel |
shingle
O filtro de token do shingle
constrói shingles (n-grams de token) de uma série de tokens. Você não pode usar o filtro de token do shingle
em definições de mapeamento de sinônimos ou de preenchimento automático.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser shingle . |
minShingleSize | inteiro | sim | Número mínimo de tokens por shingle. Deve ser maior ou igual a 2 e menor ou igual a maxShingleSize . |
maxShingleSize | inteiro | sim | Número máximo de tokens por shingle. Deve ser maior ou igual a minShingleSize . |
Exemplo
O exemplo de definição de índice a seguir no campo page_updated_by.email
na collection minutos usa dois analisadores customizados, emailAutocompleteIndex
e emailAutocompleteSearch
, para implementar funcionalidades semelhantes ao preenchimento automático. O Atlas Search usa o analisador emailAutocompleteIndex
durante a criação do índice para:
Substituir
@
caracteres em um campo porAT
Criar tokens com o tokenizador whitespace
Tokens de shingle
Criar edgeGram desses tokens shingled
O Atlas Search utiliza o analisador emailAutocompleteSearch
durante uma pesquisa para:
Substituir
@
caracteres em um campo porAT
Criar tokens com o tokenizador de espaço em branco
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
emailAutocompleteIndex
no campo Analyzer Name.Expanda Character Filters e clique em Add character filter.
Selecione mapping no menu suspenso e clique em Add mapping.
Insira a seguinte chave e valor:
ChaveValor@
AT
Clique em Add character filter para adicionar o filtro de caracteres ao seu analisador customizado.
Expanda Tokenizer se estiver recolhido.
Selecione whitespace no menu suspenso e digite
15
no campo maxTokenLength.Expanda Token Filters e clique em Add token filter.
Selecione shingle no menu suspenso e configure os seguintes campos.
CampoValor do campominShingleSize
2minShingleSize
3Clique em Add token filter para adicionar outro filtro de token.
Clique em Add token filter para adicionar outro filtro de token.
Selecione edgeGram no menu suspenso e configure os seguintes campos para o filtro de token:
CampoValor do campominGram
2maxGram
15Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para adicionar o analisador personalizado ao seu índice.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
emailAutocompleteSearch
no campo Analyzer Name.Expanda Character Filters e clique em Add character filter.
Selecione mapping no menu suspenso e clique em Add mapping.
Insira a seguinte chave e valor:
ChaveValor@
AT
Clique em Add character filter para adicionar o filtro de caracteres ao seu analisador customizado.
Expanda Tokenizer se estiver recolhido.
Selecione whitespace no menu suspenso e digite
15
no campo maxTokenLength.Clique em Add para adicionar o analisador personalizado ao seu índice.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado page_updated_by.email.
Selecione page_updated_by.email aninhado no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
emailAutocompleteIndex
no menu suspenso Index Analyzer eemailAutocompleteSearch
no menu suspenso Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
1 { 2 "analyzer": "lucene.keyword", 3 "mappings": { 4 "dynamic": true, 5 "fields": { 6 "page_updated_by": { 7 "type": "document", 8 "fields": { 9 "email": { 10 "type": "string", 11 "analyzer": "emailAutocompleteIndex", 12 "searchAnalyzer": "emailAutocompleteSearch" 13 } 14 } 15 } 16 } 17 }, 18 "analyzers": [ 19 { 20 "name": "emailAutocompleteIndex", 21 "charFilters": [ 22 { 23 "mappings": { 24 "@": "AT" 25 }, 26 "type": "mapping" 27 } 28 ], 29 "tokenizer": { 30 "maxTokenLength": 15, 31 "type": "whitespace" 32 }, 33 "tokenFilters": [ 34 { 35 "maxShingleSize": 3, 36 **** "minShingleSize": 2, 37 "type": "shingle" 38 }, 39 { 40 "maxGram": 15, 41 "minGram": 2, 42 "type": "edgeGram" 43 } 44 ] 45 }, 46 { 47 "name": "emailAutocompleteSearch", 48 "charFilters": [ 49 { 50 "mappings": { 51 "@": "AT" 52 }, 53 "type": "mapping" 54 } 55 ], 56 "tokenizer": { 57 "maxTokenLength": 15, 58 "type": "whitespace" 59 } 60 } 61 ] 62 }
A seguinte query procura um endereço de e-mail no campo page_updated_by.email
da collection minutos:
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "auerbach@ex", "path": "page_updated_by.email" } } }, { "$project": { "_id": 1, "page_updated_by.email": 1 } } ])
[ { _id: 1, page_updated_by: { email: 'auerbach@example.com' } } ]
O Atlas Search cria tokens de pesquisa usando o analisador emailAutocompleteSearch
, que então corresponde aos tokens de índice que ele criou utilizando o analisador emailAutocompleteIndex
. A tabela abaixo mostra a pesquisa e tokens de índice (até 15 caracteres) que o Atlas Search cria:
Tokens de pesquisa | Index Tokens |
---|---|
auerbachATexamp | au , aue , auer , auerb , auerba , auerbac , auerbach , auerbachA , auerbachAT , auerbachATe , auerbachATex , auerbachATexa , auerbachATexam , auerbachATexamp |
snowballStemming
O token snowballStemming
filtra tokens Stems usando um derivador gerado pelo Snowball.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser snowballStemming . |
stemmerName | string | sim | Os seguintes valores são válidos:
|
Exemplo
A seguinte definição de índice indexa o campo text.fr_CA
na coleção minutos utilizando um analisador personalizado denominado frenchStemmer
. O analisador personalizado especifica o seguinte:
Aplique o tokenizer padrão para criar tokens com base em regras de quebra de palavras.
Aplique os seguintes filtros de token nos tokens:
Filtro de token lowercase para converter os tokens em minúsculas.
french
variante do filtro de tokensnowballStemming
para palavras radicais.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
frenchStemmer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione snowballStemming no menu suspenso e selecione
french
no menu suspenso stemmerName.Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.fr_CA.
Selecione o campo aninhado text.fr_CA no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
frenchStemmer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "mappings": { "fields": { "text": { "type": "document", "fields": { "fr_CA": { "type": "string", "analyzer": "frenchStemmer" } } } } }, "analyzers": [ { "name": "frenchStemmer", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "snowballStemming", "stemmerName": "french" } ] } ] }
A seguinte query pesquisa o campo text.fr_CA
na coleção minutos do termo réunion
.
db.minutes.aggregate([ { "$search": { "text": { "query": "réunion", "path": "text.fr_CA" } } }, { "$project": { "_id": 1, "text.fr_CA": 1 } } ])
[ { _id: 1, text: { fr_CA: 'Cette page traite des réunions de département' } } ]
O Atlas Search retorna o documento com _id: 1
nos resultados. O Atlas Search faz a correspondência entre o termo de query e o documento porque cria os seguintes tokens para o documento, que são usados para fazer a correspondência com o termo de query réunion
:
ID do documento | Tokens de saída |
---|---|
_id: 1 | cet , pag , trait , de , réunion , de , départ |
spanishPluralStemming
O filtro de token spanishPluralStemming
origina palavras no plural em espanhol. Ele espera texto em minúsculas.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser spanishPluralStemming . |
Exemplo
A seguinte definição de índice indexa o campo text.es_MX
na coleção minutos utilizando um analisador personalizado denominado spanishPluralStemmer
. O analisador personalizado especifica o seguinte:
Aplique o tokenizer padrão para criar tokens com base em regras de quebra de palavras.
Aplique os seguintes filtros de token nos tokens:
Filtro de token em minúsculas para converter termos em espanhol para minúsculas.
spanishPluralStemming
filtro de tokens para transformar palavras em espanhol do plural para o singular nos tokens.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
spanishPluralStemmer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione spanishPluralStemming no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.es_MX.
Selecione text.es_MX no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
spanishPluralStemmer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "analyzer": "spanishPluralStemmer", "mappings": { "fields": { "text: { "type": "document", "fields": { "es_MX": { "analyzer": "spanishPluralStemmer", "searchAnalyzer": "spanishPluralStemmer", "type": "string" } } } } }, "analyzers": [ { "name": "spanishPluralStemmer", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "spanishPluralStemming" } ] } ] }
A seguinte query pesquisa o campo text.es_MX
na collection minutos do termo em espanhol punto
.
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "punto", "path": "text.es_MX" } } }, { "$project": { "_id": 1, "text.es_MX": 1 } } ])
[ { _id: 4, text : { es_MX: 'La página ha sido actualizada con los puntos de la agenda.', } } ]
O Atlas Search retorna o documento com _id: 4
porque o campo text.es_MX
no documento contém o termo plural puntos
. O Atlas Search faz a correspondência desse documento com o termo de consulta punto
porque o Atlas Search analisa puntos
como punto
ao extrair o plural (s
) do termo. Especificamente, o Atlas Search cria os seguintes tokens (termos pesquisáveis) para o documento nos resultados, que então utiliza para corresponder ao termo de consulta:
ID do documento | Tokens de saída |
_id: 4 | la , pagina , ha , sido , actualizada , con , los , punto , de , la , agenda |
stempel
O filtro de token stempel
utiliza a tabela de extração polonesa padrão da Lucene para extrair palavras no idioma polonês. Ele espera texto em letras minúsculas.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser stempel . |
Exemplo
A seguinte definição de índice indexa o campo text.pl_PL
na coleção minutos utilizando um analisador personalizado denominado stempelStemmer
. O analisador personalizado especifica o seguinte:
Aplique o tokenizer padrão para criar tokens com base em regras de quebra de palavras.
Aplique os seguintes filtros nos tokens:
Filtro de token minúsculo para converter as palavras em minúsculo.
filtro de tokens de stempel para transformar palavras em polonês.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
stempelStemmer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione stempel no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.pl_PL.
Selecione o campo aninhado text.pl_PL no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
stempelStemmer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "analyzer": "stempelStemmer", "mappings": { "dynamic": true, "fields": { "text.pl_PL": { "analyzer": "stempelStemmer", "searchAnalyzer": "stempelStemmer", "type": "string" } } }, "analyzers": [ { "name": "stempelStemmer", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "stempel" } ] } ] }
A seguinte query pesquisa o campo text.pl_PL
na collection minutos do termo em polonês punkt
.
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "punkt", "path": "text.pl_PL" } } }, { "$project": { "_id": 1, "text.pl_PL": 1 } } ])
[ { _id: 4, text: { pl_PL: 'Strona została zaktualizowana o punkty porządku obrad.' } } ]
O Atlas Search retorna o documento com _id: 4
porque o campo text.pl_PL
no documento contém o termo plural punkty
. O Atlas Search faz a correspondência desse documento com o termo de consulta punkt
porque o Atlas Search analisa punkty
como punkt
ao extrair o plural (y
) do termo. Especificamente, o Atlas Search cria os seguintes tokens (termos pesquisáveis) para o documento nos resultados, que então corresponde ao termo de consulta:
ID do documento | Tokens de saída |
---|---|
_id: 4 | strona , zostać , zaktualizować , o , punkt , porządek , obrada |
stopword
O filtro de tokens stopword
remove tokens que correspondem às palavras vazias especificadas. Este filtro de tokens não analisa as palavras vazias especificadas.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser stopword . |
tokens | array de strings | sim | Lista que contém as palavras vazias que correspondem aos tokens a serem removidos. O valor deve ser uma ou mais palavras vazias. |
ignoreCase | booleano | no | Sinalizador que indica se deve-se ignorar maiúsculas e minúsculas ao filtrar os tokens a serem removidos. O valor pode ser um dos seguintes:
Padrão: |
Exemplo
A seguinte definição de índice indexa o campo title
na coleção minutos utilizando um analisador personalizado denominado stopwordRemover
. O analisador personalizado especifica o seguinte:
Aplicar o tokenizador de espaço em branco para criar tokens com base nas ocorrências de espaço em branco entre palavras.
Aplicar o filtro de tokens
stopword
para remover os tokens que correspondam às palavras vazias definidasis
,the
eat
. O filtro de tokens não diferencia maiúsculas de minúsculas e removerá todos os tokens que correspondam às palavras vazias especificadas.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
stopwordRemover
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione whitespace no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione stopword no menu suspenso e digite o seguinte no campo tokens:
is
,the
,at
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.en_US.
Selecione o campo aninhado text.en_US no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
stopwordRemover
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "mappings": { "fields": { "text": { "type" : "document", "fields": { "en_US": { "type": "string", "analyzer": "stopwordRemover" } } } } }, "analyzers": [ { "name": "stopwordRemover", "charFilters": [], "tokenizer": { "type": "whitespace" }, "tokenFilters": [ { "type": "stopword", "tokens": ["is", "the", "at"] } ] } ] }
A query a seguir procura a frase head of the sales
no campo text.en_US
na collection de minutos .
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "phrase": { 5 "query": "head of the sales", 6 "path": "text.en_US" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "text.en_US": 1 14 } 15 } 16 ])
1 [ 2 { 3 _id: 2, 4 text: { en_US: 'The head of the sales department spoke first.' } 5 } 6 ]
O Atlas Search retorna o documento com _id: 2
porque o campo en_US
contém o termo da query. O Atlas Search não cria tokens para a palavra vazia the
no documento durante a análise, mas ainda é capaz de correspondê-la ao termo da query porque, para os campos string
, ele também analisa o termo da query usando o analyzer do índice (ou, se especificado, usando o searchAnalyzer
) e remove a palavra vazia do termo da query, o que permite que o Atlas Search corresponda o termo da query ao documento. Especificamente, o Atlas Search cria os seguintes tokens para o documento nos resultados:
ID do documento | Tokens de saída |
---|---|
_id: 2 | head , of , sales , department , spoke , first. |
cortar
O filtro de token trim
corta o espaço em branco à esquerda e à direita dos tokens.
Atributos
Tem o seguinte atributo:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser trim . |
Exemplo
A seguinte definição de índice indexa text.en_US
na coleção minutos utilizando um analisador personalizado denominado tokenTrimmer
. O analisador personalizado especifica o seguinte:
Aplicar o filtro de caracteres htmlStrip para remover todas as marcações HTML do texto, exceto a
a
.Aplique o tokenizador de palavra-chave para criar um único token para toda a string.
Aplique o filtro de token
trim
para remover os espaços em branco à esquerda e à direita nos tokens.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
tokenTrimmer
no campo Analyzer Name.Expanda Character Filters e clique em Add character filter.
Selecione htmlStrip no menu suspenso e digite
a
no campo ignoredTags.Clique em Add character filter para adicionar o filtro de caracteres ao seu analisador customizado.
Expanda Tokenizer se estiver recolhido.
Selecione keyword no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione trim no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para adicionar o analisador personalizado ao seu índice.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.en_US.
Selecione o campo aninhado text.en_US no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
tokenTrimmer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "mappings": { "fields": { "text": { "type": "document", "fields": { "en_US": { "type": "string", "analyzer": "tokenTrimmer" } } } } }, "analyzers": [ { "name": "tokenTrimmer", "charFilters": [{ "type": "htmlStrip", "ignoredTags": ["a"] }], "tokenizer": { "type": "keyword" }, "tokenFilters": [ { "type": "trim" } ] } ] }
A consulta a seguir procura a frase *department meetings*
precedida e seguida por qualquer número de outros caracteres no campo text.en_US
na coleção de minutos .
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "wildcard": { 5 "query": "*department meetings*", 6 "path": "text.en_US", 7 "allowAnalyzedField": true 8 } 9 } 10 }, 11 { 12 "$project": { 13 "_id": 1, 14 "text.en_US": 1 15 } 16 } 17 ])
1 [ 2 { 3 _id: 1, 4 text: { en_US: '<head> This page deals with department meetings. </head>' } 5 } 6 ]
O Atlas Search retorna o documento com _id: 1
porque o campo en_US
contém o termo de query department meetings
. O Atlas Search cria o seguinte token para o documento nos resultados, mostrando que o Atlas Search removeu as marcações HTML, criou um único token para toda a string a removeu espaços em branco à esquerda e à direita no token:
ID do documento | Tokens de saída |
---|---|
_id: 1 | This page deals with department meetings. |
wordDelimiterGraph
O filtro de token wordDelimiterGraph
divide os tokens em sub-tokens com base nas regras configuradas. Recomendamos não usar esse filtro de token com o tokenizador padrão porque esse tokenizador remove muitos delimitadores intrapalavra que esse filtro de token usa para determinar os limites.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser wordDelimiterGraph . |
delimiterOptions | objeto | no | Objeto que contém as regras que determinam como dividir palavras em subpalavras. Padrão: |
delimiterOptions .generateWordParts | booleano | no | Sinalizador que indica se os tokens devem ser divididos com base em subpalavras. Por exemplo, se Padrão: |
delimiterOptions .generateNumberParts | booleano | no | Sinalizador que indica se os tokens devem ser divididos com base em subnúmeros. Por exemplo, se Padrão: |
delimiterOptions .concatenateWords | booleano | no | Sinalizador que indica se deve concatenar execuções de subpalavras. Por exemplo, se Padrão: |
delimiterOptions .concatenateNumbers | booleano | no | Sinalizador que indica se as execuções de subnúmeros devem ser concatenadas. Por exemplo, se Padrão: |
delimiterOptions .concatenateAll | booleano | no | Sinalizador que indica se todas as execuções devem ser concatenadas. Por exemplo, se Padrão: |
delimiterOptions .preserveOriginal | booleano | no | Sinalizador que indica se deve-se gerar tokens das palavras originais. Padrão: |
delimiterOptions .splitOnCaseChange | booleano | no | Sinalizador que indica se deseja dividir tokens com base em transições de letras maiúsculas e minúsculas. Por exemplo, se Padrão: |
delimiterOptions .splitOnNumerics | booleano | no | Sinalizador que indica se os tokens devem ser divididos com base nas transições entre letras e números. Por exemplo, se Padrão: |
delimiterOptions .stemEnglishPossessive | booleano | no | Sinalizador que indica se os possessivos finais de cada subpalavra devem ser removidos. Por exemplo, se Padrão: |
delimiterOptions .ignoreKeywords | booleano | no | Sinalizador que indica se você deve ignorar tokens com o atributo Padrão: |
protectedWords | objeto | no | Objeto que contém opções para palavras protegidas. Padrão: |
protectedWords .words | array | condicional | Lista que contém os tokens a serem protegidos contra delimitação. Se você especificar protectedWords , deve especificar esta opção. |
protectedWords .ignoreCase | booleano | no | Sinalizador que indica se você deve ignorar a diferenciação entre maiúsculas e minúsculas para palavras protegidas. Padrão: |
Se true
, aplique o filtro de token flattenGraph após essa opção para tornar o fluxo de token adequado para indexação.
Exemplo
A seguinte definição de índice indexa o campo title
na coleção minutos utilizando um analisador personalizado denominado wordDelimiterGraphAnalyzer
. O analisador personalizado especifica o seguinte:
Aplique o token whitespace para criar tokens com base em ocorrências de whitespace entre palavras.
Aplicar o filtro de tokens wordDelimiterGraph para o seguinte:
Não tente dividir
is
,the
eat
. A exclusão diferencia maiúsculas de minúsculas. Por exemplo,Is
etHe
não estão excluídos.Dividir tokens em alterações de capitalização e remover tokens que contenham apenas letras do alfabeto inglês.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
wordDelimiterGraphAnalyzer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione whitespace no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione wordDelimiterGraph no menu suspenso e configure os seguintes campos:
Desmarque delimiterOptions.generateWordParts e selecione delimiterOptions.splitOnCaseChange.
Digite e selecione no menu suspenso as palavras
is
,the
eat
, uma de cada vez, no campoprotectedWords.words
.Desmarque
protectedWords.ignoreCase
.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings , clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado title .
Selecione title aninhado no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
wordDelimiterGraphAnalyzer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "wordDelimiterGraphAnalyzer" } } }, "analyzers": [ { "name": "wordDelimiterGraphAnalyzer", "charFilters": [], "tokenizer": { "type": "whitespace" }, "tokenFilters": [ { "type": "wordDelimiterGraph", "protectedWords": { "words": ["is", "the", "at"], "ignoreCase": false }, "delimiterOptions" : { "generateWordParts" : false, "splitOnCaseChange" : true } } ] } ] }
A seguinte query pesquisa o campo title
na coleção minutos do termo App2
.
db.minutes.aggregate([ { "$search": { "index": "default", "text": { "query": "App2", "path": "title" } } }, { "$project": { "_id": 1, "title": 1 } } ])
[ { _id: 4, title: 'The daily huddle on tHe StandUpApp2' } ]
O Atlas Search retorna o documento com _id: 4
porque o campo title
no documento contém App2
. O Atlas Search divide os tokens nas mudanças entre maiúsculas e minúsculas e remove os tokens criados por uma divisão que contém somente letras alfabéticas. Ele também analisa o termo da consulta usando o analisador de índice (ou, se especificado, usando o searchAnalyzer
) para dividir a palavra em caso de alteração de maiúsculas e minúsculas e remover as letras que precedem 2
. Especificamente, o Atlas Search cria os seguintes tokens para o documento com _id : 4
para as opções protectedWords
e delimiterOptions
:
wordDelimiterGraph Opções | Tokens de saída |
---|---|
protectedWords | The , daily , huddle , on , t , He , Stand , Up , App , 2 |
delimiterOptions | The , daily , huddle , on , 2 |