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

Filtros de caracteres

Nesta página

  • htmlStrip
  • Atributos
  • Exemplo
  • icuNormalize
  • Atributos
  • Exemplo
  • mapeamento
  • Atributos
  • Exemplo
  • Persa
  • Atributos
  • Exemplo

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:

  • htmlStrip

  • icuNormalize

  • mapeamento

  • Persa

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.

  • Clique em para editar o analisador customizado.

  • Clique para excluir o analisador customizado.

O filtro de caracteres htmlStrip remove as construções HTML.

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.

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:

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

  7. Expanda Tokenizer se estiver recolhido e selecione standard no menu suspenso.

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

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

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

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

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

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

O filtro de caractere icuNormalize normaliza o texto com o UTI Normalizer. É baseado no ICUNormalizer2CharFilter da Lucene.

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.

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 caracteres icuNormalize .

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

  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 normalizingAnalyzer no campo Analyzer Name.

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

  5. Selecione icuNormalize no menu suspenso e clique em Add character filter.

  6. Expanda Tokenizer se estiver recolhido e selecione whitespace no menu suspenso.

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

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

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

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

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

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

O filtro de caracteres mapping aplica mapeamentos de normalização especificados pelo usuário a caracteres. Ele é baseado no MappingCharFilter da Lucene.

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

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 caracteres mapping .

  • Tokenize toda a entrada como um único token usando a palavra- chave tokenizer.

  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 mappingAnalyzer 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 os seguintes caracteres no campo Original, um de cada vez e deixe o campo Replacement correspondente vazio.

    Original
    Substituição
    -
    .
    (
    )
    {SPACE}
  7. Clique em Add character filter.

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

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

  10. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado ao campo page_updated_by.phone (aninhado).

  11. Selecione page_updated_by.phone (aninhado) no menu suspenso Field Name e String no menu suspenso Data Type.

  12. Na seção de propriedades do tipo de dados, selecione mappingAnalyzer 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:

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.

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

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.

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.

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.

  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 persianCharacterIndex no campo Analyzer Name.

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

  5. Selecione persian no menu suspenso e clique em Add character filter.

  6. Expanda Tokenizer se estiver recolhido e selecione whitespace no menu suspenso.

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

  8. Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.fa_IR campo (aninhado).

  9. Selecione text.fa_IR (aninhado) no menu suspenso Field Name e String no menu suspenso Data Type.

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

  11. 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 صحبت.

1db.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
ابتدا, رئیس, بخش, فروش, صحبت, کرد

Voltar

Personalizado