Un filtro de tokens realiza operaciones como las siguientes:
Stemming, que reduce palabras relacionadas, como "talking", "talked" y "talks", a su palabra raíz "talk".
La restricción, la eliminación de información sensible de documentos públicos.
Los filtros de tokens requieren un campo de tipo, y algunos también aceptan opciones adicionales.
"tokenFilters": [ { "type": "<token-filter-type>", "<additional-option>": <value> } ]
Tipos de filtros de tokens
MongoDB Search admite los siguientes tipos de filtro de token:
Las siguientes definiciones de índice y consultas de ejemplo utilizan el colección de muestras llamada minutes. Para seguir estos ejemplos, carga la colección minutes en tu clúster y navega a la Create a Search Index page en la interfaz de usuario de Atlas siguiendo los pasos del tutorial Crear un índice de búsqueda de MongoDB. A continuación, selecciona la colección minutes como tu fuente de datos y sigue el procedimiento de ejemplo para crear un índice desde la Interfaz de Usuario de Atlas o utilizando mongosh.
➤ Utilice el menú desplegable Seleccione su lenguaje para establecer el idioma del ejemplo en esta página.
asciiFolding
El filtro de tokens asciiFolding convierte caracteres unicode alfabéticos, numéricos y simbólicos que no están en el Bloque Unicode Latino Básico
a su ASCII equivalentes, si están disponibles.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
| string | no | String que especifica si se incluyen o se omiten los tokens originales en la salida del filtro de tokens. El valor puede ser uno de los siguientes:
Por defecto: |
Ejemplo
La siguiente definición de índice indexa el campo page_updated_by.first_name en la colección minutes con un analizador personalizado llamado asciiConverter. El analizador personalizado especifica lo siguiente:
Aplica el tokenizador estándar para crear tokens basados en reglas de corte de palabra.
Aplica el filtro de tokens
asciiFoldingpara convertir los valores de campo a su equivalente en ASCII.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
asciiConverteren el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona standard del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona asciiFolding del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haga clic en Add Field Mapping para aplicar el analizador personalizado en la página_actualizado_por.first_name .
Selecciona page_updated_by.first_name del menú desplegable Field Name y String del menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
asciiConverterde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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 )
La siguiente query busca en el campo first_name de la colección de minutos nombres que utilicen su equivalente ASCII.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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'} } ]
MongoDB Search devuelve el documento con _id: 1 en los resultados porque MongoDB Search creó los siguientes tokens (términos que se pueden buscar) para el campo page_updated_by.first_name en el documento, que luego utilizó para hacer coincidir el término de query Sian.
Nombre de campo | Tokens de salida |
|---|---|
|
|
daitchMokotoffSoundex
El filtro de token daitchMokotoffSoundex crea tokens para palabras que suenan igual según el algoritmo fonético Daitch-Mokotoff Soundex. Este filtro puede generar múltiples codificaciones para cada dato de entrada, donde cada token codificado es un número de 6 dígitos.
Nota
No utilices el filtro de tokens daitchMokotoffSoundex en:
Sinónimo o definiciones de asignación de tipo autocompletar.
Operadores donde
fuzzyestá habilitado. MongoDB Search admite la opciónfuzzypara los siguientes operadores:
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
| string | no | String que especifica si se incluyen o se omiten los tokens originales en la salida del filtro de tokens. El valor puede ser uno de los siguientes:
Por defecto: |
Ejemplo
La siguiente definición de índice indexa el campo page_updated_by.last_name en la colección minutes con un analizador personalizado llamado dmsAnalyzer. El analizador personalizado especifica lo siguiente:
Aplica el tokenizador estándar para crear tokens basados en reglas de corte de palabra.
Aplica el filtro de token
daitchMokotoffSoundexpara codificar los tokens de palabras que suenan igual.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
dmsAnalyzeren el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona standard del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona daitchMokotoffSoundex del menú desplegable y selecciona el valor mostrado en la siguiente tabla para el campo originalTokens:
CampoValororiginalTokensincludeHaga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado en el page_updated_by.last_name campo.
Seleccionar page_updated_by.last_name del menú desplegable Field Name y String del menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
dmsAnalyzerde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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 )
La siguiente query busca términos que suenen similares a AUERBACH en el campo page_updated_by.last_name de la colección de minutas.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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" } } ]
MongoDB Search devuelve documentos con _id: 1 y _id: 2 porque los términos en ambos documentos son fonéticamente similares y están codificados usando los mismos seis dígitos (097400 y 097500). La siguiente tabla muestra los tokens (términos buscables y codificaciones de seis dígitos) que MongoDB Search crea para los documentos en los resultados:
ID de documento | Tokens de salida |
|---|---|
|
|
|
|
edgeGram
El filtro de token edgeGram tokeniza la entrada desde el lado izquierdo, o «borde», de una entrada de texto, en n-gramas de tamaños configurados.
Nota
Normalmente, los filtros de tokens funcionan de manera similar a una pipeline, donde cada token de entrada genera como máximo un token de salida que luego se introduce en el siguiente token. En cambio, el edgeGram filtro de tokens es un filtro generador de grafos que produce múltiples tokens de salida a partir de un único token de entrada.
Debido a que las definiciones de mapeo de tipos de campo de sinónimos y autocompletado solo funcionan cuando se utilizan con filtros de token que no producen gráficos, no se puede usar el filtro de token edgeGram en definiciones de mapeo de tipos de campo de sinónimos ni autocompletado.
Para realizar consultas con regex (MongoDB Search Operator) o wildcard operador, no se puede usar el filtro de tokens edgeGram como el searchAnalyzer, ya que produce más de un token de salida por token de entrada. Especifique un analizador diferente como el searchAnalyzer en su definición de índice.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
| entero | Sí | Número que especifica la longitud mínima de n-gramas generados. El valor debe ser menor o igual a |
| entero | Sí | El número que indica la longitud máxima de los n-gramas generados. El valor debe ser mayor o igual a |
| string | no | String que especifica si se deben indexar los tokens más cortos que
Si se especifica Por defecto: |
Ejemplo
La siguiente definición de índice indexa el campo title en la colección minutes con un analizador personalizado llamado titleAutocomplete. El analizador personalizado especifica lo siguiente:
Aplica el tokenizador estándar para crear tokens basados en reglas de corte de palabra.
Aplicar los siguientes filtros a los tokens:
icuFoldingfiltro de token para aplicar conversiones de caracteres a los tokens.edgeGramfiltro de tokens para crear tokens de 4 a 7 caracteres de largo desde el lado izquierdo.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
titleAutocompleteen el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona standard del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona icuFolding del menú desplegable y haz clic en Add token filter para añadir el filtro de tokens al analizador personalizado.
Haz clic en Add token filter para agregar otro filtro de token.
Seleccione edgeGram del menú desplegable y escriba el valor que se muestra en la siguiente tabla para los campos:
CampoValorminGram4
maxGram7
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado al campo título.
Seleccione título del menú desplegable Field Name y string del menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
titleAutocompletede los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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 )
La siguiente query busca en el campo title de la colección de minutos los términos que comienzan con mee, seguidos de cualquier cantidad de otros caracteres.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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' } ]
MongoDB Search devuelve documentos con _id: 1 y _id: 3 porque los documentos contienen el término meeting, que coincide con los criterios de la query. Específicamente, MongoDB Search crea los siguientes tokens de 4 a 7 caracteres (términos buscables) para los documentos en los resultados, que luego empareja con el término de query mee*:
ID de documento | Tokens de salida |
|---|---|
|
|
|
|
englishPossessive
El filtro de token englishPossessive remueve los posesivos ('s final) de las palabras.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
Ejemplo
La siguiente definición de índice indexa el campo title en la colección minutes con un analizador personalizado llamado englishPossessiveStemmer. El analizador personalizado especifica lo siguiente:
Aplicar el tokenizador estándar para crear tokens (términos de búsqueda) basados en reglas de separación de palabras.
Aplica el filtro de tokens englishPossessive para remover los posesivos (terminaciones en
's) de los tokens.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
englishPossessiveStemmeren el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona standard del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona englishPossessive del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado al campo título.
Seleccione título del menú desplegable Field Name y string del menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
englishPossessiveStemmerde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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 )
La siguiente query busca el campo title en la colección de actas para el término team.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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' } ]
MongoDB Search devuelve resultados que contienen el término team en el campo title. MongoDB Search devuelve el documento con _id: 1 porque MongoDB Search transforma team's en el campo title en el token team durante el análisis. En concreto, MongoDB Search crea los siguientes tokens (términos buscables) para los documentos de los resultados, que luego hace coincidir con el término de la query:
ID de documento | Tokens de salida |
|---|---|
|
|
|
|
aplanar grafo
El filtro de tokens flattenGraph transforma un grafo de filtro de tokens en una forma plana adecuada para la indexación. Si utilizas el filtro de token wordDelimiterGraph, utiliza este filtro después del filtro de token wordDelimiterGraph.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
Ejemplo
La siguiente definición de índice indexa el campo message en la colección de minutos utilizando un analizador personalizado llamado wordDelimiterGraphFlatten. El analizador personalizado especifica lo siguiente:
Aplicar el tokenizador de espacios para crear tokens basados en la ocurrencia de espacios entre palabras.
Aplica los siguientes filtros a los tokens:
El filtro de tokens wordDelimiterGraph para dividir tokens según subpalabras, genera tokens para las palabras originales y también protege la palabra
SIGN_INde la delimitación.flattenGraph filtro de tokens para aplanar los tokens a una forma plana.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
wordDelimiterGraphFlattenen el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona whitespace del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Seleccione wordDelimiterGraph del menú desplegable y configure los siguientes campos para el filtro de tokens.
Seleccione los siguientes campos:
CampoValordelimiterOptions.generateWordPartstrue
delimiterOptions.preserveOriginaltrue
Escriba
SIGN_INen el campoprotectedWords.words.Seleccione
protectedWords.ignoreCase.
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haz clic en Add token filter para agregar otro filtro de token.
Selecciona flattenGraph del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haga clic en Add Field Mapping para aplicar el analizador personalizado en el campo mensaje.
Selecciona mensaje del desplegable Field Name y String del desplegable Data Type .
En la sección de propiedades para el tipo de dato, selecciona
wordDelimiterGraphFlattende los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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 )
La siguiente query busca el campo message en la colección de actas para el término sign.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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' } ]
MongoDB Search devuelve el documento con _id: 3 en los resultados para el término de query sign, aunque el documento contiene el término con guion sign-in en el campo title. El filtro de tokens wordDelimiterGraph crea un grafo de filtros de tokens y el filtro de tokens flattenGraph transforma el grafo de filtros de tokens en una forma plana adecuada para la indexación. Específicamente, MongoDB Search crea los siguientes tokens (términos buscables) para el documento en los resultados, los cuales luego compara con el término de query sign:
ID de documento | Tokens de salida |
|
|
icuFolding
El filtro de tokens icuFolding aplica plegado de caracteres a partir de Informe Técnico Unicode n.º30, como la eliminación de acentos, el plegado de mayúsculas y minúsculas, el plegado de duplicados canónicos y muchos otros detalles en el informe.
Atributos
Tiene el siguiente atributo:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
Ejemplo
La siguiente definición de índice indexa el campo text.sv_FI en la colección minutes con un analizador personalizado llamado diacriticFolder. El analizador personalizado especifica lo siguiente:
Aplica el tokenizador de palabras clave para tokenizar todos los términos en el campo de la string como un solo término.
Utiliza el filtro de tokens
icuFoldingpara aplicar normalizaciones como la eliminación de acentos, normalización de mayúsculas, normalización de duplicados canónicos, entre otros.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
diacriticFolderen el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona keyword del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona icuFolding del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haga clic en Add Field Mapping para aplicar el analizador personalizado en el text.sv_FI campo anidado.
Selecciona text.sv_FI anidado desde el menú desplegable Field Name y String desde el menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
diacriticFolderde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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 )
La siguiente query utiliza el operador comodín para buscar en el campo text.sv_FI de la colección minutos todos los términos que contengan el término avdelning, precedidos y seguidos por cualquier cantidad de otros caracteres.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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' } } ]
MongoDB Search devuelve el documento con _id: 1 y _id: 2 en los resultados porque los documentos contienen el término de query avdelning seguido de otros caracteres en el documento con _id: 1 y precedido y seguido por otros caracteres en el documento con _id: 2. Específicamente, MongoDB Search crea los siguientes tokens para los documentos en los resultados, que luego compara con el término de query *avdelning*.
ID de documento | Tokens de salida |
|---|---|
|
|
|
|
icuNormalizer
El filtro de tokens icuNormalizer normaliza los tokens utilizando un modo de normalización Unicode estándar.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
| string | no | Forma de normalización a aplicar. Los valores aceptados son:
Para obtener más información sobre las formas de normalización compatibles, consulte Sección 1.2: Formas de normalización, UTR#15. Por defecto: |
Ejemplo
La siguiente definición de índice indexa el campo message en la colección minutes con un analizador personalizado llamado textNormalizer. El analizador personalizado especifica lo siguiente:
Utilice el tokenizador de espacios en blanco para crear tokens en función de la aparición de espacios en blanco entre palabras.
Utilice el filtro de tokens
icuNormalizerpara normalizar los tokens mediante la Descomposición de Compatibilidad, seguida de la Composición Canónica.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
textNormalizeren el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona whitespace del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona icuNormalizer del menú desplegable y selecciona
nfkcdel menú desplegable normalizationForm.Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haga clic en Add Field Mapping para aplicar el analizador personalizado en el campo mensaje.
Selecciona mensaje del desplegable Field Name y String del desplegable Data Type .
En la sección de propiedades para el tipo de dato, selecciona
textNormalizerde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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 )
La siguiente query busca el campo message en la colección de actas para el término 1.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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.' } ]
MongoDB Search devuelve el documento con _id: 2 en los resultados para el término de query 1 incluso aunque el documento contiene el número rodeado ① en el campo message porque el filtro de token icuNormalizer crea el token 1 para este carácter utilizando la forma de normalización nfkc. La siguiente tabla muestra los tokens (términos buscables) que MongoDB Search crea para el documento en los resultados utilizando la forma de normalización nfkc y, por comparación, los tokens que crea para las otras formas de normalización.
Formas de normalización | Tokens de salida | Coincidencias |
|
| X |
|
| X |
|
| √ |
|
| √ |
keywordRepeat
El filtro de tokens keywordRepeat genera cada token entrante dos veces, como palabra clave y como palabra clave negativa. Puedes convertir el token no-palabra clave utilizando filtros de token posteriores y conservar el token clave. Esto puede usarse para impulsar coincidencias exactas y recuperar coincidencias con raíz. Esto se utiliza normalmente en conjunto con un filtro de stemming, como porterStemming, seguido de removeDuplicates.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
Ejemplo
La siguiente definición de índice indexa el campo title en la colección minutes con un analizador personalizado llamado keywordStemRemover. El analizador personalizado especifica lo siguiente:
Aplicar el tokenizador de espacios para crear tokens basados en la ocurrencia de espacios entre palabras.
Aplicar los siguientes filtros a los tokens:
keywordRepeat filtro de tokens para crear tokens dos veces: una como token de palabra clave y otra como token que no es palabra clave.
porterStemming filtro de tokens para remover los sufijos morfológicos y flexivos comunes de los tokens que no son palabras clave.
removeDuplicates para filtrar tokens en la misma posición para el mismo término que el token anterior en el flujo.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
keywordStemRemoveren el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona whitespace del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Seleccione keywordRepeat en la lista desplegable y haga clic en Add token filter.
Haga clic en Add token filter para agregar los siguientes filtros de token a su analizador personalizado:
removeDuplicates
porterStemming
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado al campo título.
Seleccione título del menú desplegable Field Name y string del menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
keywordStemRemoverde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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 )
La siguiente query busca en el campo title de la colección minutes el término mee* usando el wildcard operador.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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' } ]
MongoDB Search devuelve los documentos que contienen el término meeting en el campo de título. El filtro de tokens keywordRepeat genera los siguientes tokens para los documentos en los resultados:
Título | Keyword Tokens | Non-Keyword tokens |
|---|---|---|
|
|
|
|
|
|
El filtro de tokens porterStemming reduce los tokens que no son palabras clave a sus formas raíz base:
Título | Stemmed Non-Keyword Tokens |
|---|---|
|
|
|
|
El filtro de token removeDuplicates remueve cualquier token duplicado en el flujo generado por un filtro de token keywordRepeat predecesor:
Título | Tokens |
|---|---|
|
|
|
|
kStemming
El filtro de tokens kStemming combina la derivación algorítmica con un diccionario integrado para el lenguaje inglés para derivar palabras. Espera texto en minúsculas y no modifica texto en mayúsculas.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
Ejemplo
La siguiente definición de índice indexa el campo text.en_US en la colección minutes con un analizador personalizado llamado kStemmer. El analizador personalizado especifica lo siguiente:
Aplicar el tokenizador estándar para crear fichas basadas en reglas de separación de palabras.
Aplicar los siguientes filtros a los tokens:
Filtro de tokens minúsculas para convertir los tokens a minúsculas.
kStemming filtro de tokens para derivar palabras usando una combinación de derivación algorítmica y un diccionario incorporado para el lenguaje inglés.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
kStemmeren el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona standard del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona lowercase del menú desplegable y haz clic en Add token filter para añadir el filtro de tokens al analizador personalizado.
Haz clic en Add token filter para agregar otro filtro de token.
Selecciona kStemming del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado en text.en_US. campo anidado.
Seleccione text.en_US anidado del menú desplegable Field Name y String del menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
kStemmerde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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 )
La siguiente query busca el campo text.en_US en la colección de actas para el término Meeting.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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>' } } ]
MongoDB Search devuelve el documento con _id: 1, que contiene el término plural meetings en minúsculas. MongoDB Search hace coincidir el término de query con el documento porque el filtro de tokens minúsculas normaliza el texto del token a minúsculas y el filtro de tokens kStemming permite que MongoDB Search relacione el plural meetings en el campo text.en_US del documento con el término de query en singular. MongoDB Search también analiza el término de query con el analizador de índice (o, si se especifica, utilizando el searchAnalyzer). Específicamente, MongoDB Search crea los siguientes tokens (términos buscables) para el documento en los resultados, que luego utiliza para comparar con el término de la query:
head, this, page, deal, with, department, meeting, head
longitud
El filtro de token length remueve los tokens que son demasiado cortos o demasiado largos.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
| entero | no | Número que especifica la longitud mínima de un token. El valor debe ser menor o igual que Por defecto: |
| entero | no | Número que especifica la longitud máxima de un token. El valor debe ser mayor que o igual a Por defecto: |
Ejemplo
La siguiente definición de índice indexa el campo text.sv_FI en la colección minutes con un analizador personalizado llamado longOnly. El analizador personalizado especifica lo siguiente:
Utiliza el tokenizador estándar para crear tokens en función de las reglas de separación de palabras.
Aplicar los siguientes filtros a los tokens:
icuFolding filtro de tokens para aplicar plegados de caracteres.
lengthfiltro de token para indexar sólo tokens que tengan al menos 20 unidades de código UTF-16 de longitud después de tokenizar.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
longOnlyen el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona standard del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona icuFolding del menú desplegable y haz clic en Add token filter para añadir el filtro de tokens al analizador personalizado.
Haz clic en Add token filter para agregar otro filtro de token.
Selecciona length del menú desplegable y configura el siguiente campo para el filtro de token:
CampoValormin20Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado en el campo anidado text.sv.FI.
Seleccione text.sv.FI anidado del menú desplegable Field Name y String del menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
longOnlyde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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 )
La siguiente query busca el campo text.sv_FI en la colección de actas para el término forsaljningsavdelningen.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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' } } ]
MongoDB Search retorna el documento con _id: 2, que contiene el término försäljningsavdelningen. MongoDB Search empareja el documento con el término de consulta porque el término tiene más de 20 caracteres. Además, aunque el término de query forsaljningsavdelningen no incluya los caracteres diacríticos, MongoDB Search coincide el término de query con el documento sumando los diacríticos del término original en el documento. Específicamente, MongoDB Search crea los siguientes tokens (términos buscables) para el documento con _id: 2.
forsaljningsavdelningen
MongoDB Search no devolverá resultados para ninguna otra búsqueda en el campo text.sv_FI de la colección, ya que todos los demás términos del campo tienen menos de 20 caracteres.
minúsculas
El filtro de token lowercase normaliza el texto del token a minúsculas.
Atributos
Tiene el siguiente atributo:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
Ejemplos
El siguiente ejemplo de definición de índice indexa el campo title en la colección minutes como tipo autocomplete con la estrategia de tokenización nGram. Aplica un analizador personalizado llamado keywordLowerer en el campo title. El analizador personalizado especifica lo siguiente:
Aplica el tokenizador de palabras clave para crear un solo token a partir de una string o un arreglo de strings.
Aplica el filtro de token
lowercasepara convertir el texto del token a minúsculas.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Elija el botón de opción Create Your Own y haga clic en Next.
Escriba
keywordLowereren el campo Analyzer Name.Expande Tokenizer si está colapsado y selecciona el keyword del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona lowercase del menú desplegable y haz clic en Add token filter para añadir el filtro de tokens al analizador personalizado.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado al campo título.
Selecciona título del menú desplegable Field Name y Autocompletar del menú desplegable Data Type.
En la sección de propiedades del tipo de datos, seleccione los siguientes valores en el desplegable de la propiedad:
Nombre de la propiedadValorAnalyzer
keywordLowererTokenization
nGram
Haz clic en Add, luego en Save Changes.
Sustituye la definición de índice por defecto por la siguiente:
{ "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 )
La siguiente query busca en el campo title usando el operador autocompletar para los caracteres standup.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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' } ]
MongoDB Search devuelve el documento con _id: 4 en los resultados porque el documento contiene el término de consulta standup. MongoDB Search crea tokens para el campo title utilizando el tokenizador keyword, el filtro de tokens lowercase y la estrategia de tokenización nGram para el tipo de autocomplete. En concreto, MongoDB Search utiliza el tokenizador keyword para tokenizar toda la string como un solo token, que solo admite coincidencias exactas en toda la string, y, a continuación, utiliza el filtro de tokens lowercase para convertir los tokens a minúsculas. Para el documento en los resultados, MongoDB Search crea el siguiente token utilizando el analizador personalizado:
ID de documento | Tokens de salida |
|
|
Después de aplicar el analizador personalizado, MongoDB Search crea más "tokens" de n-gramas porque MongoDB Search indexa el campo title como el tipo autocompletar según lo especificado en la definición del índice. MongoDB Search usa los tokens n-grams, que incluye un token para standup, para emparejar el documento con el término de query standup.
La siguiente definición de índice indexa el campo message en la colección minutes con un analizador personalizado llamado lowerCaser. El analizador personalizado especifica lo siguiente:
Aplica el tokenizador estándar para crear tokens según las reglas de separación de palabras.
Aplicar los siguientes filtros a los tokens:
icuNormalizer para normalizar los tokens utilizando un Modo de Normalización Unicode estándar.
lowercasefiltro de tokens para convertir el texto de los tokens a minúsculas.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
lowerCaseren el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona standard del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Seleccione icuNormalizer del menú desplegable y luego seleccione
nfkddel menú desplegable normalizationForm.Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haz clic en Add token filter para agregar otro filtro de token.
Selecciona lowercase del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haga clic en Add Field Mapping para aplicar el analizador personalizado en el campo mensaje.
Selecciona mensaje del desplegable Field Name y String del desplegable Data Type .
En la sección de propiedades para el tipo de dato, selecciona
lowerCaserde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en 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 )
La siguiente consulta busca en el campo message el término sign-in.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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.' } ]
MongoDB Search devuelve los documentos con _id: 1, _id: 3 y _id:
2 en los resultados del término de consulta sign-in porque el tokenizador icuNormalizer primero crea tokens separados dividiendo el texto, incluyendo la palabra con guion, pero conserva el uso original de mayúsculas y minúsculas en el documento; luego, el filtro de tokens lowercase convierte los tokens en minúsculas. MongoDB Search también analiza el término de query utilizando el analizador de índices (o si se especifica, utilizando el searchAnalyzer) para dividir el término de query y emparejarlo con el documento.
Formas de normalización | Tokens de salida |
|
|
|
|
|
|
nGram
El filtro de tokens nGram tokeniza la entrada en n-gramas de tamaños configurados. No se puede usar el filtro de token nGram en las definiciones de mapeo de sinónimos o autocompletar.
Nota
Para realizar consultas con regex (MongoDB Search Operator) o wildcard operador, no se puede usar el filtro de tokens ngram como el searchAnalyzer, ya que produce más de un token de salida por token de entrada. Especifique un analizador diferente como el searchAnalyzer en su definición de índice.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
| entero | Sí | Número que especifica la longitud mínima de n-gramas generados. El valor debe ser menor o igual a |
| entero | Sí | El número que indica la longitud máxima de los n-gramas generados. El valor debe ser mayor o igual a |
| string | no | String que especifica si se deben indexar los tokens más cortos que
Si se especifica Por defecto: |
Ejemplo
La siguiente definición de índice indexa el campo title en la colección de actas utilizando el analizador personalizado denominado titleAutocomplete. Especifica el analizador de palabras clave como el searchAnalyzer. La función de análisis personalizado especifica lo siguiente:
Aplica el tokenizador estándar para crear tokens basados en las reglas de ruptura de palabras.
Aplica una serie de filtros de tokens en los tokens:
englishPossessivepara remover los posesivos (al final's) de las palabras.nGramtokenizar palabras en fragmentos de 4 a 7 caracteres de longitud.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
titleAutocompleteen el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona standard del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona englishPossessive del menú desplegable y haz clic en Add token filter para añadir el filtro de tokens al analizador personalizado.
Haz clic en Add token filter para agregar otro filtro de token.
Selecciona nGram del menú desplegable y configura los siguientes campos para el filtro de tokens:
CampoValorminGram4
maxGram7
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado al campo título.
Seleccione título del menú desplegable Field Name y string del menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
titleAutocompletede los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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 )
La siguiente query usa el operador comodín para buscar el campo title en la colección minutos del término meet seguido de cualquier cantidad de otros caracteres después del término.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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' } ]
MongoDB Search devuelve los documentos con _id: 1 y _id: 3 porque estos contienen el término meeting, que MongoDB Search asocia a los criterios de query meet* mediante la creación de los siguientes token (términos buscables).
Formas de normalización | Tokens de salida |
|---|---|
|
|
|
|
Nota
MongoDB Search no crea tokens para términos de menos de 4 caracteres (como the) y de más de 7 caracteres porque el parámetro termNotInBounds está configurado en omit por defecto. Si se establece el valor del parámetro termNotInBounds en include, MongoDB Search también creará tokens para el término the.
porterStemming
El filtro de tokens porterStemming utiliza el algoritmo de stemming de porter para remover los sufijos morfológicos y flexionales comunes de las palabras en inglés. Espera texto en minúsculas y no funciona como se espera para texto en mayúsculas.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
Ejemplo
La siguiente definición de índice indexa el campo title en la colección minutes con un analizador personalizado llamado porterStemmer. El analizador personalizado especifica lo siguiente:
Aplicar el tokenizador estándar para crear fichas basadas en reglas de separación de palabras.
Aplicar los siguientes filtros de tokens a los tokens:
minúsculas filtro de tokens para convertir las palabras a minúsculas.
portérStemming filtro de tokens para remover los sufijos morfológicos e inflexionales comunes de las palabras.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
porterStemmeren el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona standard del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona lowercase del menú desplegable y haz clic en Add token filter para añadir el filtro de tokens al analizador personalizado.
Haz clic en Add token filter para agregar otro filtro de token.
Selecciona porterStemming del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado al campo título.
Seleccione título del menú desplegable Field Name y string del menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
porterStemmerde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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" } ] } ] })
La siguiente query busca el campo title en la colección de actas para el término Meet.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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 devuelve los documentos con _id: 1 y _id: 3 porque el filtro de tokens minúsculas normaliza el texto del token a minúsculas y luego el filtro de tokens porterStemming extrae el sufijo morfológico del token meeting para crear el token meet, que MongoDB Search compara con el término de query Meet. Específicamente, MongoDB Search crea los siguientes tokens (términos buscables) para los documentos en los resultados, que luego empareja con el término de query Meet:
Formas de normalización | Tokens de salida |
|---|---|
|
|
|
|
regex
El filtro de tokens regex aplica una expresión regular con la sintaxis regex de Java a cada token, reemplazando las coincidencias por una string especificada.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción | |||||||||||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este filtro de token. El valor debe ser | |||||||||||||||||||||
| string | Sí | Patrón de expresión regular que se aplicará a cada token. | |||||||||||||||||||||
| string | Sí | string de reemplazo para sustituir dondequiera que ocurra un patrón coincidente. Si especificas una string vacía ( | |||||||||||||||||||||
| string | Sí | Los valores aceptables son:
Si |
Ejemplo
La siguiente definición de índice indexa el campo page_updated_by.email en la colección minutes con un analizador personalizado llamado emailRedact. El analizador personalizado especifica lo siguiente:
Aplica el tokenizador de palabras clave para indexar todas las palabras en el valor del campo como un solo término.
Aplicar los siguientes filtros de tokens a los tokens:
Filtro de token lowercase para convertir caracteres mayúsculos en los tokens a minúsculas.
regexfiltro de token para encontrar cadenas que parezcan direcciones de correo electrónico en los tokens y reemplazarlas con la palabraredacted.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
emailRedacten el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona keyword del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona lowercase del menú desplegable y haz clic en Add token filter para añadir el filtro de tokens al analizador personalizado.
Haz clic en Add token filter para agregar otro filtro de token.
Selecciona regex del menú desplegable y configura lo siguiente para el filtro de tokens:
Escriba
^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,5})$en el campo pattern.Escriba
redacteden el campo replacement.Selecciona
alldel menú desplegable matches.
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado en el campo anidado page_updated_by.email.
Selecciona page_updated_by.email anidado desde el desplegable de Field Name y String desde el desplegable de Data Type.
En la sección de propiedades para el tipo de dato, selecciona
emailRedactde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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" } ] } ] })
La siguiente query busca el campo page_updated_by.email en la colección actas utilizando el operador comodín para el término example.com precedido por cualquier cantidad de otros 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 ])
MongoDB Search no devuelve ningún resultado para la query aunque el campo page_updated_by.email contiene la palabra example.com en las direcciones de correo electrónico. MongoDB Search divide strings que coinciden con la expresión regular proporcionada en el analizador personalizado con la palabra redacted y, por lo tanto, MongoDB Search no hace coincidir el término de la query con ningún documento.
eliminarDuplicados
El removeDuplicates filtro de token remueve los tokens duplicados consecutivos, que son tokens para el mismo término en la misma posición.
Atributos
Tiene el siguiente atributo:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este filtro de token. El valor debe ser |
Ejemplo
La siguiente definición de índice indexa el campo title en la colección minutes con un analizador personalizado llamado duplicateRemover. El analizador personalizado especifica lo siguiente:
Aplicar el tokenizador de espacios para crear tokens basados en la ocurrencia de espacios entre palabras.
Aplicar los siguientes filtros a los tokens:
keywordRepeat Filtro de tokens para generar tokens dos veces, como palabra clave y como no palabra clave.
removeDuplicates para filtrar los tokens que se encuentren en la misma posición y término que el token anterior en el flujo.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
removeDuplicatesen el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona whitespace del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Seleccione keywordRepeat en la lista desplegable y haga clic en Add token filter.
Haz clic en Add token filter para agregar otro filtro de token.
Selecciona removeDuplicates del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado al campo título.
Seleccione título del menú desplegable Field Name y string del menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
removeDuplicatesde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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" } } ] } )
La siguiente query busca en el campo title de la colección minutes el término mee* usando el wildcard operador.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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' } ]
MongoDB Search devuelve los documentos que contienen el término meeting en el campo de título. El filtro de tokens keywordRepeat genera los siguientes tokens para los documentos en los resultados:
Título | Keyword Tokens | Non-Keyword tokens |
|---|---|---|
|
|
|
|
|
|
El filtro de token removeDuplicates remueve los tokens duplicados en el stream.
reversa
El filtro de tokens reverse invierte cada token de string.
Atributos
Tiene el siguiente atributo:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este filtro de token. El valor debe ser |
Ejemplo
La siguiente definición de índice indexa los campos page_updated_by.email en la colección minutos utilizando un analizador personalizado llamado keywordReverse. El analizador personalizado especifica lo siguiente:
Aplica el tokenizador de palabras clave para tokenizar cadenas enteras como términos individuales.
Aplica el filtro de token
reversepara invertir los tokens de la string.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
reverseAnalyzeren el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona standard del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona reverse del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado al campo título.
Seleccione título del menú desplegable Field Name y string del menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
reverseAnalyzerde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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" } ] } ] })
La siguiente query busca en el campo page_updated_by.email en la colección minutas usando el operador comodín para hacer coincidir cualquier carácter que preceda los caracteres @example.com en orden inverso. El filtro de tokens reverse puede acelerar las consultas comodín iniciales.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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 la query precedente, MongoDB Search aplica el analizador personalizado a la query de comodín para transformar la query de la siguiente manera:
moc.elpmaxe@*
MongoDB Search luego ejecuta la query contra los tokens indexados, que también se invierten. Específicamente, MongoDB Search crea los siguientes tokens (términos que se pueden buscar) para los documentos en los resultados, que luego compara con el término de query moc.elpmaxe@*:
Formas de normalización | Tokens de salida |
|---|---|
|
|
|
|
|
|
|
|
shingle
El filtro de tokens shingle construye shingles (n-gramas) a partir de una serie de tokens. No puedes utilizar el filtro de tokens shingle en las definiciones de sinónimos o de mapeo de autocompletar.
Nota
Para realizar consultas con regex (MongoDB Search Operator) o wildcard operador, no se puede usar el filtro de tokens shingle como el searchAnalyzer, ya que produce más de un token de salida por token de entrada. Especifique un analizador diferente como el searchAnalyzer en su definición de índice.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
| entero | Sí | Número mínimo de tokens por shingle. Debe ser mayor o igual a |
| entero | Sí | Número máximo de tokens por teja. Debe ser mayor o igual a |
Ejemplo
El siguiente ejemplo de definición de índice en el campo page_updated_by.email de la colección minutos utiliza dos analizadores personalizados, emailAutocompleteIndex y emailAutocompleteSearch, para implementar una funcionalidad similar al autocompletado. MongoDB Search utiliza el analizador emailAutocompleteIndex durante la creación del índice para:
Reemplaza
@caracteres en un campo porATCrea tokens con el tokenizador de espacio en blanco
Token shingles
Crear edgeGram de esos tokens solapados
MongoDB Search utiliza el analizador emailAutocompleteSearch durante una búsqueda para:
Reemplaza
@caracteres en un campo porATCrea fichas con el tokenizador de espacios en blanco tokenizador
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
emailAutocompleteIndexen el campo Analyzer Name.Expande Character Filters y haz clic en Add character filter.
Seleccione mapping del menú desplegable y haga clic en Add mapping.
Introduzca la siguiente clave y valor:
ClaveValor@ATHaga clic en Add character filter para agregar el filtro de caracteres a su analizador personalizado.
Expandir Tokenizer si está colapsado.
Selecciona whitespace del menú desplegable e introduce
15en el campo maxTokenLength.Expande Token Filters y haz clic en Add token filter.
Seleccione shingle del menú desplegable y configure los siguientes campos.
CampoValor del campominShingleSize2
minShingleSize3
Haz clic en Add token filter para agregar otro filtro de token.
Haz clic en Add token filter para agregar otro filtro de token.
Selecciona edgeGram del menú desplegable y configura los siguientes campos para el filtro de tokens:
CampoValor del campominGram2
maxGram15
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haz clic en Add para agregar el analizador personalizado a tu índice.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
emailAutocompleteSearchen el campo Analyzer Name.Expande Character Filters y haz clic en Add character filter.
Seleccione mapping del menú desplegable y haga clic en Add mapping.
Introduzca la siguiente clave y valor:
ClaveValor@ATHaga clic en Add character filter para agregar el filtro de caracteres a su analizador personalizado.
Expandir Tokenizer si está colapsado.
Selecciona whitespace del menú desplegable e introduce
15en el campo maxTokenLength.Haz clic en Add para agregar el analizador personalizado a tu índice.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado en el campo anidado page_updated_by.email.
Selecciona page_updated_by.email anidado desde el desplegable de Field Name y String desde el desplegable de Data Type.
En la sección de propiedades del tipo de dato, selecciona
emailAutocompleteIndexdel desplegable Index Analyzer yemailAutocompleteSearchdel desplegable Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
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" } } ] })
La siguiente query busca una dirección de correo electrónico en el campo page_updated_by.email de la colección de actas:
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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' } } ]
MongoDB Search crea tokens de búsqueda usando el analizador emailAutocompleteSearch, que posteriormente compara con los tokens del índice que creó usando el analizador emailAutocompleteIndex. La siguiente tabla muestra los tokens de búsqueda e índice (hasta 15 caracteres) que crea MongoDB Search:
Buscar tokens | Index Tokens |
|---|---|
|
|
SnowballStemming
El token snowballStemming aplica el filtro a los tokens Stems usando un Radicalizador generado por Snowball.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
| string | Sí | Los siguientes valores son válidos:
|
Ejemplo
La siguiente definición de índice indexa el campo text.fr_CA en la colección minutes con un analizador personalizado llamado frenchStemmer. El analizador personalizado especifica lo siguiente:
Aplicar el tokenizador estándar para crear fichas basadas en reglas de separación de palabras.
Aplicar los siguientes filtros de tokens a los tokens:
Filtro de tokens minúsculas para convertir los tokens a minúsculas.
frenchvariante del filtro de tokenssnowballStemmingpara extraer las raíces de las palabras.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
frenchStemmeren el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona standard del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona lowercase del menú desplegable y haz clic en Add token filter para añadir el filtro de tokens al analizador personalizado.
Haz clic en Add token filter para agregar otro filtro de token.
Seleccione snowballStemming del menú desplegable y luego seleccione
frenchdel menú desplegable stemmerName.Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado en el text.fr_CA campo anidado.
Selecciona text.fr_CA anidado en el menú desplegable Field Name y String en el menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
frenchStemmerde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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" } ] } ] })
La siguiente query busca el campo text.fr_CA en la colección de actas para el término réunion.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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' } } ]
MongoDB Search devuelve el documento con _id: 1 en los resultados. MongoDB Search coincide el query de consulta con el documento porque crea los siguientes tokens para el documento, los cuales luego se usan para hacer coincidir el término de query réunion:
ID de documento | Tokens de salida |
|---|---|
|
|
spanishPluralStemming
El filtro de tokens spanishPluralStemming reduce palabras españolas plurales a su raíz. Espera texto en minúsculas.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
Ejemplo
La siguiente definición de índice indexa el campo text.es_MX en la colección minutes con un analizador personalizado llamado spanishPluralStemmer. El analizador personalizado especifica lo siguiente:
Aplicar el tokenizador estándar para crear fichas basadas en reglas de separación de palabras.
Aplicar los siguientes filtros de tokens a los tokens:
minúscula filtro de tokens para convertir términos en español a minúsculas.
spanishPluralStemmingfiltro de tokens para reducir a la raíz las palabras españolas plurales en los tokens a su forma singular.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
spanishPluralStemmeren el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona standard del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona lowercase del menú desplegable y haz clic en Add token filter para añadir el filtro de tokens al analizador personalizado.
Haz clic en Add token filter para agregar otro filtro de token.
Selecciona spanishPluralStemming del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado en el texto.es_MX campo anidado.
Selecciona text.es_MX anidado del menú desplegable Field Name y String del menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
spanishPluralStemmerde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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" } ] } ] })
La siguiente query busca el campo text.es_MX en la colección de minutos por el término en español punto.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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.', } } ]
MongoDB Search devuelve el documento con _id: 4 porque el campo text.es_MX en el documento contiene el término plural puntos. MongoDB Search encuentra la coincidencia de este documento para el término de query punto porque MongoDB Search analiza puntos como punto, evitando el plural (s) del término. Específicamente, MongoDB Search crea los siguientes tokens (términos buscables) para el documento en los resultados, que luego usa para emparejar con el término de la query:
ID de documento | Tokens de salida |
|
|
stempel
El filtro de tokens stempel utiliza la tabla por defecto del stemmer de lenguaje polaco de Lucene para aplicar stemming a palabras en el lenguaje polaco. Se espera texto en minúsculas.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
Ejemplo
La siguiente definición de índice indexa el campo text.pl_PL en la colección minutes con un analizador personalizado llamado stempelStemmer. El analizador personalizado especifica lo siguiente:
Aplicar el tokenizador estándar para crear fichas basadas en reglas de separación de palabras.
Aplicar los siguientes filtros a los tokens:
minúsculas filtro de tokens para convertir las palabras a minúsculas.
stempel filtro de token para estemizar las palabras polacas.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
stempelAnalyzeren el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona standard del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona lowercase del menú desplegable y haz clic en Add token filter para añadir el filtro de tokens al analizador personalizado.
Haz clic en Add token filter para agregar otro filtro de token.
Selecciona spanishPluralStemming del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado al campo título.
Seleccione título del menú desplegable Field Name y string del menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
stempelAnalyzerde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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" } ] } ] })
La siguiente query busca en el campo text.pl_PL de la colección actas el término en polaco punkt.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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.' } } ]
MongoDB Search devuelve el documento con _id: 4 porque el campo text.pl_PL del documento contiene el término plural punkty. MongoDB Search corresponde este documento con el término de query punkt porque MongoDB Search analiza punkty como punkt al derivar el plural (y) del término. Específicamente, MongoDB Search crea los siguientes token (términos de búsqueda) para el documento en los resultados, que luego compara con el query:
ID de documento | Tokens de salida |
|---|---|
|
|
stopword
El filtro de token stopword remueve los tokens que corresponden a las palabras de detención especificadas. Este filtro de tokens no analiza las palabras de detención especificadas.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
| Arreglo de cadenas | Sí | Lista que contiene las palabras vacías que corresponden a los tokens que se deben remover. El valor debe ser una o varias palabras de detención. |
| booleano | no | Indica si se debe ignorar el uso de mayúsculas y minúsculas de las palabras vacías al filtrar los tokens que se van a remover. El valor puede ser uno de los siguientes:
Por defecto: |
Ejemplo
La siguiente definición de índice indexa el campo title en la colección minutes con un analizador personalizado llamado stopwordRemover. El analizador personalizado especifica lo siguiente:
Aplica el tokenizador de espacios en blanco para crear tokens basados en la aparición de espacios en blanco entre palabras.
Aplica el filtro de token
stopwordpara remover los tokens que coincidan con las palabras vacías definidasis,theyat. El filtro de tokens no diferencia entre mayúsculas y minúsculas y removerá todos los tokens que coincidan con las stopwords especificadas.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
stopwordRemoveren el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona whitespace del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona stopword del menú desplegable y escribe lo siguiente en el campo tokens:
is,the,atHaga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado en text.en_US. campo anidado.
Seleccione text.en_US anidado del menú desplegable Field Name y String del menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
stopwordRemoverde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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 )
La siguiente query busca la frase head of the sales en el campo text.en_US de la colección de actas.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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.' } } ]
MongoDB Search devuelve el documento con _id: 2 porque el campo en_US contiene el término de consulta. MongoDB Search no crea símbolos para la palabra clave the del documento durante el análisis, pero sigue siendo capaz de compararla con el término de query porque, en los campos string, también analiza el término de query mediante el analizador de índices (o, si se especifica, con el searchAnalyzer) y remueve la palabra clave del término de query, lo que permite a MongoDB Search hacer coincidir el término de query con el documento. Concretamente, MongoDB Search crea los siguientes símbolos para el documento en los resultados:
ID de documento | Tokens de salida |
|---|---|
|
|
recortar
El filtro de tokens trim recorta los espacios en blanco iniciales y finales de los tokens.
Atributos
Tiene el siguiente atributo:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
Ejemplo
La siguiente definición de índice indexa el text.en_US en la colección de minutas utilizando un analizador personalizado llamado tokenTrimmer. El analizador personalizado especifica lo siguiente:
Aplica el filtro de caracteres htmlStrip para eliminar todas las etiquetas HTML del texto excepto la etiqueta
a.Aplicar el tokenizador de palabras clave para crear un solo token para toda la string.
Aplique el filtro de tokens
trimpara remover los espacios en blanco iniciales y finales de los tokens.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
tokenTrimmeren el campo Analyzer Name.Expande Character Filters y haz clic en Add character filter.
Selecciona htmlStrip del menú desplegable y escribe
aen el campo ignoredTags.Haga clic en Add character filter para agregar el filtro de caracteres a su analizador personalizado.
Expandir Tokenizer si está colapsado.
Selecciona keyword del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona trim del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haz clic en Add para agregar el analizador personalizado a tu índice.
En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado en text.en_US. campo anidado.
Seleccione text.en_US anidado del menú desplegable Field Name y String del menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
tokenTrimmerde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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" } ] } ] })
La siguiente query busca la frase *department meetings* que está precedida y seguida por cualquier cantidad de otros caracteres en el campo text.en_US de la colección minutes.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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 ]
MongoDB Search devuelve el documento con _id: 1 porque el campo en_US contiene el término de query department meetings. MongoDB Search crea el siguiente token para el documento en los resultados, lo que demuestra que MongoDB Search eliminó las etiquetas HTML, creó un único token para toda la string, y eliminó los espacios en blanco al inicio y al final de la string:
ID de documento | Tokens de salida |
|---|---|
|
|
wordDelimiterGraph
El filtro de token wordDelimiterGraph divide los tokens en sub-tokens según reglas configuradas. Recomendamos no usar este filtro de token junto con el tokenizador estándar porque este tokenizador remueve muchos de los delimitadores intra-palabra que este filtro de token utiliza para determinar los límites.
Nota
Para realizar consultas con regex (MongoDB Search Operator) o wildcard operador, no se puede usar el filtro de tokens wordDelimiterGraph como el searchAnalyzer, ya que produce más de un token de salida por token de entrada. Especifique un analizador diferente como el searchAnalyzer en su definición de índice.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Requerido? | Descripción |
|---|---|---|---|
| string | Sí | Etiqueta legible por humanos que identifica este tipo de filtro de token. El valor debe ser |
| Objeto | no | Objeto que contiene las reglas que determinan cómo dividir palabras en subpalabras. Por defecto: |
delimiterOptions.generateWordParts | booleano | no | Indicador que señala si se debe realizar la división de los tokens en función de sus sub-palabras. Por ejemplo, si Por defecto: |
delimiterOptions.generateNumberParts | booleano | no | Indicador que indica si se deben dividir los tokens en función de subnúmeros. Por ejemplo, si Por defecto: |
delimiterOptions.concatenateWords | booleano | no | Indicador que indica si se deben concatenar secuencias de subpalabras. Por ejemplo, si Por defecto: |
delimiterOptions.concatenateNumbers | booleano | no | Indicador que indica si se deben concatenar segmentos de subnúmeros. Por ejemplo, si Por defecto: |
delimiterOptions.concatenateAll | booleano | no | Bandera que indica si se deben concatenar todas las ejecuciones. Por ejemplo, si Por defecto: |
delimiterOptions.preserveOriginal | booleano | no | Indicador que indica si se deben generar tokens de las palabras originales. Por defecto: |
delimiterOptions.splitOnCaseChange | booleano | no | Indicador que señala si se deben dividir los tokens según transiciones de mayúsculas y minúsculas. Por ejemplo, si Por defecto: |
delimiterOptions.splitOnNumerics | booleano | no | Indicador que indica si se deben dividir los tokens en función de las transiciones entre letras y números. Por ejemplo, si Por defecto: |
delimiterOptions.stemEnglishPossessive | booleano | no | Bandera que indica si se deben remover los posesivos finales de cada subpalabra. Por ejemplo, si Por defecto: |
delimiterOptions.ignoreKeywords | booleano | no | Indicador que señala si se omiten los tokens que tienen el atributo Por defecto: |
| Objeto | no | Objeto que contiene opciones para palabras protegidas. Por defecto: |
protectedWords.words | arreglo | Condicional | Lista que contiene los tokens que se deben proteger de la delimitación. Si especificas |
protectedWords.ignoreCase | booleano | no | Marca que indica si se debe ignorar la sensibilidad del caso para palabras protegidas. Por defecto: |
Si true, aplica el filtro de tokens flattenGraph después de esta opción para que el flujo de tokens sea adecuado para la indexación.
Ejemplo
La siguiente definición de índice indexa el campo title en la colección minutes con un analizador personalizado llamado wordDelimiterGraphAnalyzer. El analizador personalizado especifica lo siguiente:
Aplicar el tokenizador de espacios para crear tokens basados en la ocurrencia de espacios entre palabras.
Aplica el filtro de tokens wordDelimiterGraph para lo siguiente:
No intentes dividir
is,the, yat. La exclusión distingue entre mayúsculas y minúsculas. Por ejemploIsytHeno están excluidos.Dividir tokens en cambios de mayúsculas y remueve tokens que contengan sólo letras del alfabeto inglés.
En la sección Custom Analyzers, haga clic en Add Custom Analyzer.
Selecciona el botón de opción Create Your Own y haz clic en Next.
Escriba
wordDelimiterGraphAnalyzeren el campo Analyzer Name.Expandir Tokenizer si está colapsado.
Selecciona whitespace del menú desplegable.
Expande Token Filters y haz clic en Add token filter.
Selecciona lowercase del menú desplegable y haz clic en Add token filter para añadir el filtro de tokens al analizador personalizado.
Haz clic en Add token filter para agregar otro filtro de token.
Seleccione wordDelimiterGraph del menú desplegable y configure los siguientes campos:
Deseleccionar delimiterOptions.generateWordParts y seleccionar delimiterOptions.splitOnCaseChange.
Escribe y luego selecciona en el menú desplegable las palabras
is,theyat, una a la vez, en el campoprotectedWords.words.Deseleccionar
protectedWords.ignoreCase.
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la sección Field Mappings, haga clic en Add Field Mapping para aplicar el analizador personalizado en el campo anidado de título.
Selecciona título anidado del menú desplegable Field Name y String del menú desplegable Data Type.
En la sección de propiedades para el tipo de dato, selecciona
wordDelimiterGraphAnalyzerde los desplegables Index Analyzer y Search Analyzer.Haz clic en Add, luego en Save Changes.
Reemplaza la definición de índice por defecto con el siguiente ejemplo:
{ "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 } } ] } ] })
La siguiente query busca el campo title en la colección de actas para el término App2.
Haz clic en el botón Query para tu índice.
Haz clic en Edit Query para editar la consulta.
Haz clic en la barra de query y selecciona la base de datos y la colección.
Reemplaza la consulta por defecto por la siguiente y haz clic en 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' } ]
MongoDB Search devuelve el documento con _id: 4 porque el campo title del documento contiene App2. MongoDB Search divide tokens al detectar cambios en mayúsculas y remueve los tokens creados por una división que contienen únicamente letras alfabéticas. También analiza el término de la query usando el analizador de índice (o, si se especifica, usando el searchAnalyzer) para dividir la palabra en caso de cambio de mayúsculas y minúsculas y elimina las letras que preceden a 2. Específicamente, MongoDB Search crea los siguientes tokens para el documento con _id : 4 para las opciones protectedWords y delimiterOptions:
wordDelimiterGraph opciones | Tokens de salida |
|---|---|
|
|
|
|