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.
"tokenFilters": [ { "type": "<token-filter-type>", "<additional-option>": <value> } ]
Tipos de filtro de token
A Pesquisa MongoDB suporta os seguintes tipos de filtro de token:
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.
asciiFolding
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.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
| 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:
Padrão: |
Exemplo
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:
Aplique o tokenizador padrão para criar tokens com base em regras de quebra de palavras.
Aplique o filtro de token
asciiFolding
para converter os valores de campo em seu equivalente ASCII.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
asciiConverter
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione asciiFolding no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo page_updated_by.first_name.
Selecione page_updated_by.first_name no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
asciiConverter
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte 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" } ] } ] }
1 db.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.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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 |
---|---|
|
|
daitchMokotoffSoundex
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:
Definições de mapeamento do tipo sinônimo ou preenchimento automático.
Operadores onde
fuzzy
está ativado. O MongoDB Search suporta a opçãofuzzy
para os seguintes operadores:
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
| 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:
Padrão: |
Exemplo
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:
Aplique o tokenizador padrão para criar tokens com base em regras de quebra de palavras.
Aplique o filtro de token
daitchMokotoffSoundex
para codificar os tokens para palavras que soam as mesmas.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
dmsAnalyzer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione daitchMokotoffSoundex no menu suspenso e selecione o valor mostrado na tabela a seguir para o campo originalTokens:
CampoValororiginalTokens
include
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo page_updated_by.last_name.
Selecione page_updated_by.last_name no menu suspenso Field Name e String no menu suspenso Data Type .
Na seção de propriedades do tipo de dados, selecione
dmsAnalyzer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte 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" } ] } ] }
1 db.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.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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 |
---|---|
|
|
|
|
edgeGram
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.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
| inteiro | sim | Número que especifica o comprimento mínimo de n-grams gerados. O valor deve ser menor ou igual a |
| inteiro | sim | Número que especifica o comprimento máximo de n-grams gerados. O valor deve ser maior ou igual a |
| string | no | String que especifica se os tokens de índice são menores que
Se Padrão: |
Exemplo
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:
Aplique o tokenizador padrão para criar tokens com base em regras de quebra de palavras.
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.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
titleAutocomplete
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione icuFolding no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione edgeGram no menu suspenso e digite o valor mostrado na tabela a seguir para os campos:
CampoValorminGram
4
maxGram
7
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo título.
Selecione título no menu suspenso Field Name e Cadeia de caracteres no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
titleAutocomplete
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte 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 } ] } ] }
1 db.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.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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 |
---|---|
|
|
|
|
englishPossessive
O filtro de token englishPossessive
remove a apóstrofe possessiva ('s
extras) das palavras.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
Exemplo
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:
Aplique o tokenizador padrão para criar tokens (termos de pesquisa) com base nas regras de quebra de palavras.
Aplique o filtro de token EnglishPossessive para remover possessivos (
's
à direita) dos tokens.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
englishPossessiveStemmer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione englishPossessive no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo título.
Selecione título no menu suspenso Field Name e Cadeia de caracteres no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
englishPossessiveStemmer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "mappings": { "fields": { "title": { "type": "string", "analyzer": "englishPossessiveStemmer" } } }, "analyzers": [ { "name": "englishPossessiveStemmer", "charFilters": [], "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "englishPossessive" } ] } ] }
1 db.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
.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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 |
---|---|
|
|
|
|
flattenGraph
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.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
Exemplo
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:
Aplique o token whitespace para criar tokens com base em ocorrências de whitespace entre palavras.
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.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
wordDelimiterGraphFlatten
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione whitespace no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione wordDelimiterGraph no menu suspenso e configure os campos a seguir do filtro de token.
Selecione os seguintes campos:
CampoValordelimiterOptions.generateWordParts
true
delimiterOptions.preserveOriginal
true
Digite
SIGN_IN
no campoprotectedWords.words
.Selecione
protectedWords.ignoreCase
.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione flattenGraph no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo mensagem.
Selecione a mensagem na lista suspensa Field Name e Cadeia de caracteres na lista suspensa Data Type .
Na seção de propriedades do tipo de dados, selecione
wordDelimiterGraphFlatten
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte 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" } ] } ] }
1 db.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
.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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 |
|
|
Dobramento de UTI
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.
Atributos
Tem o seguinte atributo:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
Exemplo
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:
Aplique o tokenizador de palavra-chave para tokenizar todos os termos no campo de string como um termo único.
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.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
diacriticFolder
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione keyword no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione icuFolding no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.sv_FI.
Selecione o campo aninhado text.sv_FI no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
diacriticFolder
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte 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" } ] } ] }
1 db.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.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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 |
---|---|
|
|
|
|
icuNormalizer
O filtro de token icuNormalizer
normaliza os tokens usando um modo de normalização unicode padrão.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
| string | no | Formulário de normalização a ser aplicado. Os valores aceitos são:
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: |
Exemplo
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:
Use o tokenizador de espaço em branco para criar tokens com base em ocorrências de espaço em branco entre as palavras.
Use o filtro de token
icuNormalizer
para normalizar tokens por decomposição de compatibilidade, seguido por composição canônica.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
textNormalizer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione whitespace no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione icuNormalizer no menu suspenso e selecione
nfkc
no menu suspenso normalizationForm.Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo mensagem.
Selecione a mensagem na lista suspensa Field Name e Cadeia de caracteres na lista suspensa Data Type .
Na seção de propriedades do tipo de dados, selecione
textNormalizer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "analyzer": "textNormalizer", "mappings": { "fields": { "message": { "type": "string", "analyzer": "textNormalizer" } } }, "analyzers": [ { "name": "textNormalizer", "charFilters": [], "tokenizer": { "type": "whitespace" }, "tokenFilters": [ { "type": "icuNormalizer", "normalizationForm": "nfkc" } ] } ] }
1 db.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
.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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 |
|
| X |
|
| X |
|
| √ |
|
| √ |
kStemming
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.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
Exemplo
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:
Aplique o tokenizer padrão para criar tokens com base em regras de quebra de palavras.
Aplique os seguintes filtros nos tokens:
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
kStemmer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione kStemming no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.en_US.
Selecione o campo aninhado text.en_US no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
kStemmer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte exemplo:
{ "analyzer": "kStemmer", "mappings": { "dynamic": true }, "analyzers": [ { "name": "kStemmer", "tokenizer": { "type": "standard" }, "tokenFilters": [ { "type": "lowercase" }, { "type": "kStemming" } ] } ] }
1 db.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
.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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
Tamanho
O filtro de token length
remove tokens muito curtos ou muito longos.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
| inteiro | no | Número que especifica o comprimento mínimo de um token. O valor deve ser menor ou igual a Padrão: |
| inteiro | no | Número que especifica o comprimento máximo de um token. O valor deve ser maior ou igual a Padrão: |
Exemplo
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:
Use o tokenizador padrão para criar tokens com base em regras de quebra de palavras.
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.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
longOnly
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione icuFolding no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione length no menu suspenso e configure o seguinte campo para o filtro de token:
CampoValormin
20
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.sv.FI.
Selecione text.sv.FI aninhado no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
longOnly
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte 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 } ] } ] }
1 db.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
.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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.
minúsculas
O filtro de token do lowercase
normaliza o texto de token para minúsculas.
Atributos
Tem o seguinte atributo:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
Exemplos
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:
Aplique o tokenizador de palavra-chave para criar um único token para uma string ou array de strings.
Aplique o filtro de token
lowercase
para converter texto de token em minúsculas.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Escolha o botão de opção Create Your Own e clique em Next.
Digite
keywordLowerer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido e selecione keyword no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo título.
Selecione título no menu suspenso Field Name e Preenchimento automático no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione os seguintes valores na lista suspensa da propriedade:
Nome da propriedadeValorAnalyzer
keywordLowerer
Tokenization
nGram
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" } ] } ] }
1 db.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
.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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 |
|
|
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:
Aplique o tokenizador padrão para criar tokens com base em regras de quebra de palavras.
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.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
lowerCaser
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione icuNormalizer no menu suspenso e selecione
nfkd
no menu suspenso normalizationForm.Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione lowercase no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo mensagem.
Selecione a mensagem na lista suspensa Field Name e Cadeia de caracteres na lista suspensa Data Type .
Na seção de propriedades do tipo de dados, selecione
lowerCaser
nos menus suspensos Index Analyzer e Search Analyzer.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" } ] } ] }
1 db.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
.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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 |
|
|
|
|
|
|
nGram
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.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
| inteiro | sim | Número que especifica o comprimento mínimo de n-grams gerados. O valor deve ser menor ou igual a |
| inteiro | sim | Número que especifica o comprimento máximo de n-grams gerados. O valor deve ser maior ou igual a |
| string | no | String que especifica se os tokens de índice são menores que
Se Padrão: |
Exemplo
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:
Aplique o tokenizador padrão para criar tokens com base nas regras de quebra de palavras.
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.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
titleAutocomplete
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione englishPossessive no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione nGram no menu suspenso e configure os seguintes campos para o filtro de token:
CampoValorminGram
4
maxGram
7
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo título.
Selecione título no menu suspenso Field Name e Cadeia de caracteres no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
titleAutocomplete
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte 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 } ] } ] }
1 db.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.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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 |
---|---|
|
|
|
|
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
.
porterStemming
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.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
Exemplo
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:
Aplique o tokenizer padrão para criar tokens com base em regras de quebra de palavras.
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.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
porterStemmer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione porterStemming no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo título.
Selecione título no menu suspenso Field Name e Cadeia de caracteres no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
porterStemmer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte 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
.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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 |
---|---|
|
|
|
|
regex
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.
Atributos
Tem os seguintes atributos:
Exemplo
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:
Aplique o tokenizador de palavra-chave para indexar todas as palavras no valor do campo como um único termo.
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 palavraredacted
.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
emailRedact
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione keyword no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione regex no menu suspenso e configure o seguinte para o filtro de token:
Digite
^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,5})$
no campo pattern.Digite
redacted
no campo replacement.Selecione
all
no menu suspenso matches.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado page_updated_by.email.
Selecione page_updated_by.email aninhado no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
emailRedact
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte 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.
1 db.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.
reverter
O filtro de token reverse
inverte cada token de string.
Atributos
Tem o seguinte atributo:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível por humanos que identifica este filtro de token. O valor deve ser |
Exemplo
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.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
reverseAnalyzer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione reverse no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo título.
Selecione título no menu suspenso Field Name e Cadeia de caracteres no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
reverseAnalyzer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte 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.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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 |
---|---|
|
|
|
|
|
|
|
|
shingle
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.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
| inteiro | sim | Número mínimo de tokens por shingle. Deve ser maior ou igual a |
| inteiro | sim | Número máximo de tokens por shingle. Deve ser maior ou igual a |
Exemplo
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 porAT
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:
Substituir
@
caracteres em um campo porAT
Criar tokens com o tokenizador de espaço em branco
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
emailAutocompleteIndex
no campo Analyzer Name.Expanda Character Filters e clique em Add character filter.
Selecione mapping no menu suspenso e clique em Add mapping.
Insira a seguinte chave e valor:
ChaveValor@
AT
Clique em Add character filter para adicionar o filtro de caracteres ao seu analisador customizado.
Expanda Tokenizer se estiver recolhido.
Selecione whitespace no menu suspenso e digite
15
no campo maxTokenLength.Expanda Token Filters e clique em Add token filter.
Selecione shingle no menu suspenso e configure os seguintes campos.
CampoValor do campominShingleSize
2
minShingleSize
3
Clique em Add token filter para adicionar outro filtro de token.
Clique em Add token filter para adicionar outro filtro de token.
Selecione edgeGram no menu suspenso e configure os seguintes campos para o filtro de token:
CampoValor do campominGram
2
maxGram
15
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para adicionar o analisador personalizado ao seu índice.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
emailAutocompleteSearch
no campo Analyzer Name.Expanda Character Filters e clique em Add character filter.
Selecione mapping no menu suspenso e clique em Add mapping.
Insira a seguinte chave e valor:
ChaveValor@
AT
Clique em Add character filter para adicionar o filtro de caracteres ao seu analisador customizado.
Expanda Tokenizer se estiver recolhido.
Selecione whitespace no menu suspenso e digite
15
no campo maxTokenLength.Clique em Add para adicionar o analisador personalizado ao seu índice.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado page_updated_by.email.
Selecione page_updated_by.email aninhado no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
emailAutocompleteIndex
no menu suspenso Index Analyzer eemailAutocompleteSearch
no menu suspenso Search Analyzer.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:
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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 |
---|---|
|
|
snowballStemming
O token snowballStemming
filtra tokens Stems usando um derivador gerado pelo Snowball.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
| string | sim | Os seguintes valores são válidos:
|
Exemplo
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:
Aplique o tokenizer padrão para criar tokens com base em regras de quebra de palavras.
Aplique os seguintes filtros de token nos tokens:
Filtro de token lowercase para converter os tokens em minúsculas.
french
variante do filtro de tokensnowballStemming
para palavras radicais.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
frenchStemmer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione snowballStemming no menu suspenso e selecione
french
no menu suspenso stemmerName.Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.fr_CA.
Selecione o campo aninhado text.fr_CA no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
frenchStemmer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte 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
.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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 |
---|---|
|
|
spanishPluralStemming
O filtro de token spanishPluralStemming
origina palavras no plural em espanhol. Ele espera texto em minúsculas.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
Exemplo
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:
Aplique o tokenizer padrão para criar tokens com base em regras de quebra de palavras.
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.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
spanishPluralStemmer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione spanishPluralStemming no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.es_MX.
Selecione text.es_MX no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
spanishPluralStemmer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte 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
.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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 |
|
|
stempel
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.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
Exemplo
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:
Aplique o tokenizer padrão para criar tokens com base em regras de quebra de palavras.
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.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
stempelAnalyzer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione spanishPluralStemming no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo título.
Selecione título no menu suspenso Field Name e Cadeia de caracteres no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
stempelAnalyzer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte 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
.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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 |
---|---|
|
|
stopword
O filtro de tokens stopword
remove tokens que correspondem às palavras vazias especificadas. Este filtro de tokens não analisa as palavras vazias especificadas.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
| 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. |
| 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:
Padrão: |
Exemplo
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:
Aplicar o tokenizador de espaço em branco para criar tokens com base nas ocorrências de espaço em branco entre palavras.
Aplicar o filtro de tokens
stopword
para remover os tokens que correspondam às palavras vazias definidasis
,the
eat
. O filtro de tokens não diferencia maiúsculas de minúsculas e removerá todos os tokens que correspondam às palavras vazias especificadas.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
stopwordRemover
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione whitespace no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione stopword no menu suspenso e digite o seguinte no campo tokens:
is
,the
,at
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.en_US.
Selecione o campo aninhado text.en_US no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
stopwordRemover
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte 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"] } ] } ] }
1 db.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 .
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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
1 db.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 |
---|---|
|
|
cortar
O filtro de token trim
corta o espaço em branco à esquerda e à direita dos tokens.
Atributos
Tem o seguinte atributo:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
Exemplo
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.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
tokenTrimmer
no campo Analyzer Name.Expanda Character Filters e clique em Add character filter.
Selecione htmlStrip no menu suspenso e digite
a
no campo ignoredTags.Clique em Add character filter para adicionar o filtro de caracteres ao seu analisador customizado.
Expanda Tokenizer se estiver recolhido.
Selecione keyword no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione trim no menu suspenso.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para adicionar o analisador personalizado ao seu índice.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado text.en_US.
Selecione o campo aninhado text.en_US no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
tokenTrimmer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte 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 .
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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"
1 db.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 |
---|---|
|
|
wordDelimiterGraph
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.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
---|---|---|---|
| string | sim | Etiqueta legível para humanos que identifica este tipo de filtro de token. O valor deve ser |
| 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 Padrão: |
delimiterOptions .generateNumberParts | booleano | no | Sinalizador que indica se os tokens devem ser divididos com base em subnúmeros. Por exemplo, se Padrão: |
delimiterOptions .concatenateWords | booleano | no | Sinalizador que indica se deve concatenar execuções de subpalavras. Por exemplo, se Padrão: |
delimiterOptions .concatenateNumbers | booleano | no | Sinalizador que indica se as execuções de subnúmeros devem ser concatenadas. Por exemplo, se Padrão: |
delimiterOptions .concatenateAll | booleano | no | Sinalizador que indica se todas as execuções devem ser concatenadas. Por exemplo, se Padrão: |
delimiterOptions .preserveOriginal | booleano | no | Sinalizador que indica se deve-se gerar tokens das palavras originais. Padrão: |
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 Padrão: |
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 Padrão: |
delimiterOptions .stemEnglishPossessive | booleano | no | Sinalizador que indica se os possessivos finais de cada subpalavra devem ser removidos. Por exemplo, se Padrão: |
delimiterOptions .ignoreKeywords | booleano | no | Sinalizador que indica se você deve ignorar tokens com o atributo Padrão: |
| 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 .ignoreCase | booleano | no | Sinalizador que indica se você deve ignorar a diferenciação entre maiúsculas e minúsculas para palavras protegidas. Padrão: |
Se true
, aplique o filtro de token flattenGraph após essa opção para tornar o fluxo de token adequado para indexação.
Exemplo
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:
Aplique o token whitespace para criar tokens com base em ocorrências de whitespace entre palavras.
Aplicar o filtro de tokens wordDelimiterGraph para o seguinte:
Não tente dividir
is
,the
eat
. A exclusão diferencia maiúsculas de minúsculas. Por exemplo,Is
etHe
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.
Na seção Custom Analyzers, clique em Add Custom Analyzer.
Selecione o botão de opção Create Your Own e clique em Next.
Digite
wordDelimiterGraphAnalyzer
no campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione whitespace no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione lowercase no menu suspenso e clique em Add token filter para adicionar o filtro de token ao seu analisador personalizado.
Clique em Add token filter para adicionar outro filtro de token.
Selecione wordDelimiterGraph no menu suspenso e configure os seguintes campos:
Desmarque delimiterOptions.generateWordParts e selecione delimiterOptions.splitOnCaseChange.
Digite e selecione no menu suspenso as palavras
is
,the
eat
, uma de cada vez, no campoprotectedWords.words
.Desmarque
protectedWords.ignoreCase
.
Clique em Add token filter para adicionar o filtro de token ao seu analisador customizado.
Clique em Add para criar o analisador customizado.
Na seção Field Mappings , clique em Add Field Mapping para aplicar o analisador customizado ao campo aninhado title .
Selecione title aninhado no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
wordDelimiterGraphAnalyzer
nos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte 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
.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
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 |
---|---|
|
|
|
|