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
asciiFoldingpara 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
asciiConverterno 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
asciiConverternos 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 Search:
{ "$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
fuzzyestá ativado. O MongoDB Search suporta a opçãofuzzypara 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
daitchMokotoffSoundexpara 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
dmsAnalyzerno 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:
CampoValororiginalTokensincludeClique 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
dmsAnalyzernos 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 Search:
{ "$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 (MongoDB Search Operator) ou wildcard Operator, 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:
icuFoldingfiltro de token para aplicar dobraduras de caracteres aos tokens.edgeGramfiltro 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
titleAutocompleteno 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:
CampoValorminGram4
maxGram7
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
titleAutocompletenos 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 Search:
{ "$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
englishPossessiveStemmerno 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
englishPossessiveStemmernos 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 Search:
{ "$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_INde 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
wordDelimiterGraphFlattenno 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.generateWordPartstrue
delimiterOptions.preserveOriginaltrue
Digite
SIGN_INno 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
wordDelimiterGraphFlattennos 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 Search:
{ "$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 campo title. O filtro de token wordDelimiterGraph cria um gráfico de filtro de token e o filtro de token flattenGraph transforma o gráfico de filtro de token em um formulário plano adequado para a indexação. Especificamente, o MongoDB Search cria os seguintes tokens (termos pesquisáveis) para o documento nos resultados, que então corresponde ao termo de query sign:
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
icuFoldingpara 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
diacriticFolderno 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
diacriticFoldernos 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 seguinte utiliza o operador curinga para pesquisar o text.sv_FI campo na coleção minutos para todos os termos que contêm o avdelning termo, 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 Search:
{ "$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
icuNormalizerpara 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
textNormalizerno 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
nfkcno 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
textNormalizernos 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 Search:
{ "$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 |
|
| √ |
|
| √ |
keywordRepeat
O keywordRepeat filtro de token emite cada token recebido duas vezes, como uma palavra-chave e como uma não-chave. Você pode reduzir o token não palavra-chave usando filtros de token subsequentes e preservar o token da palavra-chave. Isso pode ser usado para aumentar as correspondências exatas e recuperar as correspondências derivadas. Isso normalmente é usado em conjunto com um filtro de derivação, como porterStemming, seguido por removeDuplicates.
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 keywordStemRemover. 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 nos tokens:
Filtro de tokenqueryRepeat para criar tokens duas vezes, uma vez como token de palavra-chave e outra vez como token não palavra-chave.
Filtro de token porterStemming para remover os sufixos morfológicos e infleccionais comuns dos tokens que não são palavras-chave.
removeDuplicates para filtrar tokens na mesma posição para o mesmo termo que o token anterior no fluxo.
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
keywordStemRemoverno campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione whitespace no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione keywordRepeat no menu suspenso e clique em Add token filter.
Clique Add token filter em para adicionar os seguintes filtros de token ao seu analisador personalizado:
removeDuplicates
porterStemming
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
keywordStemRemovernos 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": { "title": { "analyzer": "keywordStemRemover", "type": "string" } } }, "analyzers": [ { "name": "keywordStemRemover", "tokenFilters": [ { "type": "keywordRepeat" }, { "type": "porterStemming" }, { "type": "removeDuplicates" } ], "tokenizer": { "type": "whitespace" } } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": false, 6 "fields": { 7 "title": { 8 "analyzer": "keywordStemRemover", 9 "type": "string" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "name": "keywordStemRemover", 16 "tokenFilters": [ 17 { 18 "type": "keywordRepeat" 19 }, 20 { 21 "type": "porterStemming" 22 }, 23 { 24 "type": "removeDuplicates" 25 } 26 ], 27 "tokenizer": { 28 "type": "whitespace" 29 } 30 } 31 ] 32 } 33 )
A seguinte query pesquisa o title campo na coleção minutos do termo mee* utilizando o wildcard Operador.
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 Search:
{ "$search": { "wildcard": { "query": "mee*", "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": "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 os documentos com o termo meeting no campo de título. O filtro de token keywordRepeat gera os seguintes tokens para os documentos nos resultados:
Título | Keyword Tokens | Non-Keyword tokens |
|---|---|---|
|
|
|
|
|
|
O filtro de token do porterStemming reduz os tokens que não são de palavra-chave às suas formas de base raiz:
Título | Stemmed Non-Keyword Tokens |
|---|---|
|
|
|
|
O filtro de token removeDuplicates remove quaisquer tokens duplicados no fluxo gerado por um filtro de token keywordRepeat anterior:
Título | Tokens |
|---|---|
|
|
|
|
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
kStemmerno 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
kStemmernos 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 Search:
{ "$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 com _id: 1, 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 campo text.en_US 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 o searchAnalyzer). 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.
lengthfiltro 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
longOnlyno 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:
CampoValormin20Clique 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
longOnlynos 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 Search:
{ "$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
lowercasepara 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
keywordLowererno 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
keywordLowererTokenization
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 Search:
{ "$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 query standup. O MongoDB Search cria tokens para o campo title usando o tokenizador keyword, o filtro de token lowercase e a estratégia de tokenização nGram para o tipo preenchimento automático. Especificamente, o MongoDB Search usa o tokenizador keyword para tokenizar a string inteira como um único token, o que oferece suporte apenas a correspondências exatas em toda a string e, em seguida, usa o filtro de token lowercase para converter os tokens em letras minúsculas. Para o documento nos resultados, o 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 campo title 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 para standup, para corresponder o documento ao termo de query standup.
A seguinte definição de índice indexa o campo message na coleção minutos utilizando um analisador personalizado denominado lowerCaser. O analisador personalizado especifica o seguinte:
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.
lowercaseFiltro 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
lowerCaserno 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
nfkdno 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
lowerCasernos 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 Search:
{ "$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 (MongoDB Search Operator) ou wildcard Operator, 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:
englishPossessivepara remover possessivos ('sà direita) das palavras.nGrampara 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
titleAutocompleteno 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:
CampoValorminGram4
maxGram7
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
titleAutocompletenos 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 Search:
{ "$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
porterStemmerno 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
porterStemmernos 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 Search:
{ "$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' } ]
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 filtro de token porterStemming cede o sufixo morfológico do token meeting para criar o token meet, que a pesquisa do MongoDB corresponde ao termo de query Meet. Especificamente, o MongoDB Search cria os seguintes tokens (termos pesquisáveis) para os documentos nos resultados, que então corresponde ao termo de query Meet:
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:
Nome | Tipo | Obrigatório? | Descrição | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| string | sim | Etiqueta legível por humanos que identifica este filtro de token. O valor deve ser | |||||||||||||||||||||
| string | sim | Padrão de expressão regular para aplicar a cada token. | |||||||||||||||||||||
| string | sim | String de substituição para substituir sempre que ocorrer um padrão correspondente. Se você especificar uma string vazia ( | |||||||||||||||||||||
| string | sim | Os valores aceitáveis são:
Se |
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.
regexFiltro 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
emailRedactno 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
redactedno campo replacement.Selecione
allno 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
emailRedactnos 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.
removeDuplicates
O filtro de token removeDuplicates remove tokens duplicados consecutivos, que são tokens para o mesmo termo na mesma posição.
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 o campo title na coleção minutos utilizando um analisador personalizado denominado duplicateRemover. 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 nos tokens:
Filtro de tokenqueryRepeat para criar tokens duas vezes, como palavra-chave e como não palavra-chave.
removeDuplicates para filtrar tokens na mesma posição e termo que o token anterior no fluxo.
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
removeDuplicatesno campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione whitespace no menu suspenso.
Expanda Token Filters e clique em Add token filter.
Selecione keywordRepeat no menu suspenso e clique em Add token filter.
Clique em Add token filter para adicionar outro filtro de token.
Selecione removeDuplicates 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
removeDuplicatesnos 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": { "title": { "analyzer": "duplicateRemover", "type": "string" } } }, "analyzers": [ { "name": "duplicateRemover", "tokenFilters": [ { "type": "keywordRepeat" }, { "type": "removeDuplicates" } ], "tokenizer": { "type": "whitespace" } } ] }
db.minutes.createSearchIndex( "default", { "mappings": { "dynamic": false, "fields": { "title": { "analyzer": "duplicateRemover", "type": "string" } } }, "analyzers": [ { "name": "duplicateRemover", "tokenFilters": [ { "type": "keywordRepeat" }, { "type": "removeDuplicates" } ], "tokenizer": { "type": "whitespace" } } ] } )
A seguinte query pesquisa o title campo na coleção minutos do termo mee* utilizando o wildcard Operador.
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 Search:
{ "$search": { "wildcard": { "query": "mee*", "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": "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 os documentos com o termo meeting no campo de título. O filtro de token keywordRepeat gera os seguintes tokens para os documentos nos resultados:
Título | Keyword Tokens | Non-Keyword tokens |
|---|---|---|
|
|
|
|
|
|
O filtro de token removeDuplicates remove os tokens duplicados no stream.
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
reversepara 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
reverseAnalyzerno 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
reverseAnalyzernos 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 Search:
{ "$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 (MongoDB Search Operator) ou wildcard Operator, 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 campo page_updated_by.email na collection minutos usa dois analisadores customizados, emailAutocompleteIndex e emailAutocompleteSearch, para implementar funcionalidades semelhantes ao preenchimento automático. O MongoDB Search usa o analisador emailAutocompleteIndex durante a criação do índice para:
Substituir
@caracteres em um campo porATCriar 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 porATCriar 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
emailAutocompleteIndexno 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@ATClique 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
15no campo maxTokenLength.Expanda Token Filters e clique em Add token filter.
Selecione shingle no menu suspenso e configure os seguintes campos.
CampoValor do campominShingleSize2
minShingleSize3
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 campominGram2
maxGram15
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
emailAutocompleteSearchno 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@ATClique 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
15no 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
emailAutocompleteIndexno menu suspenso Index Analyzer eemailAutocompleteSearchno 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 Search:
{ "$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.
frenchvariante do filtro de tokensnowballStemmingpara 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
frenchStemmerno 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
frenchno 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
frenchStemmernos 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 Search:
{ "$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.
spanishPluralStemmingfiltro 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
spanishPluralStemmerno 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
spanishPluralStemmernos 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 Search:
{ "$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
stempelAnalyzerno 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
stempelAnalyzernos 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 Search:
{ "$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
stopwordpara remover os tokens que correspondam às palavras vazias definidasis,theeat. 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
stopwordRemoverno 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,atClique 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
stopwordRemovernos 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 Search:
{ "$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
trimpara 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
tokenTrimmerno campo Analyzer Name.Expanda Character Filters e clique em Add character filter.
Selecione htmlStrip no menu suspenso e digite
ano 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
tokenTrimmernos 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 Search:
{ "$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 (MongoDB Search Operator) ou wildcard Operator, 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,theeat. A exclusão diferencia maiúsculas de minúsculas. Por exemplo,IsetHenã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
wordDelimiterGraphAnalyzerno 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,theeat, 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
wordDelimiterGraphAnalyzernos 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 Search:
{ "$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 |
|---|---|
|
|
|
|