Tokenizadores
Nesta página
Um tokenizador do analisador customizado determina como o Atlas Search divide o texto em blocos discretos para indexação. Os tokenizadores exigem um campo de tipo e alguns também aceitam opções adicionais.
"tokenizer": { "type": "<tokenizer-type>", "<additional-option>": "<value>" }
As seguintes definições de índice de amostra e queries usam a coleção de amostras minutes
chamada. Se você adicionar a coleção minutes
a um banco de dados em seu cluster do Atlas, poderá criar os seguintes índices de amostra do Editor Visual ou do Editor JSON na IU do Atlas e executar as consultas de amostra nessa coleção. Para criar esses índices, depois de selecionar seu método de configuração preferido na IU do Atlas, selecione o banco de dados e a collection, e refine o índice para adicionar analisadores customizados que empregam tokenizadores.
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 | Atlas Search tokenizador configurado no analisador customizado. |
Filtros de token | Filtros de token do Atlas Search configurados no analisador customizado. |
Ações | Ícones clicáveis que indicam as ações que você pode executar no analisador customizado.
|
edgeGram
O tokenizador edgeGram
tokeniza a entrada do lado esquerdo, ou a "borda", de uma entrada de texto em n-gramas de determinados tamanhos. Você não pode usar um analisador personalizado com o tokenizador EdgeGram no campo analyzer
para definições de mapeamento de campo de sinônimos ou preenchimento automático.
Atributos
Tem os seguintes atributos:
Observação
O tokenizador edgeGram
produz vários tokens de saída por palavra e entre palavras no texto de entrada, produzindo gráficos de tokens.
Como os mapeadores e definições de mapeamento de tipo de campo de preenchimento automático com sinônimo funcionam somente quando utilizados com tokenizadores não produtores de gráficos, você não pode utilizar um analisador personalizado com edgeGram tokenizador no campo analyzer
para preenchimento automático de definições de mapeamento de tipo de campo ou analisadores com mapeamento de sinônimos.
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível por humanos que identifica este tipo de tokenizador. O valor deve ser edgeGram . |
minGram | inteiro | sim | Número de caracteres a serem incluídos no token mais curto criado. |
maxGram | inteiro | sim | Número de caracteres a incluir no token mais longo criado. |
Exemplo
A seguinte definição de índice indexa o campo message
na coleção minutes
utilizando um analisador customizado denominado edgegramExample
. Ele usa o edgeGram
tokenizador para criar tokens (termos pesquisáveis) entre 2
e 7
caracteres a partir do primeiro caractere no lado esquerdo das palavras no campo message
.
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
edgegramExample
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione edgeGram no menu suspenso e digite o valor para os seguintes campos:
CampoValorminGram2
maxGram7
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 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
edgegramExample
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:
{ "mappings": { "dynamic": true, "fields": { "message": { "analyzer": "edgegramExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "edgegramExample", "tokenFilters": [], "tokenizer": { "maxGram": 7, "minGram": 2, "type": "edgeGram" } } ] }
A seguinte query pesquisa o campo message
na coleção minutes
para texto que começa com tr
.
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "tr", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1 14 } 15 } 16 ])
{ _id: 1, message: 'try to siGn-In' }, { _id: 3, message: 'try to sign-in' }
O Atlas Search retorna documentos com _id: 1
e _id: 3
nos resultados porque o Atlas Search criou um token com o valor tr
usando o tokenizador edgeGram
para os documentos, o que corresponde ao termo de pesquisa. Se você indexar o campo message
usando o tokenizador standard
, o Atlas Search não retornará nenhum resultado para o termo de pesquisa tr
.
A tabela a seguir mostra os tokens que o tokenizador edgeGram
e, por comparação, o tokenizador standard
criam para os documentos nos resultados:
Tokenizador | Token Outputs |
---|---|
standard | try , to , sign , in |
edgeGram | tr , try , try{SPACE} , try t , try to , try to{SPACE} |
keyword
O keyword
tokenizador tokeniza toda a entrada como um token único. O Atlas Search não indexa campos de strings que excedam 32766 caracteres usando o tokenizador keyword
.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível por humanos que identifica este tipo de tokenizador. O valor deve ser keyword . |
Exemplo
A seguinte definição de índice indexa o campo message
na coleção minutes
utilizando um analisador customizado denominado keywordExample
. Ele usa o tokenizador keyword
para criar um token (termos pesquisáveis) em todo o campo como um único termo.
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
keywordExample
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione keyword no menu suspenso.
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 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
keywordExample
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:
{ "mappings": { "dynamic": true, "fields": { "message": { "analyzer": "keywordExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "keywordExample", "tokenFilters": [], "tokenizer": { "type": "keyword" } } ] }
A seguinte consulta pesquisa o campo message
na coleção minutes
para a frase try to sign-in
.
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "try to sign-in", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1 14 } 15 } 16 ])
{ _id: 3, message: 'try to sign-in' }
A Atlas Search retorna o documento com _id: 3
nos resultados porque o Atlas Search criou um token com o valor try to sign-in
usando o tokenizador de keyword
para os documentos, que corresponde ao termo de pesquisa. Se você indexar o campo message
usando o tokenizador standard
, o Atlas Search retornará documentos com _id: 1
, _id: 2
e _id: 3
para o termo de pesquisa try to sign-in
porque cada documento contém alguns dos tokens criados pelo tokenizador standard
.
A tabela a seguir mostra os tokens que o tokenizador keyword
e, em comparação, o tokenizador standard
, criam para o documento com _id: 3
:
Tokenizador | Token Outputs |
---|---|
standard | try , to , sign , in |
keyword | try to sign-in |
nGram
O nGram
tokenizador tokeniza em blocos de texto, ou "n-grams", de determinados tamanhos. Você não pode utilizar um analisador customizado com token nGram no analyzer
campo para sinônimo ou autocompletar definições de mapeamento de campo.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível por humanos que identifica este tipo de tokenizador. O valor deve ser nGram . |
minGram | inteiro | sim | Número de caracteres a serem incluídos no token mais curto criado. |
maxGram | inteiro | sim | Número de caracteres a incluir no token mais longo criado. |
Exemplo
A seguinte definição de índice indexa o campo title
na coleção minutes
utilizando um analisador personalizado denominado ngramExample
. Ele usa o token nGram
para criar tokens (termos pesquisáveis) entre 4
e 6
caracteres no campo title
.
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
ngramExample
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione nGram no menu suspenso e digite o valor para os seguintes campos:
CampoValorminGram4
maxGram6
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 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
ngramExample
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:
{ "mappings": { "dynamic": true, "fields": { "title": { "analyzer": "ngramExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "ngramExample", "tokenFilters": [], "tokenizer": { "maxGram": 6, "minGram": 4, "type": "nGram" } } ] }
A query a seguir pesquisa o termo week
no campo title
na coleção minutes
.
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "week", 6 "path": "title" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "title": 1 14 } 15 } 16 ])
{ _id: 1, title: "The team's weekly meeting" }
O Atlas Search retorna o documento com _id: 1
nos resultados porque o Atlas Search criou um token com o valor week
usando o tokenizador nGram
para os documentos, que corresponde ao termo de pesquisa. Se você indexar o title
campo usando o standard
ou edgeGram
o tokenizador, o Atlas Search não retornará nenhum resultado para o termo de pesquisa week
.
A tabela a seguir mostra os tokens que o tokenizador nGram
e, por comparação, os tokenizadores standard
e edgeGram
criam para o documento com _id: 1
:
Tokenizador | Token Outputs |
---|---|
standard | The , team's , weekly , meeting |
edgeGram | The{SPACE} , The t , The te |
nGram | The{SPACE} , The t , The te , he t , ... , week , weekl , weekly , eekl , ..., eetin , eeting , etin , eting , ting |
regexCaptureGroup
O tokenizador regexCaptureGroup
corresponde a um padrão de expressão regular para extrair tokens.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível por humanos que identifica este tipo de tokenizador. O valor deve ser regexCaptureGroup . |
pattern | string | sim | Expressão regular para correspondência. |
group | inteiro | sim | Índice do grupo de caracteres dentro da expressão correspondente para extrair em tokens. Use 0 para extrair todos os grupos de caracteres. |
Exemplo
A seguinte definição de índice indexa o campo page_updated_by.phone
na coleção minutes
utilizando um analisador personalizado denominado phoneNumberExtractor
. Ele usa:
mappings
filtro de caracteres para remover parênteses em torno dos três primeiros dígitos e substituir todos os espaços e pontos por traçosregexCaptureGroup
tokenizador para criar um único token a partir do primeiro número de telefone formatado nos EUA presente na entrada de texto
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
phoneNumberExtractor
no campo Analyzer Name.Expanda Character Filters e clique em Add character filter.
Selecione mapping no menu suspenso e clique em Add mapping.
Insira os seguintes caracteres no campo Original, um de cada vez e deixe o campo Replacement correspondente vazio.
OriginalSubstituição-
.
(
)
Clique em Add character filter.
Expanda Tokenizer se estiver recolhido.
Selecione regexCaptureGroup no menu suspenso e digite o valor para os seguintes campos:
CampoValorpattern^\\b\\d{3}[-]?\\d{3}[-]?\\d{4}\\b$
group0
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 personalizado no campo page_updated_by.phone.
Selecione page_updated_by.phone no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
phoneNumberExtractor
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:
{ "mappings": { "dynamic": true, "fields": { "page_updated_by": { "fields": { "phone": { "analyzer": "phoneNumberExtractor", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "charFilters": [ { "mappings": { " ": "-", "(": "", ")": "", ".": "-" }, "type": "mapping" } ], "name": "phoneNumberExtractor", "tokenFilters": [], "tokenizer": { "group": 0, "pattern": "^\\b\\d{3}[-]?\\d{3}[-]?\\d{4}\\b$", "type": "regexCaptureGroup" } } ] }
A seguinte query pesquisa o campo page_updated_by.phone
na coleção minutes
para o número de telefone 123-456-9870
.
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "123-456-9870", 6 "path": "page_updated_by.phone" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.phone": 1 14 } 15 } 16 ])
{ _id: 3, page_updated_by: { phone: '(123).456.9870' }
O Atlas Search retorna o documento com _id: 3
nos resultados, pois o Atlas Search criou um token com o valor 123-456-7890
utilizando o token regexCaptureGroup
para os documentos, que corresponde ao termo de pesquisa. Se você indexar o campo page_updated_by.phone
usando o tokenizador standard
, o Atlas Search retornará todos os documentos do termo de pesquisa 123-456-7890
.
A tabela a seguir mostra os tokens que o tokenizador regexCaptureGroup
e, em comparação, o tokenizador standard
, criam para o documento com _id: 3
:
Tokenizador | Token Outputs |
---|---|
standard | 123 , 456.9870 |
regexCaptureGroup | 123-456-9870 |
regexSplit
O regexSplit
tokenizador divide tokens com um delimitador baseado em expressão regular.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível por humanos que identifica este tipo de tokenizador. O valor deve ser regexSplit . |
pattern | string | sim | Expressão regular para correspondência. |
Exemplo
A definição de índice a seguir indexa o field page_updated_by.phone
na collection minutes
usando um analyzer customizado chamado dashDotSpaceSplitter
. Ele usa o tokenizador regexSplit
para criar tokens (termos pesquisáveis) a partir de um ou mais hífens, pontos e espaços no campo page_updated_by.phone
.
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
dashDotSpaceSplitter
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione regexSplit no menu suspenso e digite o valor para o seguinte campo:
CampoValorpattern[-. ]+
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 personalizado no campo page_updated_by.phone.
Selecione page_updated_by.phone no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
dashDotSpaceSplitter
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:
{ "mappings": { "dynamic": true, "fields": { "page_updated_by": { "fields": { "phone": { "analyzer": "dashDotSpaceSplitter", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "charFilters": [], "name": "dashDotSpaceSplitter", "tokenFilters": [], "tokenizer": { "pattern": "[-. ]+", "type": "regexSplit" } } ] }
A seguinte query pesquisa o campo page_updated_by.phone
na coleção minutes
para os dígitos 9870
.
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "9870", 6 "path": "page_updated_by.phone" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.phone": 1 14 } 15 } 16 ])
{ _id: 3, page_updated_by: { phone: '(123).456.9870' }
O Atlas Search retorna o documento com _id: 3
nos resultados porque o Atlas Search criou um token com o valor 9870
usando o tokenizador regexSplit
para os documentos, que corresponde ao termo de pesquisa. Se você indexar o page_updated_by.phone
campo usando o standard
tokenizador, o Atlas Search não retornará nenhum resultado para o termo de pesquisa 9870
.
A tabela a seguir mostra os tokens que o tokenizador regexCaptureGroup
e, em comparação, o tokenizador standard
, criam para o documento com _id: 3
:
Tokenizador | Token Outputs |
---|---|
standard | 123 , 456.9870 |
regexSplit | (123) , 456 , 9870 |
padrão
O tokenizador standard
tokeniza com base nas regras de quebra de palavras do algoritmo de segmentação de texto Unicode.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível por humanos que identifica este tipo de tokenizador. O valor deve ser standard . |
maxTokenLength | inteiro | no | Comprimento máximo para um único token. Os tokens maiores que este comprimento são divididos em Padrão: |
Exemplo
A seguinte definição de índice indexa o campo message
na collection minutes
utilizando um analisador customizado denominado standardExample
. Ele usa o tokenizer standard
e o filtro de token stopword.
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
standardExample
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
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 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
standardExample
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:
{ "mappings": { "dynamic": true, "fields": { "message": { "analyzer": "standardExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "standardExample", "tokenFilters": [], "tokenizer": { "type": "standard" } } ] }
A query a seguir pesquisa o termo signature
no campo message
na coleção minutes
.
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "signature", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1 14 } 15 } 16 ])
{ _id: 4, message: 'write down your signature or phone №' }
O Atlas Search retorna o documento com _id: 4
porque o Atlas Search criou um token com o valor signature
utilizando o token standard
para os documentos, que corresponde ao termo de pesquisa. Se você indexar o campo message
usando o tokenizador keyword
, o Atlas Search não retornará nenhum resultado para o termo de pesquisa signature
.
A tabela a seguir mostra os tokens que o tokenizador standard
e, por comparação, o analisador keyword
, criam para o documento com _id: 4
:
Tokenizador | Token Outputs |
---|---|
standard | write , down , your , signature , or , phone |
keyword | write down your signature or phone № |
uaxUrlEmail
O uaxUrlEmail
tokenizer tokeniza URLs e endereços de e-mail. Embora uaxUrlEmail
o tokenizador tokenize com base nas regras de quebra de palavras do algoritmo de segmentação de texto Unicode, recomendamos usar o uaxUrlEmail
tokenizador somente quando o valor do campo indexado incluir URLe endereços de e-mail. Para campos que não incluem URLs ou endereços de e-mail, use o tokenizador padrão para criar tokens com base em regras de quebra de palavras.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível por humanos que identifica este tipo de tokenizador. O valor deve ser uaxUrlEmail . |
maxTokenLength | int | no | Número máximo de caracteres em um token. Padrão: |
Exemplo
A definição de índice a seguir indexa o field page_updated_by.email
na collection minutes
usando um analyzer customizado chamado basicEmailAddressAnalyzer
. Ele usa o tokenizador uaxUrlEmail
para criar tokens (termos pesquisáveis) a partir de URLse endereços de e-mail no campo page_updated_by.email
.
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
basicEmailAddressAnalyzer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione uaxUrlEmail no menu suspenso.
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 personalizado no campo page_updated_by.email.
Selecione page_updated_by.email do {0} menu suspenso Cadeia de caracteres do {1} menu suspenso.
Na seção de propriedades do tipo de dados, selecione
basicEmailAddressAnalyzer
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:
{ "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "basicEmailAddressAnalyzer", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "name": "basicEmailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] }
A query a seguir procura o campo page_updated_by.email
na collection minutes
para o email lewinsky@example.com
.
db.minutes.aggregate([ { "$search": { "text": { "query": "lewinsky@example.com", "path": "page_updated_by.email" } } }, { "$project": { "_id": 1, "page_updated_by.email": 1 } } ])
{ _id: 3, page_updated_by: { email: 'lewinsky@example.com' } }
O Atlas Search retorna o documento com _id: 3
nos resultados, pois o Atlas Search criou um token com o valor lewinsky@example.com
utilizando o tokenizador uaxUrlEmail
para os documentos, que corresponde ao termo de pesquisa. Se você indexar o campo page_updated_by.email
utilizando o tokenizador standard
, o Atlas Search retornará todos os documentos para o termo de pesquisa lewinsky@example.com
.
A tabela a seguir mostra os tokens que o tokenizador uaxUrlEmail
e, em comparação, o tokenizador standard
, criam para o documento com _id: 3
:
Tokenizador | Token Outputs |
---|---|
standard | lewinsky , example.com |
uaxUrlEmail | lewinsky@example.com |
A seguinte definição de índice indexa o campo page_updated_by.email
na coleção minutes
utilizando um analisador personalizado denominado emailAddressAnalyzer
. Ele usa:
O tipo autocomplete com uma estratégia de tokenização
edgeGram
O tokenizador
uaxUrlEmail
para criar tokens (termos pesquisáveis) a partir de URLse endereços de e-mail
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
emailAddressAnalyzer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione uaxUrlEmail no menu suspenso.
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 personalizado no campo page_updated_by.email.
Selecione page_updated_by.email no menu suspenso Field Name e Preenchimento automático no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
emailAddressAnalyzer
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:
{ "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "emailAddressAnalyzer", "tokenization": "edgeGram", "type": "autocomplete" } }, "type": "document" } } }, "analyzers": [ { "name": "emailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] }
A query a seguir pesquisa o termo exam
no campo page_updated_by.email
na coleção minutes
.
db.minutes.aggregate([ { "$search": { "autocomplete": { "query": "lewinsky@example.com", "path": "page_updated_by.email" } } }, { "$project": { "_id": 1, "page_updated_by.email": 1 } } ])
_id: 3, page_updated_by: { email: 'lewinsky@example.com' } }
O Atlas Search retorna o documento com _id: 3
nos resultados, pois o Atlas Search criou um token com o valor lewinsky@example.com
utilizando o tokenizador uaxUrlEmail
para os documentos, que corresponde ao termo de pesquisa. Se você indexar o campo page_updated_by.email
utilizando o tokenizador standard
, o Atlas Search retornará todos os documentos para o termo de pesquisa lewinsky@example.com
.
A tabela a seguir mostra os tokens que o tokenizador uaxUrlEmail
e, em comparação, o tokenizador standard
, criam para o documento com _id: 3
:
Tokenizador | Tipo de campo do Atlas Search | Token Outputs |
---|---|---|
standard | autocomplete edgeGram | le , lew , lewi , lewin , lewins , lewinsk , lewinsky , lewinsky@ , lewinsky , ex , exa , exam , examp , exampl , example , example. , example.c , example.co , example.com |
uaxUrlEmail | autocomplete edgeGram | le , lew , lewi , lewin , lewins , lewinsk , lewinsky , lewinsky@ , lewinsky@e , lewinsky@ex , lewinsky@exa , lewinsky@exam , lewinsky@examp , lewinsky@exampl |
whitespace
O tokenizador whitespace
tokeniza com base em ocorrências de espaços em branco entre as palavras.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível por humanos que identifica este tipo de tokenizador. O valor deve ser whitespace . |
maxTokenLength | inteiro | no | Comprimento máximo para um único token. Os tokens maiores que este comprimento são divididos em Padrão: |
Exemplo
A seguinte definição de índice indexa o campo message
na coleção minutes
utilizando um analisador personalizado denominado whitespaceExample
. Ele utiliza o token whitespace
para criar tokens (termos pesquisáveis) a partir de quaisquer espaços em branco no campo message
.
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
whitespaceExample
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione whitespace no menu suspenso.
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 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
whitespaceExample
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:
{ "mappings": { "dynamic": true, "fields": { "message": { "analyzer": "whitespaceExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "whitespaceExample", "tokenFilters": [], "tokenizer": { "type": "whitespace" } } ] }
A query a seguir pesquisa o termo SIGN-IN
no campo message
na coleção minutes
.
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "SIGN-IN", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1 14 } 15 } 16 ])
{ _id: 2, message: 'do not forget to SIGN-IN' }
O Atlas Search retorna o documento com _id: 2
nos resultados, pois o Atlas Search criou um token com o valor SIGN-IN
utilizando o token whitespace
para os documentos, que corresponde ao termo de pesquisa. Se você indexar o campo message
usando o tokenizer standard
, o Atlas Search retornará documentos com _id: 1
, _id: 2
e _id: 3
para o termo de pesquisa SIGN-IN
.
A tabela a seguir mostra os tokens que o tokenizador whitespace
e, em comparação, o tokenizador standard
, criam para o documento com _id: 2
:
Tokenizador | Token Outputs |
---|---|
standard | do , not , forget , to , sign , in |
whitespace | do , not , forget , to , SIGN-IN |