Menu Docs
Página inicial do Docs
/
MongoDB Atlas
/ / / / /

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 customizado.

Ações

Ícones clicáveis que indicam as ações que você pode executar no analisador customizado.

  • Clique em para editar o analisador customizado.

  • Clique para excluir o analisador customizado.

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 para os ASCII equivalentes, se disponíveis.

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:

  • include - inclua os tokens originais com os tokens convertidos na saída do filtro de token. Recomendamos este valor se você quiser oferecer suporte a queries nos tokens originais, bem como nos formulários convertidos.

  • omit - omitir os tokens originais e incluir somente os tokens convertidos na saída do filtro de token. Use este valor se quiser consultar somente os formulários convertidos dos tokens originais.

Padrão: omit

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:

  1. Aplique o tokenizador padrão para criar tokens com base em regras de quebra de palavras.

  2. Aplique o filtro de token asciiFolding para converter os valores de campo em seu equivalente ASCII.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite asciiConverter no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione standard no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione asciiFolding no menu suspenso.

  8. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  9. Clique em Add para criar o analisador customizado.

  10. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo page_updated_by.first_name.

  11. Selecione page_updated_by.first_name no menu suspenso Field Name e String no menu suspenso Data Type.

  12. Na seção de propriedades do tipo de dados, selecione asciiConverter nos menus suspensos Index Analyzer e Search Analyzer.

  13. 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

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:

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:

  • include - inclua os tokens originais com os tokens codificados na saída do filtro de token. Recomendamos esse valor se você quiser queries nos tokens originais, bem como nos formulários codificados.

  • omit - omitir os tokens originais e incluir somente os tokens codificados na saída do filtro de token. Utilize este valor se quiser executar query apenas das formas codificadas dos tokens originais.

Padrão: include

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:

  1. Aplique o tokenizador padrão para criar tokens com base em regras de quebra de palavras.

  2. Aplique o filtro de token daitchMokotoffSoundex para codificar os tokens para palavras que soam as mesmas.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite dmsAnalyzer no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione standard no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione daitchMokotoffSoundex no menu suspenso e selecione o valor mostrado na tabela a seguir para o campo originalTokens:

    Campo
    Valor

    originalTokens

    include

  8. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  9. Clique em Add para criar o analisador customizado.

  10. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo page_updated_by.last_name.

  11. Selecione page_updated_by.last_name no menu suspenso Field Name e String no menu suspenso Data Type .

  12. Na seção de propriedades do tipo de dados, selecione dmsAnalyzer nos menus suspensos Index Analyzer e Search Analyzer.

  13. 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

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.

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 minGram ou maiores que maxGram. Os valores aceitos são:

  • include

  • omit

Se include for especificado, tokens menores minGram ou maiores que maxGram são indexados como estão. Se omit for especificado, estes tokens não serão indexados.

Padrão: omit

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:

  1. Aplique o tokenizador padrão para criar tokens com base em regras de quebra de palavras.

  2. 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.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite titleAutocomplete no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione standard no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione icuFolding no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.

  8. Clique em Add token filter para adicionar outro filtro de token.

  9. Selecione edgeGram no menu suspenso e digite o valor mostrado na tabela a seguir para os campos:

    Campo
    Valor

    minGram

    4

    maxGram

    7

  10. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  11. Clique em Add para criar o analisador customizado.

  12. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo título.

  13. Selecione título no menu suspenso Field Name e Cadeia de caracteres no menu suspenso Data Type.

  14. Na seção de propriedades do tipo de dados, selecione titleAutocomplete nos menus suspensos Index Analyzer e Search Analyzer.

  15. 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

O filtro de token englishPossessive remove a apóstrofe possessiva ('s extras) das palavras.

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.

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:

  1. Aplique o tokenizador padrão para criar tokens (termos de pesquisa) com base nas regras de quebra de palavras.

  2. Aplique o filtro de token EnglishPossessive para remover possessivos ( 's à direita) dos tokens.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite englishPossessiveStemmer no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione standard no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione englishPossessive no menu suspenso.

  8. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  9. Clique em Add para criar o analisador customizado.

  10. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo título.

  11. Selecione título no menu suspenso Field Name e Cadeia de caracteres no menu suspenso Data Type.

  12. Na seção de propriedades do tipo de dados, selecione englishPossessiveStemmer nos menus suspensos Index Analyzer e Search Analyzer.

  13. 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

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.

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.

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:

  1. Aplique o token whitespace para criar tokens com base em ocorrências de whitespace entre palavras.

  2. 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.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite wordDelimiterGraphFlatten no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione whitespace no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione wordDelimiterGraph no menu suspenso e configure os campos a seguir do filtro de token.

    1. Selecione os seguintes campos:

      Campo
      Valor

      delimiterOptions.generateWordParts

      true

      delimiterOptions.preserveOriginal

      true

    2. Digite SIGN_IN no campo protectedWords.words.

    3. Selecione protectedWords.ignoreCase.

  8. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  9. Clique em Add token filter para adicionar outro filtro de token.

  10. Selecione flattenGraph no menu suspenso.

  11. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  12. Clique em Add para criar o analisador customizado.

  13. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo mensagem.

  14. Selecione a mensagem na lista suspensa Field Name e Cadeia de caracteres na lista suspensa Data Type .

  15. Na seção de propriedades do tipo de dados, selecione wordDelimiterGraphFlatten nos menus suspensos Index Analyzer e Search Analyzer.

  16. 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

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.

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.

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:

  1. Aplique o tokenizador de palavra-chave para tokenizar todos os termos no campo de string como um termo único.

  2. 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.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite diacriticFolder no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione keyword no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione icuFolding no menu suspenso.

  8. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  9. Clique em Add para criar o analisador customizado.

  10. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.sv_FI.

  11. Selecione o campo aninhado text.sv_FI no menu suspenso Field Name e String no menu suspenso Data Type.

  12. Na seção de propriedades do tipo de dados, selecione diacriticFolder nos menus suspensos Index Analyzer e Search Analyzer.

  13. 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

O filtro de token icuNormalizer normaliza os tokens usando um modo de normalização unicode padrão.

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:

  • nfd (Descomposição canônica)

  • nfc (Decomposição canônica, seguida por composição canônica)

  • nfkd (Decomposição de compatibilidade)

  • nfkc (Decomposição de compatibilidade, seguida pela composição canônica)

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: nfc

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:

  1. Use o tokenizador de espaço em branco para criar tokens com base em ocorrências de espaço em branco entre as palavras.

  2. Use o filtro de token icuNormalizer para normalizar tokens por decomposição de compatibilidade, seguido por composição canônica.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite textNormalizer no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione whitespace no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione icuNormalizer no menu suspenso e selecione nfkc no menu suspenso normalizationForm.

  8. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  9. Clique em Add para criar o analisador customizado.

  10. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo mensagem.

  11. Selecione a mensagem na lista suspensa Field Name e Cadeia de caracteres na lista suspensa Data Type .

  12. Na seção de propriedades do tipo de dados, selecione textNormalizer nos menus suspensos Index Analyzer e Search Analyzer.

  13. 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.

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.

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.

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:

  1. Aplique o tokenizer padrão para criar tokens com base em regras de quebra de palavras.

  2. Aplique os seguintes filtros nos tokens:

    • Filtro de token lowercase para converter os tokens em minúsculas.

    • Filtro de token kStemming para derivar palavras usando uma combinação de derivação algorítmica e um dicionário integrado para o idioma inglês.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite kStemmer no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione standard no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.

  8. Clique em Add token filter para adicionar outro filtro de token.

  9. Selecione kStemming no menu suspenso.

  10. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  11. Clique em Add para criar o analisador customizado.

  12. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.en_US.

  13. Selecione o campo aninhado text.en_US no menu suspenso Field Name e String no menu suspenso Data Type.

  14. Na seção de propriedades do tipo de dados, selecione kStemmer nos menus suspensos Index Analyzer e Search Analyzer.

  15. 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

O filtro de token length remove tokens muito curtos ou muito longos.

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 max.

Padrão: 0

max

inteiro

no

Número que especifica o comprimento máximo de um token. O valor deve ser maior ou igual a min.

Padrão: 255

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:

  1. Use o tokenizador padrão para criar tokens com base em regras de quebra de palavras.

  2. 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.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite longOnly no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione standard no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione icuFolding no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.

  8. Clique em Add token filter para adicionar outro filtro de token.

  9. Selecione length no menu suspenso e configure o seguinte campo para o filtro de token:

    Campo
    Valor

    min

    20

  10. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  11. Clique em Add para criar o analisador customizado.

  12. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.sv.FI.

  13. Selecione text.sv.FI aninhado no menu suspenso Field Name e String no menu suspenso Data Type.

  14. Na seção de propriedades do tipo de dados, selecione longOnly nos menus suspensos Index Analyzer e Search Analyzer.

  15. 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.

O filtro de token do lowercase normaliza o texto de token para minúsculas.

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.

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:

  1. Aplique o tokenizador de palavra-chave para criar um único token para uma string ou array de strings.

  2. Aplique o filtro de token lowercase para converter texto de token em minúsculas.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Escolha o botão de opção Create Your Own e clique em Next.

  3. Digite keywordLowerer no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido e selecione keyword no menu suspenso.

  5. Expanda Token Filters e clique em Add token filter.

  6. Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.

  7. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo título.

  8. Selecione título no menu suspenso Field Name e Preenchimento automático no menu suspenso Data Type.

  9. Na seção de propriedades do tipo de dados, selecione os seguintes valores na lista suspensa da propriedade:

    Nome da propriedade
    Valor

    Analyzer

    keywordLowerer

    Tokenization

    nGram

  10. 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:

  1. Aplique o tokenizador padrão para criar tokens com base em regras de quebra de palavras.

  2. 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.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite lowerCaser no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione standard no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione icuNormalizer no menu suspenso e selecione nfkd no menu suspenso normalizationForm.

  8. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  9. Clique em Add token filter para adicionar outro filtro de token.

  10. Selecione lowercase no menu suspenso.

  11. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  12. Clique em Add para criar o analisador customizado.

  13. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo mensagem.

  14. Selecione a mensagem na lista suspensa Field Name e Cadeia de caracteres na lista suspensa Data Type .

  15. Na seção de propriedades do tipo de dados, selecione lowerCaser nos menus suspensos Index Analyzer e Search Analyzer.

  16. 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

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.

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 minGram ou maiores que maxGram. Os valores aceitos são:

  • include

  • omit

Se include for especificado, tokens menores minGram ou maiores que maxGram são indexados como estão. Se omit for especificado, estes tokens não serão indexados.

Padrão: omit

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:

  1. Aplique o tokenizador padrão para criar tokens com base nas regras de quebra de palavras.

  2. 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.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite titleAutocomplete no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione standard no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione englishPossessive no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.

  8. Clique em Add token filter para adicionar outro filtro de token.

  9. Selecione nGram no menu suspenso e configure os seguintes campos para o filtro de token:

    Campo
    Valor

    minGram

    4

    maxGram

    7

  10. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  11. Clique em Add para criar o analisador customizado.

  12. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo título.

  13. Selecione título no menu suspenso Field Name e Cadeia de caracteres no menu suspenso Data Type.

  14. Na seção de propriedades do tipo de dados, selecione titleAutocomplete nos menus suspensos Index Analyzer e Search Analyzer.

  15. 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.

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.

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.

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:

  1. Aplique o tokenizer padrão para criar tokens com base em regras de quebra de palavras.

  2. 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.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite porterStemmer no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione standard no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.

  8. Clique em Add token filter para adicionar outro filtro de token.

  9. Selecione porterStemming no menu suspenso.

  10. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  11. Clique em Add para criar o analisador customizado.

  12. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo título.

  13. Selecione título no menu suspenso Field Name e Cadeia de caracteres no menu suspenso Data Type.

  14. Na seção de propriedades do tipo de dados, selecione porterStemmer nos menus suspensos Index Analyzer e Search Analyzer.

  15. 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

O filtro de token do regex aplica uma expressão regular para cada token, substituindo as correspondências por uma string especificada.

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 ("") para ignorar ou excluir um token, o Atlas Search criará um token com uma string vazia. Para excluir tokens com strings vazias, use o filtro de token de palavra de parada após o regex filtro de token. Por exemplo:

"analyzers": [
{
"name": "custom.analyzer.name",
"charFilters": [],
"tokenizer": {
"type": "whitespace"
},
"tokenFilters": [
{
"matches": "all",
"pattern": "^(?!\\$)\\w+",
"replacement": "",
"type": "regex"
},
{
"type": "stopword",
"tokens": [""]
}
]
}
]

matches

string

sim

Os valores aceitáveis são:

  • all

  • first

Se matches estiver configurado para all, substitua todos os padrões correspondentes. Caso contrário, substitua apenas o primeiro padrão correspondente.

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:

  1. Aplique o tokenizador de palavra-chave para indexar todas as palavras no valor do campo como um único termo.

  2. 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 palavra redacted.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite emailRedact no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione keyword no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.

  8. Clique em Add token filter para adicionar outro filtro de token.

  9. Selecione regex no menu suspenso e configure o seguinte para o filtro de token:

    1. Digite ^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,5})$ no campo pattern.

    2. Digite redacted no campo replacement.

    3. Selecione all no menu suspenso matches.

  10. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  11. Clique em Add para criar o analisador customizado.

  12. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado page_updated_by.email.

  13. Selecione page_updated_by.email aninhado no menu suspenso Field Name e String no menu suspenso Data Type.

  14. Na seção de propriedades do tipo de dados, selecione emailRedact nos menus suspensos Index Analyzer e Search Analyzer.

  15. 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.

1db.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.

O filtro de token reverse inverte cada token de string.

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.

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.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite keywordReverse no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione keyword no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione reverse no menu suspenso.

  8. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  9. Clique em Add para criar o analisador customizado.

  10. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado page_updated_by.email.

  11. Selecione page_updated_by.email aninhado no menu suspenso Field Name e String no menu suspenso Data Type.

  12. Na seção de propriedades do tipo de dados, selecione keywordReverse nos menus suspensos Index Analyzer e Search Analyzer.

  13. 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

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.

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.

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 por AT

  • 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:

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite emailAutocompleteIndex no campo Analyzer Name.

  4. Expanda Character Filters e clique em Add character filter.

  5. Selecione mapping no menu suspenso e clique em Add mapping.

  6. Insira a seguinte chave e valor:

    Chave
    Valor

    @

    AT

  7. Clique em Add character filter para adicionar o filtro de caracteres ao seu analisador customizado.

  8. Expanda Tokenizer se estiver recolhido.

  9. Selecione whitespace no menu suspenso e digite 15 no campo maxTokenLength.

  10. Expanda Token Filters e clique em Add token filter.

  11. Selecione shingle no menu suspenso e configure os seguintes campos.

    Campo
    Valor do campo

    minShingleSize

    2

    minShingleSize

    3

  12. Clique em Add token filter para adicionar outro filtro de token.

  13. Clique em Add token filter para adicionar outro filtro de token.

  14. Selecione edgeGram no menu suspenso e configure os seguintes campos para o filtro de token:

    Campo
    Valor do campo

    minGram

    2

    maxGram

    15

  15. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  16. Clique em Add para adicionar o analisador personalizado ao seu índice.

  17. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  18. Selecione o botão de opção Create Your Own e clique em Next.

  19. Digite emailAutocompleteSearch no campo Analyzer Name.

  20. Expanda Character Filters e clique em Add character filter.

  21. Selecione mapping no menu suspenso e clique em Add mapping.

  22. Insira a seguinte chave e valor:

    Chave
    Valor

    @

    AT

  23. Clique em Add character filter para adicionar o filtro de caracteres ao seu analisador customizado.

  24. Expanda Tokenizer se estiver recolhido.

  25. Selecione whitespace no menu suspenso e digite 15 no campo maxTokenLength.

  26. Clique em Add para adicionar o analisador personalizado ao seu índice.

  27. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado page_updated_by.email.

  28. Selecione page_updated_by.email aninhado no menu suspenso Field Name e String no menu suspenso Data Type.

  29. Na seção de propriedades do tipo de dados, selecione emailAutocompleteIndex no menu suspenso Index Analyzer e emailAutocompleteSearch no menu suspenso Search Analyzer.

  30. 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

O token snowballStemming filtra tokens Stems usando um derivador gerado pelo Snowball.

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:

  • arabic

  • armenian

  • basque

  • catalan

  • danish

  • dutch

  • english

  • estonian

  • finnish

  • french

  • german

  • german2 (Stemmer de idioma alemão alternativo. Gerencia o trema expandindo ü para ue na maioria dos contextos.)

  • hungarian

  • irish

  • italian

  • kp (Stemmer Kraaij-Pohlmann, um stemmer alternativo para alemão.)

  • lithuanian

  • lovins (O primeiro algoritmo de derivação "Lovins JB" publicado.)

  • norwegian

  • porter (O algoritmo de derivação original de Porter English.)

  • portuguese

  • romanian

  • russian

  • spanish

  • swedish

  • turkish

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:

  1. Aplique o tokenizer padrão para criar tokens com base em regras de quebra de palavras.

  2. Aplique os seguintes filtros de token nos tokens:

    • Filtro de token lowercase para converter os tokens em minúsculas.

    • french variante do filtro de token snowballStemming para palavras radicais.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite frenchStemmer no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione standard no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.

  8. Clique em Add token filter para adicionar outro filtro de token.

  9. Selecione snowballStemming no menu suspenso e selecione french no menu suspenso stemmerName.

  10. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  11. Clique em Add para criar o analisador customizado.

  12. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.fr_CA.

  13. Selecione o campo aninhado text.fr_CA no menu suspenso Field Name e String no menu suspenso Data Type.

  14. Na seção de propriedades do tipo de dados, selecione frenchStemmer nos menus suspensos Index Analyzer e Search Analyzer.

  15. 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

O filtro de token spanishPluralStemming origina palavras no plural em espanhol. Ele espera texto em minúsculas.

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.

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:

  1. Aplique o tokenizer padrão para criar tokens com base em regras de quebra de palavras.

  2. 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.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite spanishPluralStemmer no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione standard no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.

  8. Clique em Add token filter para adicionar outro filtro de token.

  9. Selecione spanishPluralStemming no menu suspenso.

  10. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  11. Clique em Add para criar o analisador customizado.

  12. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.es_MX.

  13. Selecione text.es_MX no menu suspenso Field Name e String no menu suspenso Data Type.

  14. Na seção de propriedades do tipo de dados, selecione spanishPluralStemmer nos menus suspensos Index Analyzer e Search Analyzer.

  15. 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

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.

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.

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:

  1. Aplique o tokenizer padrão para criar tokens com base em regras de quebra de palavras.

  2. 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.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite stempelStemmer no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione standard no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.

  8. Clique em Add token filter para adicionar outro filtro de token.

  9. Selecione stempel no menu suspenso.

  10. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  11. Clique em Add para criar o analisador customizado.

  12. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.pl_PL.

  13. Selecione o campo aninhado text.pl_PL no menu suspenso Field Name e String no menu suspenso Data Type.

  14. Na seção de propriedades do tipo de dados, selecione stempelStemmer nos menus suspensos Index Analyzer e Search Analyzer.

  15. 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

O filtro de tokens stopword remove tokens que correspondem às palavras vazias especificadas. Este filtro de tokens não analisa as palavras vazias especificadas.

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:

  • true - ignorar capitalização e remover todos os tokens que correspondam às palavras vazias especificadas

  • false - distinguir maiúsculas e minúsculas e remover apenas tokens que correspondam exatamente à capitalização especificada

Padrão: true

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:

  1. Aplicar o tokenizador de espaço em branco para criar tokens com base nas ocorrências de espaço em branco entre palavras.

  2. Aplicar o filtro de tokens stopword para remover os tokens que correspondam às palavras vazias definidas is, the e at. O filtro de tokens não diferencia maiúsculas de minúsculas e removerá todos os tokens que correspondam às palavras vazias especificadas.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite stopwordRemover no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione whitespace no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione stopword no menu suspenso e digite o seguinte no campo tokens:

    is, the , at

  8. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  9. Clique em Add para criar o analisador customizado.

  10. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.en_US.

  11. Selecione o campo aninhado text.en_US no menu suspenso Field Name e String no menu suspenso Data Type.

  12. Na seção de propriedades do tipo de dados, selecione stopwordRemover nos menus suspensos Index Analyzer e Search Analyzer.

  13. 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 .

1db.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.

O filtro de token trim corta o espaço em branco à esquerda e à direita dos tokens.

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.

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.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite tokenTrimmer no campo Analyzer Name.

  4. Expanda Character Filters e clique em Add character filter.

  5. Selecione htmlStrip no menu suspenso e digite a no campo ignoredTags.

  6. Clique em Add character filter para adicionar o filtro de caracteres ao seu analisador customizado.

  7. Expanda Tokenizer se estiver recolhido.

  8. Selecione keyword no menu suspenso.

  9. Expanda Token Filters e clique em Add token filter.

  10. Selecione trim no menu suspenso.

  11. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  12. Clique em Add para adicionar o analisador personalizado ao seu índice.

  13. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.en_US.

  14. Selecione o campo aninhado text.en_US no menu suspenso Field Name e String no menu suspenso Data Type.

  15. Na seção de propriedades do tipo de dados, selecione tokenTrimmer nos menus suspensos Index Analyzer e Search Analyzer.

  16. 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 .

1db.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.

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.

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 true, esta opção divide PowerShot em Power e Shot.

Padrão: true

delimiterOptions
.generateNumberParts

booleano

no

Sinalizador que indica se os tokens devem ser divididos com base em subnúmeros. Por exemplo, se true, essa opção divide 100-2 em 100 e 2.

Padrão: true

delimiterOptions
.concatenateWords

booleano

no

Sinalizador que indica se deve concatenar execuções de subpalavras. Por exemplo, se true, esta opção concatenará wi-fi em wifi.

Padrão: false

delimiterOptions
.concatenateNumbers

booleano

no

Sinalizador que indica se as execuções de subnúmeros devem ser concatenadas. Por exemplo, se true, esta opção concatenará 100-2 em 1002.

Padrão: false

delimiterOptions
.concatenateAll

booleano

no

Sinalizador que indica se todas as execuções devem ser concatenadas. Por exemplo, se true, esta opção concatenará wi-fi-100-2 em wifi1002.

Padrão: false

delimiterOptions
.preserveOriginal

booleano

no

Sinalizador que indica se deve-se gerar tokens das palavras originais.

Padrão: true

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 true, esta opção divide camelCase em camel e Case.

Padrão: true

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 true, esta opção divide g2g em g, 2 e g.

Padrão: true

delimiterOptions
.stemEnglishPossessive

booleano

no

Sinalizador que indica se os possessivos finais de cada subpalavra devem ser removidos. Por exemplo, se true, essa opção altera who's para who.

Padrão: true

delimiterOptions
.ignoreKeywords

booleano

no

Sinalizador que indica se você deve ignorar tokens com o atributo keyword definido como true.

Padrão: false

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: true

Se true, aplique o filtro de token flattenGraph após essa opção para tornar o fluxo de token adequado para indexação.

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:

  1. Aplique o token whitespace para criar tokens com base em ocorrências de whitespace entre palavras.

  2. Aplicar o filtro de tokens wordDelimiterGraph para o seguinte:

    • Não tente dividir is, the e at. A exclusão diferencia maiúsculas de minúsculas. Por exemplo, Is e tHe 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.

  1. Na seção Custom Analyzers, clique em Add Custom Analyzer.

  2. Selecione o botão de opção Create Your Own e clique em Next.

  3. Digite wordDelimiterGraphAnalyzer no campo Analyzer Name.

  4. Expanda Tokenizer se estiver recolhido.

  5. Selecione whitespace no menu suspenso.

  6. Expanda Token Filters e clique em Add token filter.

  7. Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.

  8. Clique em Add token filter para adicionar outro filtro de token.

  9. Selecione wordDelimiterGraph no menu suspenso e configure os seguintes campos:

    1. Desmarque delimiterOptions.generateWordParts e selecione delimiterOptions.splitOnCaseChange.

    2. Digite e selecione no menu suspenso as palavras is, the e at, uma de cada vez, no campo protectedWords.words.

    3. Desmarque protectedWords.ignoreCase.

  10. Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.

  11. Clique em Add para criar o analisador customizado.

  12. Na seção Field Mappings , clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado title .

  13. Selecione title aninhado no menu suspenso Field Name e String no menu suspenso Data Type.

  14. Na seção de propriedades do tipo de dados, selecione wordDelimiterGraphAnalyzer nos menus suspensos Index Analyzer e Search Analyzer.

  15. 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

Voltar

Tokenizadores