Filtros de caracteres
Nesta página
Os filtros de caracteres examinam o texto de um caractere de cada vez e executam operações de filtragem. Os filtros de caracteres exigem um campo de tipo, e alguns também aceitam opções adicionais.
"charFilters": [ { "type": "<filter-type>", "<additional-option>": <value> } ]
Atlas Search oferece suporte a quatro tipos de filtros de caracteres:
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 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 queries de amostra nessa 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 refine seu índice conforme mostrado nos exemplos desta página para adicionar analisadores personalizados que usam filtros de caracteres.
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.
|
htmlStrip
O filtro de caracteres htmlStrip
remove as construções HTML.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de caracteres. O valor deve ser htmlStrip . |
ignoredTags | array de strings | sim | Lista que contém as marcações HTML a serem excluídas da filtragem. |
Exemplo
O exemplo de definição de índice a seguir indexa o campo text.en_US
na collection de minutos usando um analisador personalizado chamado htmlStrippingAnalyzer
. O analisador personalizado especifica o seguinte:
Remova todas as marcações HTML do texto, exceto a marcação
a
, usando o filtro de caractereshtmlStrip
.Gere tokens com base em regras de quebra de palavras do algoritmo de segmentação de texto Unicode usando o tokenizador padrão.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
htmlStrippingAnalyzer
no campo Analyzer Name.Expanda Character Filters e clique em Add character filter.
Selecione htmlStrip no menu suspenso e digite
a
no campo ignoredTags.Clique em Add character filter.
Expanda Tokenizer se estiver recolhido e 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 customizado ao campo aninhado text.en_US.
Selecione o campo aninhado text.en_US no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
htmlStrippingAnalyzer
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:
1 { 2 "mappings": { 3 "fields": { 4 "text": { 5 "type": "document", 6 "dynamic": true, 7 "fields": { 8 "en_US": { 9 "analyzer": "htmlStrippingAnalyzer", 10 "type": "string" 11 } 12 } 13 } 14 } 15 }, 16 "analyzers": [{ 17 "name": "htmlStrippingAnalyzer", 18 "charFilters": [{ 19 "type": "htmlStrip", 20 "ignoredTags": ["a"] 21 }], 22 "tokenizer": { 23 "type": "standard" 24 }, 25 "tokenFilters": [] 26 }] 27 }
A query a seguir procura ocorrências da string head
no text.en_US
campo da minutes
collection .
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "head", 6 "path": "text.en_US" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "text.en_US": 1 14 } 15 } 16 ])
[ { _id: 2, text: { en_US: "The head of the sales department spoke first." } }, { _id: 3, text: { en_US: "<body>We'll head out to the conference room by noon.</body>" } } ]
Atlas Search não retorna o documento com _id: 1
porque a string head
faz parte da marcação HTML <head>
. O documento com _id: 3
contém tags HTML, mas a string head
está em outro lugar, então o documento é uma correspondência. A tabela a seguir mostra os tokens que o Atlas Search gera para os valores de campo text.en_US
nos documentos _id: 1
, _id: 2
e _id: 3
na collection minutos usando o htmlStrippingAnalyzer
.
ID do documento | Tokens de saída |
---|---|
_id: 1 | This , page , deals , with , department , meetings |
_id: 2 | The , head , of , the , sales , department , spoke , first |
_id: 3 | We'll , head , out , to , the , conference , room , by , noon |
icuNormalize
O filtro de caractere icuNormalize
normaliza o texto com o UTI Normalizer. É baseado no ICUNormalizer2CharFilter da Lucene.
Atributos
Tem o seguinte atributo:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de caracteres. O valor deve ser icuNormalize . |
Exemplo
O exemplo de definição de índice a seguir indexa o campo message
na collection de minutos usando um analisador personalizado chamado normalizingAnalyzer
. O analisador personalizado especifica o seguinte:
Normalize o texto no valor do campo
message
utilizando o filtro de caracteresicuNormalize
.Tokenize as palavras no campo com base em ocorrências de espaços em branco entre as palavras usando o tokenizador de espaço em branco .
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
normalizingAnalyzer
no campo Analyzer Name.Expanda Character Filters e clique em Add character filter.
Selecione icuNormalize no menu suspenso e clique em Add character filter.
Expanda Tokenizer se estiver recolhido e 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
normalizingAnalyzer
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:
1 { 2 "mappings": { 3 "fields": { 4 "message": { 5 "type": "string", 6 "analyzer": "normalizingAnalyzer" 7 } 8 } 9 }, 10 "analyzers": [ 11 { 12 "name": "normalizingAnalyzer", 13 "charFilters": [ 14 { 15 "type": "icuNormalize" 16 } 17 ], 18 "tokenizer": { 19 "type": "whitespace" 20 }, 21 "tokenFilters": [] 22 } 23 ] 24 }
A seguinte query pesquisar ocorrências da string no
(para número) no campo message
da collection minutes
.
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "no", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1, 14 "title": 1 15 } 16 } 17 ])
[ { _id: 4, title: 'The daily huddle on tHe StandUpApp2', message: 'write down your signature or phone №' } ]
O Atlas Search fez a correspondência entre o documento e o termo da query _id: 4
no
porque normalizou o símbolo de número №
no campo usando o filtro de caracteres icuNormalize
e criou o token no
para essa abreviação tipográfica da palavra "número ". Atlas Search gera os seguintes tokens para o valor de campo message
no documento _id: 4
usando o normalizingAnalyzer
:
ID do documento | Tokens de saída |
---|---|
_id: 4 | write , down , your , signature , or , phone , no |
mapeamento
O filtro de caracteres mapping
aplica mapeamentos de normalização especificados pelo usuário a caracteres. Ele é baseado no MappingCharFilter da Lucene.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de caracteres. O valor deve ser mapping . |
mappings | objeto | sim | objeto que contém uma lista de mapeamentos separados por vírgula. Um mapeamento indica que um caractere ou grupo de caracteres deve ser substituído por outro, no formato <original> : <replacement> . |
Exemplo
O exemplo de definição de índice a seguir indexa o campo page_updated_by.phone
na collection de minutos usando um analisador personalizado chamado mappingAnalyzer
. O analisador personalizado especifica o seguinte:
Remova instâncias de caracteres de hífen (
-
), ponto (.
), abrir parênteses ((
), fechar parênteses ()
) e espaços no campo de telefone usando o filtro de caracteresmapping
.Tokenize toda a entrada como um único token usando a palavra- chave tokenizer.
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
mappingAnalyzer
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-
.
(
)
{SPACE}Clique em Add character filter.
Expanda Tokenizer se estiver recolhido e 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 ao campo page_updated_by.phone (aninhado).
Selecione page_updated_by.phone (aninhado) no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
mappingAnalyzer
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:
1 { 2 "mappings": { 3 "fields": { 4 "page_updated_by": { 5 "fields": { 6 "phone": { 7 "analyzer": "mappingAnalyzer", 8 "type": "string" 9 } 10 }, 11 "type": "document" 12 } 13 } 14 }, 15 "analyzers": [ 16 { 17 "name": "mappingAnalyzer", 18 "charFilters": [ 19 { 20 "mappings": { 21 "-": "", 22 ".": "", 23 "(": "", 24 ")": "", 25 " ": "" 26 }, 27 "type": "mapping" 28 } 29 ], 30 "tokenizer": { 31 "type": "keyword" 32 } 33 } 34 ] 35 }
A query a seguir pesquisa o campo page_updated_by.phone
para a string 1234567890
.
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "1234567890", 6 "path": "page_updated_by.phone" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.phone": 1, 14 "page_updated_by.last_name": 1 15 } 16 } 17 ])
[ { _id: 1, page_updated_by: { last_name: 'AUERBACH', phone: '(123)-456-7890' } } ]
Os resultados do Atlas Search contêm um documento onde os números na string phone
correspondem à string da query. O Atlas Search correspondeu o documento à query, embora a query não inclua os parênteses em torno do código de área do telefone e o hífen entre os números porque o Atlas Search removeu esses caracteres usando o filtro de caracteres mapping
e criou um único token para o valor do campo. Especificamente, o Atlas Search gerou o seguinte token para o campo phone
no documento com _id: 1
:
ID do documento | Tokens de saída |
---|---|
_id: 1 | 1234567890 |
O Atlas Search também corresponderia o documento com _id: 1
para pesquisar de (123)-456-7890
, 123-456-7890
, 123.456.7890
e assim por diante porque, para os campo Como Indexar Cadeia de Caracteres , o Atlas Search também analisa query de pesquisa usando o analisador de índice (ou se especificado, usando o searchAnalyzer
). A tabela a seguir mostra os tokens que o Atlas Search cria removendo instâncias de caracteres de hífen (-
), ponto (.
), abrir parênteses ((
), fechar parênteses ( )
) e espaços no termo query:
Termo de query | Tokens de saída |
---|---|
(123)-456-7890 | 1234567890 |
123-456-7890 | 1234567890 |
123.456.7890 | 1234567890 |
Dica
Consulte também: Exemplos adicionais de definições e query de índice
Filtro de token telha
regexCaptureGroup tokenizador
Persa
O persian
filtro de caracteres substitui instâncias de caracteres não-joiner de largura zero com o caractere de espaço. Este filtro de caracteres é baseado no PersianCharFilter do Lucene.
Atributos
Tem o seguinte atributo:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
type | string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de caracteres. O valor deve ser persian . |
Exemplo
O exemplo de definição de índice a seguir indexa o campo text.fa_IR
na collection de minutos usando um analisador personalizado chamado persianCharacterIndex
. O analisador personalizado especifica o seguinte:
Aplique o filtro de caracteres
persian
para substituir caracteres não imprimíveis no valor do campo pelo caractere de espaço.Use o tokenizador de espaço em branco para criar tokens com base em ocorrências de espaço em branco entre as palavras.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
persianCharacterIndex
no campo Analyzer Name.Expanda Character Filters e clique em Add character filter.
Selecione persian no menu suspenso e clique em Add character filter.
Expanda Tokenizer se estiver recolhido e 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 customizado ao campo aninhado text.fa_IR campo (aninhado).
Selecione text.fa_IR (aninhado) no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
persianCharacterIndex
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:
1 { 2 "analyzer": "lucene.standard", 3 "mappings": { 4 "fields": { 5 "text": { 6 "dynamic": true, 7 "fields": { 8 "fa_IR": { 9 "analyzer": "persianCharacterIndex", 10 "type": "string" 11 } 12 }, 13 "type": "document" 14 } 15 } 16 }, 17 "analyzers": [ 18 { 19 "name": "persianCharacterIndex", 20 "charFilters": [ 21 { 22 "type": "persian" 23 } 24 ], 25 "tokenizer": { 26 "type": "whitespace" 27 } 28 } 29 ] 30 }
A query a seguir pesquisa o campo text.fa_IR
para o termo صحبت
.
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "صحبت", 6 "path": "text.fa_IR" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "text.fa_IR": 1, 14 "page_updated_by.last_name": 1 15 } 16 } 17 ])
[ { _id: 2, page_updated_by: { last_name: 'OHRBACH' }, text: { fa_IR: 'ابتدا رئیس بخش فروش صحبت کرد' } } ]
O Atlas Search retorna o documento _id: 2
que contém o termo da query. Atlas Search corresponde o termo da query ao documento substituindo primeiro as instâncias de não-coletores de largura zero pelo caractere de espaço e, em seguida, criando tokens individuais para cada palavra no valor do campo com base nas ocorrências de espaços em branco entre as palavras. Especificamente, o Atlas Search gera os seguintes tokens para documento com _id: 2
:
ID do documento | Tokens de saída |
---|---|
_id: 2 | ابتدا , رئیس , بخش , فروش , صحبت , کرد |