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

Filtros de token

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 exigem um campo de tipo e alguns também aceitam opções adicionais.

Sintaxe
"tokenFilters": [
{
"type": "<token-filter-type>",
"<additional-option>": <value>
}
]

A Pesquisa MongoDB suporta os seguintes tipos de filtro de token:

  • asciiFolding

  • daitchMokotoffSoundex

  • edgeGram

  • englishPossessive

  • flattenGraph

  • Dobramento de UTI

  • icuNormalizer

  • kStemming

  • Tamanho

  • minúsculas

  • regex

  • reverter

  • shingle

  • snowballStemming

  • spanishPluralStemming

  • stempel

  • stopword

  • cortar

  • wordDelimiterGraph

Os exemplos de definições e consultas de índice a seguir usam a coleção de amostras minutes chamada. Para acompanhar esses exemplos, carregue a minutes coleção no cluster e navegue até a Create a Search Index página na interface do usuário do Atlas seguindo as etapas do tutorial Criar um índice de pesquisa do MongoDB . Em seguida, selecione a minutes collection como sua fonte de dados e siga o procedimento de exemplo para criar um índice a partir da UI do Atlas ou mongosh usando.


➤ Use o menu suspenso Selecione a linguagem para definir a linguagem do exemplo nesta página.


O filtro de token asciiFolding 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"
}
]
}
]
}
1db.minutes.createSearchIndex(
2 "default",
3 {
4 "mappings": {
5 "dynamic": false,
6 "fields": {
7 "page_updated_by": {
8 "type": "document",
9 "dynamic": false,
10 "fields": {
11 "first_name": {
12 "type": "string",
13 "analyzer": "asciiConverter"
14 }
15 }
16 }
17 }
18 },
19 "analyzers": [
20 {
21 "name": "asciiConverter",
22 "tokenizer": {
23 "type": "standard"
24 },
25 "tokenFilters": [
26 {
27 "type": "asciiFolding"
28 }
29 ]
30 }
31 ]
32 }
33)

A seguinte query pesquisa o campo first_name na coleção minutos para nomes utilizando seu equivalente ASCII.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

{
"$search": {
"index": "default",
"text": {
"query": "Sian",
"path": "page_updated_by.first_name"
}
}
}
SCORE: 0.5472603440284729 _id: "1"
message: "try to siGn-In"
page_updated_by: Object
last_name: "AUERBACH"
first_name: "Siân"
email: "auerbach@example.com"
phone: "(123)-456-7890"
text: Object
en_US: "<head> This page deals with department meetings.</head>"
sv_FI: "Cette page traite des réunions de département"
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 MongoDB Search retorna documento com _id: 1 nos resultados porque o MongoDB Search criou os seguintes tokens (termos pesquisáveis) para o campo page_updated_by.first_name no documento, que então foi usado para corresponder ao termo de query Sian:

Nome do campo
Tokens de saída

page_updated_by.first_name

Sian

O filtro de token do daitchMokotoffSoundex cria tokens para palavras que soam iguais baseado no algoritmo fonético Daitch-Mokotoff Soundex. O filtro pode gerar várias codificações para cada entrada, onde cada token codificado é um número de 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"
}
]
}
]
}
1db.minutes.createSearchIndex(
2 "default",
3 {
4 "mappings": {
5 "dynamic": false,
6 "fields": {
7 "page_updated_by": {
8 "type": "document",
9 "dynamic": false,
10 "fields": {
11 "last_name": {
12 "type": "string",
13 "analyzer": "dmsAnalyzer"
14 }
15 }
16 }
17 }
18 },
19 "analyzers": [
20 {
21 "name": "dmsAnalyzer",
22 "tokenizer": {
23 "type": "standard"
24 },
25 "tokenFilters": [
26 {
27 "type": "daitchMokotoffSoundex",
28 "originalTokens": "include"
29 }
30 ]
31 }
32 ]
33 }
34)

A query abaixo busca termos que soam semelhantes a AUERBACH no campo page_updated_by.last_name da collection de minutos.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

{
"$search": {
"index": "default",
"text": {
"query": "AUERBACH",
"path": "page_updated_by.last_name"
}
}
}
SCORE: 0.568153440952301 _id: "1"
message: "try to siGn-In"
page_updated_by: Object
last_name: "AUERBACH"
first_name: "Siân"
email: "auerbach@example.com"
phone: "(123)-456-7890"
text: Object
en_US: "<head> This page deals with department meetings.</head>"
sv_FI: "Den här sidan behandlar avdelningsmöten"
fr_CA: "Cette page traite des réunions de département"
SCORE: 0.521163284778595 _id: "2"
message: "do not forget to SIGN-IN. See ① for details."
page_updated_by: Object
last_name: "OHRBACH"
first_name: "Noël"
email: "ohrbach@example.com"
phone: "(123) 456 0987"
text: Object
en_US: "The head of the sales department spoke first."
fa_IR: "ابتدا رئیس بخش فروش صحبت کرد"
sv_FI: "Först talade chefen för försäljningsavdelningen"
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 MongoDB 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 a seguir mostra os tokens (termos pesquisáveis e codificações de seis dígitos) que o MongoDB 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.

Para fazer query com regex (Operador do Atlas Search) ou wildcard Operador, você não pode usar o filtro de token edgeGram como searchAnalyzer, pois ele produz mais de um token de saída por token de entrada. Especifique um analisador diferente como searchAnalyzer em sua definição de índice.

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
}
]
}
]
}
1db.minutes.createSearchIndex(
2 "default",
3 {
4 "analyzer": "titleAutocomplete",
5 "mappings": {
6 "dynamic": false,
7 "fields": {
8 "title": {
9 "type": "string",
10 "analyzer": "titleAutocomplete"
11 }
12 }
13 },
14 "analyzers": [
15 {
16 "name": "titleAutocomplete",
17 "charFilters": [],
18 "tokenizer": {
19 "type": "standard"
20 },
21 "tokenFilters": [
22 {
23 "type": "icuFolding"
24 },
25 {
26 "type": "edgeGram",
27 "minGram": 4,
28 "maxGram": 7
29 }
30 ]
31 }
32 ]
33 }
34)

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.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

{
"$search": {
"wildcard": {
"query": "mee*",
"path": "title",
"allowAnalyzedField": true
}
}
}
SCORE: 1 _id: "1"
message: "try to siGn-In"
page_updated_by: Object
last_name: "AUERBACH"
first_name: "Siân"
email: "auerbach@example.com"
phone: "(123)-456-7890"
text: Object
en_US: "<head> This page deals with department meetings.</head>"
sv_FI: "Den här sidan behandlar avdelningsmöten"
fr_CA: "Cette page traite des réunions de département"
SCORE: 1 _id: "3"
message: "try to sign-in"
page_updated_by: Object
last_name: "LEWINSKY"
first_name: "Brièle"
email: "lewinsky@example.com"
phone: "(123).456.9870"
text: Object
en_US: "<body>We'll head out to the conference room by noon.</body>"
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' }
]

A Pesquisa do MongoDB retorna documentos com _id: 1 e _id: 3 porque os documentos contêm o termo meeting, que corresponde aos critérios da consulta. Especificamente, o MongoDB Search cria os seguintes tokens de caracteres de 4 a 7 caracteres (termos pesquisáveis) para os documentos nos resultados, que então corresponde ao termo de 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"
}
]
}
]
}
1db.minutes.createSearchIndex(
2 "default",
3 {
4 "mappings": {
5 "fields": {
6 "title": {
7 "type": "string",
8 "analyzer": "englishPossessiveStemmer"
9 }
10 }
11 },
12 "analyzers": [
13 {
14 "name": "englishPossessiveStemmer",
15 "charFilters": [],
16 "tokenizer": {
17 "type": "standard"
18 },
19 "tokenFilters": [
20 {
21 "type": "englishPossessive"
22 }
23 ]
24 }
25 ]
26 }
27)

A seguinte query pesquisa o campo title na coleção minutos do termo team.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

{
"$search": {
"index": "default",
"text": {
"query": "team",
"path": "title"
}
}
}
SCORE: 0.34314215183258057 _id: "1"
message: "try to siGn-In"
page_updated_by: Object
text: Object
SCORE: 0.29123833775520325 _id: "2"
message: "do not forget to SIGN-IN. See ① for details."
page_updated_by: Object
text: Object
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'
}
]

A pesquisa do MongoDB retorna resultados que contêm o termo team no campo title. O MongoDB Search retorna o documento com _id: 1 porque o MongoDB Search transforma o team's no campo title no token team durante a análise. Especificamente, o MongoDB 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"
}
]
}
]
}
1db.minutes.createSearchIndex(
2 "default",
3 {
4 "mappings": {
5 "fields": {
6 "message": {
7 "type": "string",
8 "analyzer": "wordDelimiterGraphFlatten"
9 }
10 }
11 },
12 "analyzers": [
13 {
14 "name": "wordDelimiterGraphFlatten",
15 "charFilters": [],
16 "tokenizer": {
17 "type": "whitespace"
18 },
19 "tokenFilters": [
20 {
21 "type": "wordDelimiterGraph",
22 "delimiterOptions": {
23 "generateWordParts": true,
24 "preserveOriginal": true
25 },
26 "protectedWords": {
27 "words": [
28 "SIGN_IN"
29 ],
30 "ignoreCase": false
31 }
32 },
33 {
34 "type": "flattenGraph"
35 }
36 ]
37 }
38 ]
39 }
40)

A seguinte query pesquisa o campo message na coleção minutos do termo sign.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

{
"$search": {
"index": "default",
"text": {
"query": "sign",
"path": "message"
}
}
}
SCORE: 0.6763891577720642 _id: "3"
message: "try to sign-in"
page_updated_by: Object
text: Object
db.minutes.aggregate([
{
"$search": {
"index": "default",
"text": {
"query": "sign",
"path": "message"
}
}
},
{
"$project": {
"_id": 1,
"message": 1
}
}
])
[
{
_id: 3,
message: 'try to sign-in'
}
]

O MongoDB 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 title campo. 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 MongoDB Search cria os seguintes tokens (termos pesquisáveis) para o documento nos resultados, que então corresponde ao termo de sign query:

ID do documento

Tokens de saída

_id: 3

try, to, sign-in, sign, in

O filtro de token icuFolding aplica o dobramento de caracteres do Relatório técnico unicode #30, como a remoção de acentos, o dobramento de maiúsculas e minúsculas, o dobramento de duplicatas canônicas e muitos outros que você pode ver 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"
}
]
}
]
}
1db.minutes.createSearchIndex(
2 "default",
3 {
4 "analyzer": "diacriticFolder",
5 "mappings": {
6 "fields": {
7 "text": {
8 "type": "document",
9 "fields": {
10 "sv_FI": {
11 "analyzer": "diacriticFolder",
12 "type": "string"
13 }
14 }
15 }
16 }
17 },
18 "analyzers": [
19 {
20 "name": "diacriticFolder",
21 "charFilters": [],
22 "tokenizer": {
23 "type": "keyword"
24 },
25 "tokenFilters": [
26 {
27 "type": "icuFolding"
28 }
29 ]
30 }
31 ]
32 }
33)

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.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

    {
    "$search": {
    "index": "default",
    "wildcard": {
    "query": "*avdelning*",
    "path": "text.sv_FI",
    "allowAnalyzedField": true
    }
    }
    }
    SCORE: 1 _id: "1"
    message: "try to siGn-In"
    page_updated_by: Object
    text: Object
    en_US: "<head> This page deals with department meetings.</head>"
    sv_FI: "Den här sidan behandlar avdelningsmöten"
    fr_CA: "Cette page traite des réunions de département"
    SCORE: 1 _id: "2"
    message: "do not forget to SIGN-IN. See ① for details."
    page_updated_by: Object
    text: Object
    en_US: "The head of the sales department spoke first."
    fa_IR: "ابتدا رئیس بخش فروش صحبت کرد"
    sv_FI: "Först talade chefen för försäljningsavdelningen"
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' }
}
]

A Pesquisa do MongoDB retorna o documento com _id: 1 e _id: 2 nos resultados porque os documentos contêm o termo de consulta avdelning seguido por outros caracteres no documento com _id: 1 e precedidos e seguidos por outros caracteres no documento com _id: 2. Especificamente, o MongoDB 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"
}
]
}
]
}
1db.minutes.createSearchIndex(
2 "default",
3 {
4 "analyzer": "textNormalizer",
5 "mappings": {
6 "fields": {
7 "message": {
8 "type": "string",
9 "analyzer": "textNormalizer"
10 }
11 }
12 },
13 "analyzers": [
14 {
15 "name": "textNormalizer",
16 "charFilters": [],
17 "tokenizer": {
18 "type": "whitespace"
19 },
20 "tokenFilters": [
21 {
22 "type": "icuNormalizer",
23 "normalizationForm": "nfkc"
24 }
25 ]
26 }
27 ]
28 }
29)

A seguinte query pesquisa o campo message na coleção minutos do termo 1.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

    {
    "$search": {
    "index": "default",
    "text": {
    "query": "1",
    "path": "message"
    }
    }
    }
    SCORE: 0.4342196583747864 _id: "2"
    message: "do not forget to SIGN-IN. See ① for details."
    page_updated_by: Object
    text: Object
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.' } ]

A Pesquisa do MongoDB retorna o documento com _id: 2 nos resultados do termo de consulta 1 mesmo que o documento contenha o número circulado no campo message porque o filtro de token icuNormalizer cria o token 1 para esse caractere usando o formulário de normalização nfkc. A tabela a seguir mostra os tokens (termos pesquisáveis) que o MongoDB Search cria para o documento nos resultados usando 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"
}
]
}
]
}
1db.minutes.createSearchIndex(
2 "default",
3 {
4 "analyzer": "kStemmer",
5 "mappings": {
6 "dynamic": true
7 },
8 "analyzers": [
9 {
10 "name": "kStemmer",
11 "tokenizer": {
12 "type": "standard"
13 },
14 "tokenFilters": [
15 {
16 "type": "lowercase"
17 },
18 {
19 "type": "kStemming"
20 }
21 ]
22 }
23 ]
24 }
25)

A seguinte query pesquisa o campo text.en_US na coleção minutos do termo Meeting.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

    {
    "$search": {
    "index": "default",
    "text": {
    "query": "Meeting",
    "path": "text.en_US"
    }
    }
    }
    SCORE: 0.5960260629653931 _id: "1"
    message: "try to siGn-In"
    page_updated_by: Object
    text: Object
    en_US: "<head> This page deals with department meetings.</head>"
    sv_FI: "Den här sidan behandlar avdelningsmöten"
    fr_CA: "Cette page traite des réunions de département"
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 MongoDB Search retorna o documento _id: 1 com, que contém o termo plural meetings em letras minúsculas. O MongoDB 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 MongoDB Search faça a correspondência do plural meetings no text.en_US campo do documento com o termo da query no singular. O MongoDB Search também analisa o termo da query usando o analisador de índice (ou, se especificado, usando searchAnalyzer o). Especificamente, o MongoDB 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
}
]
}
]
}
1db.minutes.createSearchIndex(
2 "default",
3 {
4 "mappings": {
5 "fields": {
6 "text": {
7 "type": "document",
8 "dynamic": true,
9 "fields": {
10 "sv_FI": {
11 "type": "string",
12 "analyzer": "longOnly"
13 }
14 }
15 }
16 }
17 },
18 "analyzers": [
19 {
20 "name": "longOnly",
21 "charFilters": [],
22 "tokenizer": {
23 "type": "standard"
24 },
25 "tokenFilters": [
26 {
27 "type": "icuFolding"
28 },
29 {
30 "type": "length",
31 "min": 20
32 }
33 ]
34 }
35 ]
36 }
37)

A seguinte query pesquisa o campo text.sv_FI na coleção minutos do termo forsaljningsavdelningen.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

    {
    "$search": {
    "index": "default",
    "text": {
    "query": "forsaljningsavdelningen",
    "path": "text.sv_FI"
    }
    }
    }
    SCORE: 0.13076457381248474 _id: "2"
    message: "do not forget to SIGN-IN. See ① for details."
    page_updated_by: Object
    text: Object
    en_US: "The head of the sales department spoke first."
    fa_IR: "ابتدا رئیس بخش فروش صحبت کرد"
    sv_FI: "Först talade chefen för försäljningsavdelningen"
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 MongoDB Search retorna o documento com _id: 2, que contém o termo försäljningsavdelningen. O MongoDB Search corresponde ao documento ao termo da query porque o termo tem mais de 20 caracteres. Além disso, embora o termo de query forsaljningsavdelningen não inclua os caracteres diacríticos, o MongoDB Search corresponde o termo de query ao documento dobrando os diacríticos no termo original no documento. Especificamente, o MongoDB Search cria os seguintes tokens (termos pesquisáveis) para o documento com _id: 2.

forsaljningsavdelningen

O MongoDB 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"
}
]
}
]
}
1db.minutes.createSearchIndex(
2 "default",
3 {
4 "mappings": {
5 "fields": {
6 "title": {
7 "analyzer": "keywordLowerer",
8 "tokenization": "nGram",
9 "type": "autocomplete"
10 }
11 }
12 },
13 "analyzers": [
14 {
15 "name": "keywordLowerer",
16 "charFilters": [],
17 "tokenizer": {
18 "type": "keyword"
19 },
20 "tokenFilters": [
21 {
22 "type": "lowercase"
23 }
24 ]
25 }
26 ]
27 }
28)

A seguinte query pesquisa o campo title utilizando o operador autocomplete para os caracteres standup.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

    {
    "$search": {
    "index": "default",
    "autocomplete": {
    "query": "standup",
    "path": "title"
    }
    }
    }
    SCORE: 0.9239386320114136 _id: “4
    message: "write down your signature or phone №"
    page_updated_by: Object
    text: Object
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 MongoDB Search retorna o documento com _id: 4 nos resultados porque o documento contém o termo de standup query. O MongoDB Search cria tokens para o title campo usando o keyword tokenizador , olowercase filtro de token e a nGram estratégia de tokenização para o tipo preenchimento automático. Especificamente, o MongoDB Search usa o keyword tokenizador 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 lowercase filtro de token para converter os tokens em letras minúsculas. Para o documento nos resultados, o MongoDB Search cria o seguinte token usando o analisador personalizado:

ID do documento

Tokens de saída

_id: 4

the daily huddle on the standupapp2

Após aplicar o analisador personalizado, o MongoDB Search cria mais tokens de n-grams, pois o MongoDB Search indexa o title campo como o tipo autocomplete como especificado na definição de índice. A Pesquisa do MongoDB utiliza os tokens de n-grams, que incluem um token standup para, para corresponder o documento ao termo de standup query.

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"
}
]
}
]
}
1db.minutes.createSearchIndex(
2 "default",
3 {
4 "mappings": {
5 "fields": {
6 "message": {
7 "type": "string",
8 "analyzer": "lowerCaser"
9 }
10 }
11 },
12 "analyzers": [
13 {
14 "name": "lowerCaser",
15 "charFilters": [],
16 "tokenizer": {
17 "type": "standard"
18 },
19 "tokenFilters": [
20 {
21 "type": "icuNormalizer",
22 "normalizationForm": "nfkd"
23 },
24 {
25 "type": "lowercase"
26 }
27 ]
28 }
29 ]
30 }
31)

A query a seguir pesquisa o campo message para o termo sign-in.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

    {
    "$search": {
    "index": "default",
    "text": {
    "query": "sign-in",
    "path": "message"
    }
    }
    }
    SCORE: 0.37036222219467163 _id: "1"
    message: "try to siGn-In"
    page_updated_by: Object
    text: Object
    SCORE: 0.37036222219467163 _id: "3"
    message: "try to sign-in"
    page_updated_by: Object
    text: Object
    SCORE: 0.2633555233478546 _id: "2"
    message: "do not forget to SIGN-IN. See ① for details."
    page_updated_by: Object
    text: Object
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.' }
]

A Pesquisa do MongoDB retorna os documentos com _id: 1, _id: 3 e _id: 2 nos resultados do termo de consulta sign-in porque o tokenizador icuNormalizer primeiro cria tokens separados dividindo o texto, incluindo a palavra hifenizada, mas retém a letra maiúscula original no documento e, em seguida, o filtro de token lowercase converte os tokens em minúsculas. O MongoDB Search também analisa o termo da query usando o analisador de índice (ou, se especificado, usando o searchAnalyzer) para divisão o termo da query e fazer a correspondência com o 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.

Observação

Para fazer query com regex (Operador do Atlas Search) ou wildcard Operador, você não pode usar o filtro de token ngram como searchAnalyzer, pois ele produz mais de um token de saída por token de entrada. Especifique um analisador diferente como searchAnalyzer em sua definição de índice.

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 personalizado denominado titleAutocomplete. Especifica o Analisador de Palavras-chave como searchAnalyzer. A função do analisador personalizado 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",
"searchAnalyzer": "lucene.keyword"
}
}
},
"analyzers": [
{
"name": "titleAutocomplete",
"charFilters": [],
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "englishPossessive"
},
{
"type": "nGram",
"minGram": 4,
"maxGram": 7
}
]
}
]
}
1db.minutes.createSearchIndex(
2 "default",
3 {
4 "mappings": {
5 "fields": {
6 "title": {
7 "type": "string",
8 "analyzer": "titleAutocomplete",
9 "searchAnalyzer": "lucene.keyword"
10 }
11 }
12 },
13 "analyzers": [
14 {
15 "name": "titleAutocomplete",
16 "charFilters": [],
17 "tokenizer": {
18 "type": "standard"
19 },
20 "tokenFilters": [
21 {
22 "type": "englishPossessive"
23 },
24 {
25 "type": "nGram",
26 "minGram": 4,
27 "maxGram": 7
28 }
29 ]
30 }
31 ]
32 }
33)

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.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

    {
    "$search": {
    "index": "default",
    "wildcard": {
    "query": "meet*",
    "path": "title",
    "allowAnalyzedField": true
    }
    }
    }
    SCORE: 1 _id: "1"
    message: "try to siGn-In"
    page_updated_by: Object
    text: Object
    title: "The team's weekly meeting"
    SCORE: 1 _id: "3"
    message: "try to sign-in"
    page_updated_by: Object
    text: Object
    title: "The regular board meeting"
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 MongoDB Search retorna os documentos com _id: 1 e _id: 3 porque os documentos contêm o termo meeting, que o MongoDB 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 MongoDB 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 MongoDB 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"
}
]
}
]
}
db.minutes.createSearchIndex("default", {
"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.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

    {
    "$search": {
    "index": "default",
    "text": {
    "query": "Meet",
    "path": "title"
    }
    }
    }
    SCORE: 0.34314215183258057 _id:1
    message: "try to siGn-In"
    page_updated_by: Object
    text: Object
    SCORE: 0.34314215183258057 _id:3
    message: "try to sign-in"
    page_updated_by: Object
    text: Object
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 MongoDB 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 porterStemming filtro de token cede o sufixo morfológico do meeting token para criar o meet token, que A pesquisa do MongoDB corresponde ao termo de Meet query. Especificamente, o MongoDB Search cria os seguintes tokens (termos pesquisáveis) para os documentos nos resultados, que então corresponde ao termo de Meet query:

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 regex aplica uma expressão regular com sintaxe regex Java a 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 MongoDB 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"
}
]
}
]
}
db.minutes.createSearchIndex("default", {
"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 MongoDB 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 MongoDB Search tokeniza strings que correspondem à expressão regular fornecida no analisador personalizado com a palavra redacted e, por isso, o MongoDB 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 reverseAnalyzer 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 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 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 reverseAnalyzer 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": "keywordReverse",
"mappings": {
"dynamic": true
},
"analyzers": [
{
"name": "keywordReverse",
"charFilters": [],
"tokenizer": {
"type": "keyword"
},
"tokenFilters": [
{
"type": "reverse"
}
]
}
]
}
db.minutes.createSearchIndex("default", {
"analyzer": "keywordReverse",
"mappings": {
"dynamic": true
},
"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.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

    {
    "$search": {
    "wildcard": {
    "query": "*@example.com",
    "path": "page_updated_by.email",
    "allowAnalyzedField": true
    }
    }
    }
    SCORE: 1 _id: "1"
    message: "try to siGn-In"
    page_updated_by: Object
    last_name: "AUERBACH"
    first_name: "Siân"
    email: "auerbach@example.com"
    phone: "(123)-456-7890"
    text: Object
    SCORE: 1 _id: "2"
    message: "do not forget to SIGN-IN. See ① for details."
    page_updated_by: Object
    last_name: "OHRBACH"
    first_name: "Noël"
    email: "ohrbach@example.com"
    phone: "(123) 456 0987"
    text: Object
    SCORE: 1 _id: "3"
    message: "try to sign-in"
    page_updated_by: Object
    last_name: "LEWINSKY"
    first_name: "Brièle"
    email: "lewinsky@example.com"
    phone: "(123).456.9870"
    text: Object
    SCORE: 1 _id: "4"
    message: "write down your signature or phone №"
    page_updated_by: Object
    last_name: "LEVINSKI"
    first_name: "François"
    email: "levinski@example.com"
    phone: "123-456-8907"
    text: Object
.. io-code-block::
:copyable: true
.. input::
:language: json
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,
}
}
])
.. output::
:language: json
[
{ _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' } }
]

Para a query anterior, o MongoDB Search aplica o analisador personalizado à query curinga para transformar a query da seguinte maneira:

moc.elpmaxe@*

O MongoDB Search então executa a query em relação aos tokens indexados, que também são invertidos. Especificamente, o MongoDB Search cria os seguintes tokens (termos pesquisáveis) para os documentos nos resultados, que então corresponde ao termo de 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.

Observação

Para fazer query com regex (Operador do Atlas Search) ou wildcard Operador, você não pode usar o filtro de token shingle como searchAnalyzer, pois ele produz mais de um token de saída por token de entrada. Especifique um analisador diferente como searchAnalyzer em sua definição de índice.

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 page_updated_by.email campo na collection minutos usa dois analisadores customizados, emailAutocompleteIndex e,emailAutocompleteSearch para implementar funcionalidades semelhantes ao preenchimento automático. O MongoDB Search usa o emailAutocompleteIndex analisador 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 MongoDB 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}
db.minutes.createSearchIndex("default", {
"analyzer": "lucene.keyword",
"mappings": {
"dynamic": true,
"fields": {
"page_updated_by": {
"type": "document",
"fields": {
"email": {
"type": "string",
"analyzer": "emailAutocompleteIndex",
"searchAnalyzer": "emailAutocompleteSearch"
}
}
}
}
},
"analyzers": [
{
"name": "emailAutocompleteIndex",
"charFilters": [
{
"mappings": {
"@": "AT"
},
"type": "mapping"
}
],
"tokenizer": {
"maxTokenLength": 15,
"type": "whitespace"
},
"tokenFilters": [
{
"maxShingleSize": 3,
"minShingleSize": 2,
"type": "shingle"
},
{
"maxGram": 15,
"minGram": 2,
"type": "edgeGram"
}
]
},
{
"name": "emailAutocompleteSearch",
"charFilters": [
{
"mappings": {
"@": "AT"
},
"type": "mapping"
}
],
"tokenizer": {
"maxTokenLength": 15,
"type": "whitespace"
}
}
]
})

A seguinte query procura um endereço de e-mail no campo page_updated_by.email da collection minutos:

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

    {
    "$search": {
    "index": "default",
    "text": {
    "query": "auerbach@ex",
    "path": "page_updated_by.email"
    }
    }
    }
    SCORE: 0.8824931383132935 _id: "1"
    message: "try to siGn-In"
    page_updated_by: Object
    last_name: "AUERBACH"
    first_name: "Siân"
    email: "auerbach@example.com"
    phone: "(123)-456-7890"
    text: Object
db.minutes.aggregate([
{
"$search": {
"index": "default",
"text": {
"query": "auerbach@ex",
"path": "page_updated_by.email"
}
}
},
{
"$project": {
"_id": 1,
"text.es_MX": 1
}
}
])
[ { _id: 1, page_updated_by: { email: 'auerbach@example.com' } } ]

O MongoDB Search cria tokens de pesquisa usando o analisador emailAutocompleteSearch , que então corresponde aos tokens de índice criados usando o analisador emailAutocompleteIndex . A tabela a seguir mostra a pesquisa e tokens de índice (até 15 caracteres) que o MongoDB 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 (desatualizado)

  • hungarian

  • irish

  • italian

  • lithuanian

  • 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"
}
]
}
]
}
db.minutes.createSearchIndex("default", {
"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.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

    {
    "$search": {
    "index": "default",
    "text": {
    "query": "réunion",
    "path": "text.fr_CA"
    }
    }
    }
    SCORE: 0.13076457381248474 _id: "1"
    message: "try to siGn-In"
    page_updated_by: Object
    text: Object
    en_US: "<head> This page deals with department meetings.</head>"
    sv_FI: "Den här sidan behandlar avdelningsmöten"
    fr_CA: "Cette page traite des réunions de département"
db.minutes.aggregate([
{
"$search": {
"index": "default",
"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'
}
}
]

A pesquisa do MongoDB retorna documento com _id: 1 nos resultados. O MongoDB Search corresponde o termo de query ao documento porque cria os seguintes tokens para o documento, que são usados para corresponder ao 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"
}
]
}
]
}
db.minutes.createSearchIndex("default", {
"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.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

    {
    "$search": {
    "index": "default",
    "text": {
    "query": "punto",
    "path": "text.es_MX"
    }
    }
    }
    SCORE: 0.13076457381248474 _id: "4"
    message: "write down your signature or phone №"
    page_updated_by: Object
    text: Object
    en_US: "<body>This page has been updated with the items on the agenda.</body>"
    es_MX: "La página ha sido actualizada con los puntos de la agenda."
    pl_PL: "Strona została zaktualizowana o punkty porządku obrad."
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 MongoDB Search retorna o documento com _id: 4 porque o campo text.es_MX no documento contém o termo plural puntos. O MongoDB Search faz a correspondência desse documento com o termo de consulta punto porque o MongoDB Search analisa puntos como punto ao extrair o plural (s) do termo. Especificamente, o MongoDB Search cria os seguintes tokens (termos pesquisáveis) para o documento nos resultados, que então utiliza para corresponder ao termo da query:

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 stempelAnalyzer 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 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 stempelAnalyzer 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": "stempelAnalyzer"
}
}
},
"analyzers": [
{
"name": "stempelAnalyzer",
"tokenizer": {
"type": "standard"
},
"tokenFilters": [
{
"type": "stempel"
}
]
}
]
}
db.minutes.createSearchIndex("default", {
"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.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

    {
    "$search": {
    "index": "default",
    "text": {
    "query": "punkt",
    "path": "text.pl_PL"
    }
    }
    }
    SCORE: 0.5376965999603271 _id: "4"
    text: Object
    pl_PL: "Strona została zaktualizowana o punkty porządku obrad."
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 MongoDB Search retorna o documento com _id: 4 porque o campo text.pl_PL no documento contém o termo plural punkty. O MongoDB Search faz a correspondência desse documento com o termo de consulta punkt porque o MongoDB Search analisa punkty como punkt ao extrair o plural (y) do termo. Especificamente, o MongoDB Search cria os seguintes tokens (termos pesquisáveis) para o documento nos resultados, que então corresponde ao termo da query:

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"]
}
]
}
]
}
1db.minutes.createSearchIndex(
2 "default",
3 {
4 "mappings": {
5 "fields": {
6 "text": {
7 "type": "document",
8 "fields": {
9 "en_US": {
10 "type": "string",
11 "analyzer": "stopwordRemover"
12 }
13 }
14 }
15 }
16 },
17 "analyzers": [
18 {
19 "name": "stopwordRemover",
20 "charFilters": [],
21 "tokenizer": {
22 "type": "whitespace"
23 },
24 "tokenFilters": [
25 {
26 "type": "stopword",
27 "tokens": ["is", "the", "at"]
28 }
29 ]
30 }
31 ]
32 }
33)

A query a seguir procura a frase head of the sales no campo text.en_US na collection de minutos .

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

    {
    "$search": {
    "phrase": {
    "query": "head of the sales",
    "path": "text.en_US"
    }
    }
    }
    SCORE: 1.5351942777633667 _id: "2"
    message: "do not forget to SIGN-IN. See ① for details."
    page_updated_by: Object
    text: Object
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])
[
{
_id: 2,
text: { en_US: 'The head of the sales department spoke first.' }
}
]

O MongoDB Search retorna o documento com _id: 2 porque o campo en_US contém o termo de query. O MongoDB Search não cria tokens para a palavra de parada the no documento durante a análise, mas ainda é capaz de associá-la ao termo de consulta porque, para os campos string, ele também analisa o termo de consulta usando o analisador de índice (ou se especificado, usando o searchAnalyzer) e remove a palavra de parada do termo de consulta , o que permite ao MongoDB Search corresponder o termo de consulta ao documento. Especificamente, o MongoDB 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"
}
]
}
]
}
db.minutes.createSearchIndex("default", {
"mappings": {
"fields": {
"text": {
"type": "document",
"fields": {
"en_US": {
"type": "string",
"analyzer": "tokenTrimmer"
}
}
}
}
},
"analyzers": [
{
"name": "tokenTrimmer",
"charFilters": [{
"type": "htmlStrip",
"ignoredTags": ["a"]
}],
"tokenizer": {
"type": "keyword"
},
"tokenFilters": [
{
"type": "trim"
}
]
}
]
})

A consulta a seguir procura a frase *department meetings* precedida e seguida por qualquer número de outros caracteres no campo text.en_US na coleção de minutos .

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

    {
    "$search": {
    "wildcard": {
    "query": "*department meetings*",
    "path": "text.en_US",
    "allowAnalyzedField": true
    }
    }
    }
    SCORE: 1 _id: "1"
    message: "try to siGn-In"
    page_updated_by: Object
    text: Object
    en_US: "<head> This page deals with department meetings.</head>"
    sv_FI: "Den här sidan behandlar avdelningsmöten"
    fr_CA: "Cette page traite des réunions de département"
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 MongoDB Search retorna o documento com _id: 1 porque o campo en_US contém o termo de query department meetings. O MongoDB Search cria o seguinte token para o documento nos resultados, mostrando que o MongoDB 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.

Observação

Para fazer query com regex (Operador do Atlas Search) ou wildcard Operador, você não pode usar o filtro de token wordDelimiterGraph como searchAnalyzer, pois ele produz mais de um token de saída por token de entrada. Especifique um analisador diferente como searchAnalyzer em sua definição de índice.

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
}
}
]
}
]
}
db.minutes.createSearchIndex("default", {
"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.

  1. Clique no botão Query para o seu índice.

  2. Clique em Edit Query para editar a query.

  3. Clique em na barra de query e selecione o banco de dados e a coleção.

  4. Substitua a query padrão pelo seguinte e clique em Find:

    {
    "$search": {
    "index": "default",
    "text": {
    "query": "App2",
    "path": "title"
    }
    }
    }
    SCORE: 0.5104123950004578 _id: "4"
    message: "write down your signature or phone №"
    page_updated_by: Object
    text: Object
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'
}
]

A pesquisa do MongoDB retorna o documento com _id: 4 porque o campo title no documento contém App2. A Pesquisa do MongoDB 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 divisão a palavra em caso de alteração de maiúsculas e minúsculas e remover as letras que precedem 2. Especificamente, o MongoDB 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