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 token 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 filtros de tokens:
Las siguientes definiciones de índice y consultas de muestra 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 page_updated_by.first_name campo de la colección de minutos mediante un analizador personalizado asciiConverter llamado. Este 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.Expande Tokenizer si está contraído.
Selecciona standard del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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 Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo page_updated_by.first_name.
Seleccione page_updated_by.first_name del Field Name menú desplegable y String del Data Type menú desplegable.
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.
Reemplace la definición de índice predeterminada 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 consulta busca first_name en el campo de la colección de minutos nombres utilizando 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 un documento con _id: 1 en los resultados porque MongoDB Search creó los siguientes tokens (términos de búsqueda) para el campo page_updated_by.first_name en el documento, que luego utilizó para hacer coincidir con el término de consulta 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 page_updated_by.last_name campo de la colección de minutos mediante un analizador personalizado dmsAnalyzer llamado. Este 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.Expande Tokenizer si está contraído.
Selecciona standard del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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.
Seleccione page_updated_by.last_name del Field Name menú desplegable y String del Data Type menú desplegable.
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.
Reemplace la definición de índice predeterminada 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 (operador de búsqueda de MongoDB) wildcard o, no se puede usar edgeGram el filtro de token como,searchAnalyzer ya que genera más de un token de salida por cada token de entrada. Especifique un analizador diferente como searchAnalyzer en la definición del í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 | Cadena que especifica si se indexan los tokens menores de
Si se especifica Por defecto: |
Ejemplo
La siguiente definición de índice indexa el title campo de la colección de minutos mediante un analizador personalizado titleAutocomplete llamado. Este 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.Expande Tokenizer si está contraído.
Selecciona standard del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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.
Reemplace la definición de índice predeterminada 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 elimina los posesivos ('s finales) 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 title campo de la colección de minutos mediante un analizador personalizado englishPossessiveStemmer llamado. Este 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.Expande Tokenizer si está contraído.
Selecciona standard del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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.
Reemplace la definición de índice predeterminada 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 consulta busca title el término en el campo team de la colección de minutos.
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 al token team durante el análisis. En concreto, MongoDB Search crea los siguientes tokens (términos de búsqueda) para los documentos de los resultados, que luego asocia con el término de consulta:
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 message campo de la colección de minutos mediante un analizador personalizado wordDelimiterGraphFlatten llamado. Este 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:
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.Expande Tokenizer si está contraído.
Selecciona whitespace del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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.
Reemplace la definición de índice predeterminada 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 consulta busca message el término en el campo sign de la colección de minutos.
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 text.sv_FI campo de la colección de minutos mediante un analizador personalizado diacriticFolder llamado. Este 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.
Utilice el filtro de token
icuFoldingpara aplicar pliegues como eliminación de acentos, pliegue de mayúsculas y minúsculas, pliegue de duplicados canónicos, etc.
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.Expande Tokenizer si está contraído.
Selecciona keyword del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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.
Reemplace la definición de índice predeterminada 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 message campo de la colección de minutos mediante un analizador personalizado textNormalizer llamado. Este 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.Expande Tokenizer si está contraído.
Selecciona whitespace del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
Seleccione icuNormalizer del menú desplegable y seleccione
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.
Reemplace la definición de índice predeterminada 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 consulta busca message el término en el campo 1 de la colección de minutos.
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 title campo de la colección de minutos mediante un analizador personalizado keywordStemRemover llamado. Este 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:
Filtro de tokenkeywordRepeat para crear tokens dos veces, una vez como token de palabra clave y otra vez como token que no es de 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.Expande Tokenizer si está contraído.
Selecciona whitespace del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
Seleccione keywordRepeat del menú 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.
Reemplace la definición de índice predeterminada 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 elimina cualquier token duplicado en la secuencia generada por un filtro de token keywordRepeat anterior:
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 text.en_US campo de la colección de minutos mediante un analizador personalizado kStemmer llamado. Este 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.Expande Tokenizer si está contraído.
Selecciona standard del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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.
Reemplace la definición de índice predeterminada 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 consulta busca text.en_US el término en el campo Meeting de la colección de minutos.
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 text.sv_FI campo de la colección de minutos mediante un analizador personalizado longOnly llamado. Este 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.Expande Tokenizer si está contraído.
Selecciona standard del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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 en el Field Name menú desplegable y String en el Data Type menú desplegable.
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.
Reemplace la definición de índice predeterminada 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 consulta busca text.sv_FI el término en el campo forsaljningsavdelningen de la colección de minutos.
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 title campo de la colección de minutos como autocompletado de tipo con la nGram estrategia de tokenización. Aplica un analizador personalizado llamado keywordLowerer al title campo. El analizador personalizado especifica lo siguiente:
Aplique el tokenizador de palabras clave para crear un único token para una cadena o una matriz de cadenas.
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.
Seleccione 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.
Expanda Token Filters y haga clic Add token filter en.
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 del menú desplegable para 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 contiene el término de standup consulta. MongoDB Search crea tokens para el title campo mediante el keyword tokenizador, ellowercase filtro de tokens y la nGram estrategia de tokenización para el tipo de autocompletado. En concreto, MongoDB Search utiliza el keyword tokenizador para tokenizar toda la cadena como un único token, que solo admite coincidencias exactas en toda la cadena, y luego utiliza el lowercase filtro de tokens para convertir los tokens a minúsculas. Para el documento de los resultados, MongoDB Search crea el siguiente token mediante 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 message campo de la colección de minutos mediante un analizador personalizado lowerCaser llamado. Este analizador personalizado especifica lo siguiente:
Aplicar el tokenizador estándar para crear tokens basados en reglas de divisió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.Expande Tokenizer si está contraído.
Selecciona standard del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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 (operador de búsqueda de MongoDB) wildcard o, no se puede usar ngram el filtro de token como,searchAnalyzer ya que genera más de un token de salida por cada token de entrada. Especifique un analizador diferente como searchAnalyzer en la definición del í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 | Cadena que especifica si se indexan los tokens menores de
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.Expande Tokenizer si está contraído.
Selecciona standard del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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.
Reemplace la definición de índice predeterminada 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 title campo de la colección de minutos mediante un analizador personalizado porterStemmer llamado. Este 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.Expande Tokenizer si está contraído.
Selecciona standard del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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.
Reemplace la definición de índice predeterminada 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 consulta busca title el término en el campo Meet de la colección de minutos.
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 regex filtro de token aplica una expresión regular con sintaxis regex de Java a cada token, reemplazando las coincidencias con una cadena especificada.
Atributos
Tiene los siguientes atributos:
Ejemplo
La siguiente definición de índice indexa el page_updated_by.email campo de la colección de minutos mediante un analizador personalizado emailRedact llamado. Este analizador personalizado especifica lo siguiente:
Aplique 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.Expande Tokenizer si está contraído.
Selecciona keyword del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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.
Reemplace la definición de índice predeterminada 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 title campo de la colección de minutos mediante un analizador personalizado duplicateRemover llamado. Este 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.Expande Tokenizer si está contraído.
Selecciona whitespace del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
Seleccione keywordRepeat del menú 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.
Reemplace la definición de índice predeterminada 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:
Aplique la palabra clave tokenizer 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.Expande Tokenizer si está contraído.
Selecciona standard del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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.
Reemplace la definición de índice predeterminada 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 consulta anterior, MongoDB Search aplica el analizador personalizado a la consulta comodín para transformar la consulta 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 shingle filtro de tokens construye tejas (n-gramas de tokens) a partir de una serie de tokens. No se puede usar el shingle filtro de tokens en definiciones de sinónimos o de mapeo de autocompletado.
Nota
Para realizar consultas con regex (operador de búsqueda de MongoDB) wildcard o, no se puede usar shingle el filtro de token como,searchAnalyzer ya que genera más de un token de salida por cada token de entrada. Especifique un analizador diferente como searchAnalyzer en la definición del í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 teja. 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
Fichas de tejas
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.Expanda Character Filters y haga clic Add character filter en.
Seleccione mapping del menú desplegable y haga clic Add mapping en.
Introduzca la siguiente clave y valor:
ClaveValor@ATHaga clic en Add character filter para agregar el filtro de caracteres a su analizador personalizado.
Expande Tokenizer si está contraído.
Selecciona whitespace del menú desplegable e introduce
15en el campo maxTokenLength.Expanda Token Filters y haga clic Add token filter en.
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.
Haga clic en Add para agregar el analizador personalizado a su í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.Expanda Character Filters y haga clic Add character filter en.
Seleccione mapping del menú desplegable y haga clic Add mapping en.
Introduzca la siguiente clave y valor:
ClaveValor@ATHaga clic en Add character filter para agregar el filtro de caracteres a su analizador personalizado.
Expande Tokenizer si está contraído.
Selecciona whitespace del menú desplegable e introduce
15en el campo maxTokenLength.Haga clic en Add para agregar el analizador personalizado a su í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.
Reemplace la definición de índice predeterminada 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 consulta busca una dirección de correo electrónico en el page_updated_by.email campo de la colección de minutos:
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 text.fr_CA campo de la colección de minutos mediante un analizador personalizado frenchStemmer llamado. Este 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.Expande Tokenizer si está contraído.
Selecciona standard del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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.
Seleccione el texto anidado.fr_CA del Field Name menú desplegable y Cadena del Data Type menú desplegable.
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.
Reemplace la definición de índice predeterminada 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 consulta busca text.fr_CA el término en el campo réunion de la colección de minutos.
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 text.es_MX campo de la colección de minutos mediante un analizador personalizado spanishPluralStemmer llamado. Este 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 convertir las palabras plurales en español en los tokens en 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.Expande Tokenizer si está contraído.
Selecciona standard del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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.
Seleccione el texto anidado.es_MX del Field Name menú desplegable y Cadena del Data Type menú desplegable.
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.
Reemplace la definición de índice predeterminada 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 stempel filtro de token utiliza la tabla lematizadora polaca predeterminada de Lucene para la lematización de palabras en polaco. 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 text.pl_PL campo de la colección de minutos mediante un analizador personalizado stempelStemmer llamado. Este 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.Expande Tokenizer si está contraído.
Selecciona standard del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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.
Reemplace la definición de índice predeterminada 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 title campo de la colección de minutos mediante un analizador personalizado stopwordRemover llamado. Este 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.
Aplique el filtro de token
stopwordpara eliminar los tokens que coincidan con las palabras vacías definidasis,theyat. El filtro de token no distingue entre mayúsculas y minúsculas y eliminará todos los tokens que coincidan con las palabras vacías 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.Expande Tokenizer si está contraído.
Selecciona whitespace del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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.
Reemplace la definición de índice predeterminada 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 tokens para la palabra vacía the en el documento durante el análisis, pero aún puede asociarla con el término de consulta porque, para los campos string, también analiza el término de consulta mediante el analizador de índices (o, si se especifica, mediante searchAnalyzer) y elimina la palabra vacía del término de consulta, lo que permite a MongoDB Search asociar el término de consulta con el documento. En concreto, MongoDB Search crea los siguientes tokens para el documento en los resultados:
ID de documento | Tokens de salida |
|---|---|
|
|
recortar
El filtro de token trim recorta los espacios 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.Aplique la palabra clave tokenizer para crear un único token para toda la cadena.
Aplique el filtro de token
trimpara eliminar los espacios iniciales y finales en 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.Expanda Character Filters y haga clic Add character filter en.
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.
Expande Tokenizer si está contraído.
Selecciona keyword del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
Selecciona trim del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token al analizador personalizado.
Haga clic en Add para agregar el analizador personalizado a su í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.
Reemplace la definición de índice predeterminada 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 |
|---|---|
|
|
Gráfico delimitador de palabras
El wordDelimiterGraph filtro de tokens divide los tokens en subtokens según las reglas configuradas. Recomendamos no utilizar este filtro de tokens con el tokenizador estándar, ya que este elimina muchos de los delimitadores intrapalabra que este filtro utiliza para determinar los límites.
Nota
Para realizar consultas con regex (operador de búsqueda de MongoDB) wildcard o, no se puede usar wordDelimiterGraph el filtro de token como,searchAnalyzer ya que genera más de un token de salida por cada token de entrada. Especifique un analizador diferente como searchAnalyzer en la definición del í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 según subnúmeros. Por ejemplo, si es 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 | Indicador 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 | Indicador que indica si se deben eliminar los posesivos finales de cada subpalabra. Por ejemplo, si es 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 | Bandera que indica si se debe ignorar la distinción entre mayúsculas y minúsculas para palabras protegidas. Por defecto: |
Si true es, aplique el filtro de token 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 title campo de la colección de minutos mediante un analizador personalizado wordDelimiterGraphAnalyzer llamado. Este 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.Expande Tokenizer si está contraído.
Selecciona whitespace del menú desplegable.
Expanda Token Filters y haga clic Add token filter en.
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:
Deseleccione delimiterOptions.generateWordParts y seleccione 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.
Reemplace la definición de índice predeterminada 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 consulta busca title el término en el campo App2 de la colección de minutos.
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 contiene App2. MongoDB Search divide los tokens al cambiar de mayúsculas y minúsculas y elimina los tokens creados por una división que solo contienen letras alfabéticas. También analiza el término de consulta mediante el analizador de índices (o, si se especifica, mediante searchAnalyzer) para dividir la palabra al cambiar de mayúsculas y minúsculas y eliminar las letras que preceden a 2. En concreto, MongoDB Search crea los siguientes tokens para el documento con _id : 4 para las opciones protectedWords y delimiterOptions:
wordDelimiterGraph opciones | Tokens de salida |
|---|---|
|
|
|
|