Um tokenizador do analisador customizado determina como o MongoDB Search divide o texto em blocos discretos para indexação. Os tokenizadores exigem um campo de tipo e alguns também aceitam opções adicionais.
"tokenizer": { "type": "<tokenizer-type>", "<additional-option>": "<value>" }
Tipos de tokenizador
A pesquisa do MongoDB é compatível com os seguintes tipos de tokenizador:
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.
edgeGram
O tokenizador edgeGram tokeniza a entrada do lado esquerdo, ou a "borda", de uma entrada de texto em n-gramas de determinados tamanhos. Você não pode usar um analisador personalizado com o tokenizador EdgeGram no campo analyzer para definições de mapeamento de campo de sinônimos ou preenchimento automático.
Atributos
Tem os seguintes atributos:
Observação
O tokenizador edgeGram produz vários tokens de saída por palavra e entre palavras no texto de entrada, produzindo gráficos de tokens.
Como os mapeadores e definições de mapeamento de tipo de campo de preenchimento automático com sinônimo funcionam somente quando utilizados com tokenizadores não produtores de gráficos, você não pode utilizar um analisador personalizado com edgeGram tokenizador no campo analyzer para preenchimento automático de definições de mapeamento de tipo de campo ou analisadores com mapeamento de sinônimos.
Nome | Tipo | Obrigatório? | Descrição |
|---|---|---|---|
| string | sim | Etiqueta legível por humanos que identifica este tipo de tokenizador. O valor deve ser |
| inteiro | sim | Número de caracteres a serem incluídos no token mais curto criado. |
| inteiro | sim | Número de caracteres a incluir no token mais longo criado. |
Exemplo
A seguinte definição de índice indexa o campo message na coleção minutes utilizando um analisador customizado denominado edgegramExample. Ele usa o edgeGram tokenizador para criar tokens (termos pesquisáveis) entre 2 e 7 caracteres a partir do primeiro caractere no lado esquerdo das palavras no campo message.
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
edgegramExampleno campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione edgeGram no menu suspenso e digite o valor para os seguintes campos:
CampoValorminGram
2maxGram
7Clique em Add para adicionar o analisador personalizado ao seu índice.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo mensagem.
Selecione a mensagem na lista suspensa Field Name e Cadeia de caracteres na lista suspensa Data Type .
Na seção de propriedades do tipo de dados, selecione
edgegramExamplenos 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:
{ "mappings": { "dynamic": true, "fields": { "message": { "analyzer": "edgegramExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "edgegramExample", "tokenFilters": [], "tokenizer": { "maxGram": 7, "minGram": 2, "type": "edgeGram" } } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": true, 6 "fields": { 7 "message": { 8 "analyzer": "edgegramExample", 9 "type": "string" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "charFilters": [], 16 "name": "edgegramExample", 17 "tokenFilters": [], 18 "tokenizer": { 19 "maxGram": 7, 20 "minGram": 2, 21 "type": "edgeGram" 22 } 23 } 24 ] 25 } 26 )
A seguinte query pesquisa o campo message na coleção minutes para texto que começa com tr.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
Substitua a query padrão pelo seguinte e clique em Find:
{ "$search": { "text": { "query": "tr", "path": "message" } } } SCORE: 0.3150668740272522 _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.3150668740272522 _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>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "tr", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1 14 } 15 } 16 ])
{ _id: 1, message: 'try to siGn-In' }, { _id: 3, message: 'try to sign-in' }
O MongoDB Search retorna documentos com _id: 1 e _id: 3 nos resultados porque o MongoDB Search criou um token com o valor tr usando o tokenizador edgeGram para os documentos, o que corresponde ao termo de pesquisa . Se você indexar o campo message usando o tokenizador standard, o MongoDB Search não retornará nenhum resultado para o termo de pesquisa tr.
A tabela a seguir mostra os tokens que o tokenizador edgeGram e, por comparação, o tokenizador standard criam para os documentos nos resultados:
Tokenizador | Token Outputs |
|---|---|
|
|
|
|
keyword
O tokenizador keyword tokeniza toda a entrada como um único token. O MongoDB Search não indexa campos de strings que excedam 32766 caracteres usando o tokenizador keyword .
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
|---|---|---|---|
| string | sim | Etiqueta legível por humanos que identifica este tipo de tokenizador. O valor deve ser |
Exemplo
A seguinte definição de índice indexa o campo message na coleção minutes utilizando um analisador customizado denominado keywordExample. Ele usa o tokenizador keyword para criar um token (termos pesquisáveis) em todo o campo como um único termo.
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
keywordExampleno campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione keyword no menu suspenso.
Clique em Add para adicionar o analisador personalizado ao seu índice.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado 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
keywordExamplenos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte:
1 { 2 "mappings": { 3 "dynamic": true, 4 "fields": { 5 "message": { 6 "analyzer": "keywordExample", 7 "type": "string" 8 } 9 } 10 }, 11 "analyzers": [ 12 { 13 "charFilters": [], 14 "name": "keywordExample", 15 "tokenFilters": [], 16 "tokenizer": { 17 "type": "keyword" 18 } 19 } 20 ] 21 }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": true, 6 "fields": { 7 "message": { 8 "analyzer": "keywordExample", 9 "type": "string" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "charFilters": [], 16 "name": "keywordExample", 17 "tokenFilters": [], 18 "tokenizer": { 19 "type": "keyword" 20 } 21 } 22 ] 23 } 24 )
A seguinte consulta pesquisa o campo message na coleção minutes para a frase try to sign-in.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
Substitua a query padrão pelo seguinte e clique em Find:
{ "$search": { "text": { "query": "try to sign-in", "path": "message" } } } SCORE: 0.5472603440284729 _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>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "try to sign-in", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1 14 } 15 } 16 ])
{ _id: 3, message: 'try to sign-in' }
O MongoDB Search retorna o documento com _id: 3 nos resultados porque o MongoDB Search criou um token com o valor try to sign-in usando o tokenizador de keyword para os documentos, que corresponde ao termo de pesquisa. Se você indexar o campo message usando o tokenizador standard , o MongoDB Search retornará documentos com _id: 1, _id: 2 e _id: 3 para o termo de pesquisa try to sign-in porque cada documento contém alguns dos tokens do standard o tokenizador cria.
A tabela a seguir mostra os tokens que o tokenizador keyword e, em comparação, o tokenizador standard, criam para o documento com _id: 3:
Tokenizador | Token Outputs |
|---|---|
|
|
|
|
nGram
O nGram tokenizador tokeniza em blocos de texto, ou "n-grams", de determinados tamanhos. Você não pode utilizar um analisador customizado com token nGram no analyzer campo para sinônimo ou autocompletar definições de mapeamento de campo.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
|---|---|---|---|
| string | sim | Etiqueta legível por humanos que identifica este tipo de tokenizador. O valor deve ser |
| inteiro | sim | Número de caracteres a serem incluídos no token mais curto criado. |
| inteiro | sim | Número de caracteres a incluir no token mais longo criado. |
Exemplo
A seguinte definição de índice indexa o campo title na coleção minutes utilizando um analisador personalizado denominado ngramExample. Ele usa o token nGram para criar tokens (termos pesquisáveis) entre 4 e 6 caracteres no campo title.
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
ngramAnalyzerno campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione nGram no menu suspenso e digite o valor para os seguintes campos:
CampoValorminGram
4maxGram
6Clique em Add para adicionar o analisador personalizado ao seu índice.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo mensagem.
Selecione a mensagem na lista suspensa Field Name e Cadeia de caracteres na lista suspensa Data Type .
Na seção de propriedades do tipo de dados, selecione
ngramAnalyzernos menus suspensos Index Analyzer e Search Analyzer.Clique em Add e depois em Save Changes.
Substitua a definição de índice padrão pelo seguinte:
1 { 2 "mappings": { 3 "dynamic": true, 4 "fields": { 5 "title": { 6 "analyzer": "ngramExample", 7 "type": "string" 8 } 9 } 10 }, 11 "analyzers": [ 12 { 13 "charFilters": [], 14 "name": "ngramExample", 15 "tokenFilters": [], 16 "tokenizer": { 17 "maxGram": 6, 18 "minGram": 4, 19 "type": "nGram" 20 } 21 } 22 ] 23 }
db.minutes.createSearchIndex("default", { "mappings": { "dynamic": true, "fields": { "title": { "analyzer": "ngramExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "ngramExample", "tokenFilters": [], "tokenizer": { "maxGram": 6, "minGram": 4, "type": "nGram" } } ] })
A query a seguir pesquisa o termo week no campo title na coleção minutes.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
Substitua a query padrão pelo seguinte e clique em Find:
{ "$search": { "index": "default", "text": { "query": "week", "path": "title" } } } SCORE: 0.5895273089408875 _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"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "week", 6 "path": "title" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "title": 1 14 } 15 } 16 ])
{ _id: 1, title: "The team's weekly meeting" }
O MongoDB Search retorna o documento com _id: 1 nos resultados porque o MongoDB Search criou um token com o valor week usando o tokenizador de nGram para os documentos, que corresponde ao termo de pesquisa. Se você indexar o campo title usando o tokenizador standard ou edgeGram , o MongoDB Search não retornará nenhum resultado para o termo de pesquisa week.
A tabela a seguir mostra os tokens que o tokenizador nGram e, por comparação, os tokenizadores standard e edgeGram criam para o documento com _id: 1:
Tokenizador | Token Outputs |
|---|---|
|
|
|
|
|
|
regexCaptureGroup
O tokenizador regexCaptureGroup corresponde a um padrão de expressão regular Java para extrair tokens.
Dica
Para saber mais sobre a sintaxe de expressão regular Java, consulte a classe Padrão na documentação Java.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
|---|---|---|---|
| string | sim | Etiqueta legível por humanos que identifica este tipo de tokenizador. O valor deve ser |
| string | sim | Expressão regular para correspondência. |
| inteiro | sim | Índice do grupo de caracteres dentro da expressão correspondente para extrair em tokens. Use |
Exemplo
A seguinte definição de índice indexa o campo page_updated_by.phone na coleção minutes utilizando um analisador personalizado denominado phoneNumberExtractor. Ele usa:
mappingsfiltro de caracteres para remover parênteses em torno dos três primeiros dígitos e substituir todos os espaços e pontos por traçosregexCaptureGrouptokenizador para criar um único token a partir do primeiro número de telefone formatado nos EUA presente na entrada de texto
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
phoneNumberExtractorno campo Analyzer Name.Expanda Character Filters e clique em Add character filter.
Selecione mapping no menu suspenso e clique em Add mapping.
Insira os seguintes caracteres no campo Original, um de cada vez e deixe o campo Replacement correspondente vazio.
OriginalSubstituição-.()Clique em Add character filter.
Expanda Tokenizer se estiver recolhido.
Selecione regexCaptureGroup no menu suspenso e digite o valor para os seguintes campos:
CampoValorpattern
^\\b\\d{3}[-]?\\d{3}[-]?\\d{4}\\b$group
0Clique em Add para adicionar o analisador personalizado ao seu índice.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo page_updated_by.phone.
Selecione page_updated_by.phone no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
phoneNumberExtractornos 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": true, "fields": { "page_updated_by": { "fields": { "phone": { "analyzer": "phoneNumberExtractor", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "charFilters": [ { "mappings": { " ": "-", "(": "", ")": "", ".": "-" }, "type": "mapping" } ], "name": "phoneNumberExtractor", "tokenFilters": [], "tokenizer": { "group": 0, "pattern": "^\\b\\d{3}[-]?\\d{3}[-]?\\d{4}\\b$", "type": "regexCaptureGroup" } } ] }
db.minutes.createSearchIndex("default", { "mappings": { "dynamic": true, "fields": { "page_updated_by": { "fields": { "phone": { "analyzer": "phoneNumberExtractor", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "charFilters": [ { "mappings": { " ": "-", "(": "", ")": "", ".": "-" }, "type": "mapping" } ], "name": "phoneNumberExtractor", "tokenFilters": [], "tokenizer": { "group": 0, "pattern": "^\\b\\d{3}[-]?\\d{3}[-]?\\d{4}\\b$", "type": "regexCaptureGroup" } } ] })
A seguinte query pesquisa o campo page_updated_by.phone na coleção minutes para o número de telefone 123-456-9870.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
Substitua a query padrão pelo seguinte e clique em Find:
{ "$search": { "index": "default", "text": { "query": "123-456-9870", "path": "page_updated_by.phone" } } } SCORE: 0.5472603440284729 _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>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "123-456-9870", 6 "path": "page_updated_by.phone" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.phone": 1 14 } 15 } 16 ])
{ _id: 3, page_updated_by: { phone: '(123).456.9870' }
O MongoDB Search retorna o documento com _id: 3 nos resultados porque o MongoDB Search criou um token com o valor 123-456-7890 usando o tokenizador de regexCaptureGroup para os documentos, que corresponde ao termo de pesquisa. Se você indexar o campo page_updated_by.phone usando o tokenizador standard , o MongoDB Search retornará todos os documentos do termo de pesquisa 123-456-7890.
A tabela a seguir mostra os tokens que o tokenizador regexCaptureGroup e, em comparação, o tokenizador standard, criam para o documento com _id: 3:
Tokenizador | Token Outputs |
|---|---|
|
|
|
|
regexSplit
O tokenizador regexSplit divide tokens com um delimitador baseado na expressão regular do Java.
Dica
Para saber mais sobre a sintaxe de expressão regular do Java, consulte a classe Pattern na documentação do Java.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
|---|---|---|---|
| string | sim | Etiqueta legível por humanos que identifica este tipo de tokenizador. O valor deve ser |
| string | sim | Expressão regular para correspondência. |
Exemplo
A definição de índice a seguir indexa o field page_updated_by.phone na collection minutes usando um analyzer customizado chamado dashDotSpaceSplitter. Ele usa o tokenizador regexSplit para criar tokens (termos pesquisáveis) a partir de um ou mais hífens, pontos e espaços no campo page_updated_by.phone .
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
dashDotSpaceSplitterno campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione regexSplit no menu suspenso e digite o valor para o seguinte campo:
CampoValorpattern
[-. ]+Clique em Add para adicionar o analisador personalizado ao seu índice.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo page_updated_by.phone.
Selecione page_updated_by.phone no menu suspenso Field Name e String no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
dashDotSpaceSplitternos 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:
{ "mappings": { "dynamic": true, "fields": { "page_updated_by": { "fields": { "phone": { "analyzer": "dashDotSpaceSplitter", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "charFilters": [], "name": "dashDotSpaceSplitter", "tokenFilters": [], "tokenizer": { "pattern": "[-. ]+", "type": "regexSplit" } } ] }
db.minutes.createSearchIndex("default", { "mappings": { "dynamic": true, "fields": { "page_updated_by": { "fields": { "phone": { "analyzer": "dashDotSpaceSplitter", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "charFilters": [], "name": "dashDotSpaceSplitter", "tokenFilters": [], "tokenizer": { "pattern": "[-. ]+", "type": "regexSplit" } } ] })
A seguinte query pesquisa o campo page_updated_by.phone na coleção minutes para os dígitos 9870.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
Substitua a query padrão pelo seguinte e clique em Find:
{ "$search": { "index": "default", "text": { "query": "9870", "path": "page_updated_by.phone" } } } SCORE: 0.5472603440284729 _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>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "9870", 6 "path": "page_updated_by.phone" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.phone": 1 14 } 15 } 16 ])
{ _id: 3, page_updated_by: { phone: '(123).456.9870' }
O MongoDB Search retorna o documento com _id: 3 nos resultados porque o MongoDB Search criou um token com o valor 9870 usando o tokenizador de regexSplit para os documentos, que corresponde ao termo de pesquisa. Se você indexar o campo page_updated_by.phone usando o tokenizador standard , o MongoDB Search não retornará nenhum resultado para o termo de pesquisa 9870.
A tabela a seguir mostra os tokens que o tokenizador regexCaptureGroup e, em comparação, o tokenizador standard, criam para o documento com _id: 3:
Tokenizador | Token Outputs |
|---|---|
|
|
|
|
padrão
O tokenizador standard tokeniza com base nas regras de quebra de palavras do algoritmo de segmentação de texto Unicode.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
|---|---|---|---|
| string | sim | Etiqueta legível por humanos que identifica este tipo de tokenizador. O valor deve ser |
| inteiro | no | Comprimento máximo para um único token. Os tokens maiores que este comprimento são divididos em Padrão: |
Exemplo
A seguinte definição de índice indexa o campo message na collection minutes utilizando um analisador customizado denominado standardExample. Ele usa o tokenizer standard e o filtro de token stopword.
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
standardExampleno campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione standard no menu suspenso.
Clique em Add para adicionar o analisador personalizado ao seu índice.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador 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
standardExamplenos 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:
{ "mappings": { "dynamic": true, "fields": { "message": { "analyzer": "standardExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "standardExample", "tokenFilters": [], "tokenizer": { "type": "standard" } } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": true, 6 "fields": { 7 "message": { 8 "analyzer": "standardExample", 9 "type": "string" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "charFilters": [], 16 "name": "standardExample", 17 "tokenFilters": [], 18 "tokenizer": { 19 "type": "standard" 20 } 21 } 22 ] 23 } 24 )
A query a seguir pesquisa o termo signature no campo message na coleção minutes.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
Substitua a query padrão pelo seguinte e clique em Find:
{ "$search": { "text": { "query": "signature", "path": "message" } } } SCORE: 0.5376965999603271 _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 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."
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "signature", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1 14 } 15 } 16 ])
{ _id: 4, message: 'write down your signature or phone №' }
O MongoDB Search retorna o documento com _id: 4 porque o MongoDB Search criou um token com o valor signature usando o tokenizador standard para os documentos, que corresponde ao termo de pesquisa . Se você indexar o campo message usando o tokenizador keyword , o MongoDB Search não retornará nenhum resultado para o termo de pesquisa signature.
A tabela a seguir mostra os tokens que o tokenizador standard e, por comparação, o analisador keyword, criam para o documento com _id: 4:
Tokenizador | Token Outputs |
|---|---|
|
|
|
|
uaxUrlEmail
O tokenizador uaxUrlEmail tokeniza URLs e endereços de e-mail. Embora o tokenizador uaxUrlEmail tokenize com base nas regras de quebra de palavras do algoritmo de segmentação de texto Unicode, recomendamos usar o tokenizador uaxUrlEmail apenas quando o valor do campo indexado incluir URLs e endereços de e-mail. Para campos que não incluem URLs ou endereços de e-mail, use o tokenizador padrão para criar tokens com base em regras de quebra de palavras.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
|---|---|---|---|
| string | sim | Etiqueta legível por humanos que identifica este tipo de tokenizador. O valor deve ser |
| int | no | Número máximo de caracteres em um token. Padrão: |
Exemplo
A definição de índice a seguir indexa o field page_updated_by.email na collection minutes usando um analyzer customizado chamado basicEmailAddressAnalyzer. Ele usa o tokenizador uaxUrlEmail para criar tokens (termos pesquisáveis) a partir de URLse endereços de e-mail no campo page_updated_by.email.
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
basicEmailAddressAnalyzerno campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione uaxUrlEmail no menu suspenso.
Clique em Add para adicionar o analisador personalizado ao seu índice.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo page_updated_by.email.
Selecione page_updated_by.email do {0} menu suspenso Cadeia de caracteres do {1} menu suspenso.
Na seção de propriedades do tipo de dados, selecione
basicEmailAddressAnalyzernos 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:
{ "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "basicEmailAddressAnalyzer", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "name": "basicEmailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] }
db.minutes.createSearchIndex("default", { "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "basicEmailAddressAnalyzer", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "name": "basicEmailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] })
A query a seguir procura o campo page_updated_by.email na collection minutes para o email lewinsky@example.com.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
Substitua a query padrão pelo seguinte e clique em Find:
{ "$search": { "text": { "query": "lewinsky@example.com", "path": "page_updated_by.email" } } } SCORE: 0.5472603440284729 _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>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "autocomplete": { 5 "query": "lewinsky@example.com", 6 "path": "page_updated_by.email" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.email": 1 14 } 15 } 16 ])
{ _id: 3, page_updated_by: { email: 'lewinsky@example.com' } }
O MongoDB Search retorna o documento com _id: 3 nos resultados porque o MongoDB Search criou um token com o valor lewinsky@example.com usando o tokenizador de uaxUrlEmail para os documentos, que corresponde ao termo de pesquisa. Se você indexar o campo page_updated_by.email usando o tokenizador standard , o MongoDB Search retornará todos os documentos para o termo de pesquisa lewinsky@example.com.
A tabela a seguir mostra os tokens que o tokenizador uaxUrlEmail e, em comparação, o tokenizador standard, criam para o documento com _id: 3:
Tokenizador | Token Outputs |
|---|---|
|
|
|
|
A seguinte definição de índice indexa o campo page_updated_by.email na coleção minutes utilizando um analisador personalizado denominado emailAddressAnalyzer. Ele usa:
O tipo autocomplete com uma estratégia de tokenização
edgeGramO tokenizador
uaxUrlEmailpara criar tokens (termos pesquisáveis) a partir de URLse endereços de e-mail
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
emailAddressAnalyzerno campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione uaxUrlEmail no menu suspenso.
Clique em Add para adicionar o analisador personalizado ao seu índice.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo page_updated_by.email.
Selecione page_updated_by.email no menu suspenso Field Name e Preenchimento automático no menu suspenso Data Type.
Na seção de propriedades do tipo de dados, selecione
emailAddressAnalyzernos 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:
{ "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "emailAddressAnalyzer", "tokenization": "edgeGram", "type": "autocomplete" } }, "type": "document" } } }, "analyzers": [ { "name": "emailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] }
db.minutes.createSearchIndex("default", { "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "emailAddressAnalyzer", "tokenization": "edgeGram", "type": "autocomplete" } }, "type": "document" } } }, "analyzers": [ { "name": "emailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] })
A query a seguir pesquisa o termo exam no campo page_updated_by.email na coleção minutes.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
Substitua a query padrão pelo seguinte e clique em Find:
{ "$search": { "autocomplete": { "query": "lewinsky@example.com", "path": "page_updated_by.email" } } } SCORE: 1.0203158855438232 _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>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "autocomplete": { 5 "query": "lewinsky@example.com", 6 "path": "page_updated_by.email" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.email": 1 14 } 15 } 16 ])
{ _id: 3, page_updated_by: { email: 'lewinsky@example.com' } }
O MongoDB Search retorna o documento com _id: 3 nos resultados porque o MongoDB Search criou um token com o valor lewinsky@example.com usando o tokenizador de uaxUrlEmail para os documentos, que corresponde ao termo de pesquisa. Se você indexar o campo page_updated_by.email usando o tokenizador standard , o MongoDB Search retornará todos os documentos para o termo de pesquisa lewinsky@example.com.
A tabela a seguir mostra os tokens que o tokenizador uaxUrlEmail e, em comparação, o tokenizador standard, criam para o documento com _id: 3:
Tokenizador | Tipo de campo de pesquisa do MongoDB | Token Outputs |
|---|---|---|
|
|
|
|
|
|
whitespace
O tokenizador whitespace tokeniza com base em ocorrências de espaços em branco entre as palavras.
Atributos
Tem os seguintes atributos:
Nome | Tipo | Obrigatório? | Descrição |
|---|---|---|---|
| string | sim | Etiqueta legível por humanos que identifica este tipo de tokenizador. O valor deve ser |
| inteiro | no | Comprimento máximo para um único token. Os tokens maiores que este comprimento são divididos em Padrão: |
Exemplo
A seguinte definição de índice indexa o campo message na coleção minutes utilizando um analisador personalizado denominado whitespaceExample. Ele utiliza o token whitespace para criar tokens (termos pesquisáveis) a partir de quaisquer espaços em branco no campo message.
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
whitespaceExampleno campo Analyzer Name.Expanda Tokenizer se estiver recolhido.
Selecione whitespace no menu suspenso.
Clique em Add para adicionar o analisador personalizado ao seu índice.
Na seção Field Mappings, clique em Add Field Mapping para aplicar o analisador personalizado no campo mensagem.
Selecione a mensagem na lista suspensa Field Name e Cadeia de caracteres na lista suspensa Data Type .
Na seção de propriedades do tipo de dados, selecione
whitespaceExamplenos 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": true, "fields": { "message": { "analyzer": "whitespaceExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "whitespaceExample", "tokenFilters": [], "tokenizer": { "type": "whitespace" } } ] }
db.minutes.createSearchIndex("default", { "mappings": { "dynamic": true, "fields": { "message": { "analyzer": "whitespaceExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "whitespaceExample", "tokenFilters": [], "tokenizer": { "type": "whitespace" } } ] })
A query a seguir pesquisa o termo SIGN-IN no campo message na coleção minutes.
Clique no botão Query para o seu índice.
Clique em Edit Query para editar a query.
Clique em na barra de query e selecione o banco de dados e a coleção.
Substitua a query padrão pelo seguinte e clique em Find:
{ "$search": { "text": { "query": "sign-in", "path": "message" } } } SCORE: 0.6722691059112549 _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>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "sign-in", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1 14 } 15 } 16 ])
[ { _id: 3, message: 'try to sign-in' } ]
O MongoDB Search retorna o documento com _id: 3 nos resultados porque o MongoDB Search criou um token com o valor sign-in usando o tokenizador de whitespace para os documentos, que corresponde ao termo de pesquisa. Se você indexar o campo message usando o tokenizador standard , o MongoDB Search retornará documentos com _id: 1, _id: 2 e _id: 3 para o termo de pesquisa sign-in.
A tabela a seguir mostra os tokens que o tokenizador whitespace e, em comparação, o tokenizador standard, criam para o documento com _id: 3:
Tokenizador | Token Outputs |
|---|---|
|
|
|
|