Un filtro de token realiza operaciones como las siguientes:
Lematización, que reduce palabras relacionadas, como "talking", "talked" y "talks", a su palabra raíz "talk".
Redacció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 denominada minutesPara seguir estos ejemplos, cargue la colección minutes en su clúster y navegue hasta la Create a Search Index Página en la interfaz de usuario de Atlas siguiendo los pasos del tutorial "Crear un índice de búsqueda de MongoDB". A continuación, seleccione la minutes colección como origen de datos y siga el procedimiento de ejemplo para crear un índice desde la interfaz de usuario de Atlas o mongosh usando.
➤ Utilice el menú desplegable Seleccione su lenguaje para establecer el idioma del ejemplo en esta página.
asciiFolding
El asciiFolding filtro de token convierte caracteres Unicode alfabéticos, numéricos y simbólicos que no están en el bloque Unicode de latín básico
A sus EquivalentesASCII, si están disponibles.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser |
| string | no | Cadena que especifica si se incluyen u 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:
Aplique el tokenizador estándar para crear tokens basados en reglas de división de palabras.
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.
Seleccione el botón de opción Create Your Own y haga 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 a su 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 del tipo de datos, seleccione
asciiConverterde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 daitchMokotoffSoundex filtro de tokens crea tokens para palabras que suenan igual, basándose en el algoritmo fonético Soundex de Daitch-Mokotoff. Este filtro puede generar múltiples codificaciones para cada entrada, donde cada token codificado es un 6 número de dígitos.
Nota
No utilice el filtro de token daitchMokotoffSoundex en:
Definiciones de mapeo de tipos de sinónimos o autocompletar.
Operadores donde
fuzzyestá habilitado. MongoDB Search admite la opciónfuzzypara los siguientes operadores:
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser |
| string | no | Cadena que especifica si se incluyen u 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:
Aplique el tokenizador estándar para crear tokens basados en reglas de división de palabras.
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.
Seleccione el botón de opción Create Your Own y haga 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.
Seleccione daitchMokotoffSoundex del menú desplegable y seleccione el valor que se muestra en la siguiente tabla para el campo originalTokens:
CampoValororiginalTokensincludeHaga clic en Add token filter para agregar el filtro de token a su 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.last_name.
Seleccione page_updated_by.last_name del Field Name menú desplegable y String del Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
dmsAnalyzerde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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 consulta busca términos que suenen similares a AUERBACH en el page_updated_by.last_name campo de la colección de minutos.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 con los mismos números de seis dígitos (097400 y 097500). La siguiente tabla muestra los tokens (términos de búsqueda 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 del lado izquierdo, o "borde", de una entrada de texto en n-gramas de tamaños configurados.
Nota
Normalmente, los filtros de tokens funcionan de forma similar a una canalización: cada token de entrada produce solo un token de salida, que se introduce en el token siguiente. El filtro de tokens edgeGram, en cambio, genera grafos y genera 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 | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible 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:
Aplique el tokenizador estándar para crear tokens basados en reglas de división de palabras.
Aplicar los siguientes filtros en los tokens:
icuFoldingFiltro de token para aplicar plegados de caracteres a los tokens.edgeGramFiltro de token para crear tokens con una longitud de 4 a 7 caracteres desde el lado izquierdo.
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
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.
Seleccione icuFolding del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.
Haga Add token filter clic en 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 a su 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 de título.
Seleccione el título en el Field Name menú desplegable y la cadena en el Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
titleAutocompletede los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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 consulta busca en el title campo de la colección de minutos términos que comiencen mee con, seguido de cualquier cantidad de otros caracteres.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 contienen el término meeting, que coincide con los criterios de búsqueda. En concreto, MongoDB Search crea los siguientes tokens de caracteres (términos de búsqueda) de 4 a 7 para los documentos de los resultados, que luego asocia con el término de consulta mee*:
ID de documento | Tokens de salida |
|---|---|
|
|
|
|
Posesivo en inglés
El filtro de token englishPossessive elimina los posesivos ('s finales) de las palabras.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible 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:
Aplique el tokenizador estándar para crear tokens (términos de búsqueda) basados en reglas de división de palabras.
Aplique el filtro de token posesivo inglés para eliminar los posesivos (
'sfinales) de los tokens.
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
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 a su 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 de título.
Seleccione el título en el Field Name menú desplegable y la cadena en el Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
englishPossessiveStemmerde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 gráfico
El flattenGraph filtro de token transforma un gráfico de filtros de token en una forma plana, apta para indexación. Si usa el filtro de token wordDelimiterGraph, úselo después del filtro de token wordDelimiterGraph.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible 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:
Aplique el tokenizador de espacios en blanco para crear tokens basados en las ocurrencias de espacios en blanco entre palabras.
Aplicar los siguientes filtros a los tokens:
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
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 token.
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 a su analizador personalizado.
Haga Add token filter clic en para agregar otro filtro de token.
Selecciona flattenGraph del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la Field Mappings sección, haga clic Add Field Mapping en para aplicar el analizador personalizado en el campo de mensaje.
Seleccione mensaje en el Field Name menú desplegable y Cadena en el Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
wordDelimiterGraphFlattende los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 sign consulta, aunque el documento contiene el término con guion sign-in en el title campo. El filtro de tokens wordDelimiterGraph crea un gráfico de filtros de tokens y el filtro de tokens flattenGraph transforma el gráfico de filtros de tokens en una forma plana apta para indexación. En concreto, MongoDB Search crea los siguientes tokens (términos de búsqueda) para el documento en los resultados, que luego asocia con el término de sign consulta:
ID de documento | Tokens de salida |
|
|
icuFolding
El icuFolding filtro de token aplica el plegado de caracteres del Informe técnico Unicode30 n.°, como eliminación de acentos, plegado de mayúsculas y minúsculas, plegado de duplicados canónicos y muchos otros detallados en el informe.
Atributos
Tiene el siguiente atributo:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible 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:
Aplique la palabra clave tokenizer para tokenizar todos los términos en el campo de cadena 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.
Seleccione el botón de opción Create Your Own y haga 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 a su 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 anidado text.sv_FI.
Seleccione el texto anidado.sv_FI del Field Name menú desplegable y Cadena del Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
diacriticFolderde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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 consulta utiliza el operador comodín para buscar text.sv_FI en el campo de la colección de minutos todos los términos que contengan el avdelning término, precedido y seguido por cualquier número de otros caracteres.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 consulta avdelning seguido de otros caracteres con _id: 1 y precedido y seguido de otros caracteres con _id: 2. En concreto, MongoDB Search crea los siguientes tokens para los documentos en los resultados, que luego asocia con el término de consulta *avdelning*.
ID de documento | Tokens de salida |
|---|---|
|
|
|
|
icuNormalizer
El icuNormalizer filtro de token normaliza los tokens utilizando un modo de normalización Unicode estándar.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser |
| string | no | Se aplicará el formato de normalización. Los valores aceptados son:
Para obtener más información sobre las formas de normalización admitidas, consulte 1.2Sección: Formas de normalización,15 UTR#. 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 basados en las ocurrencias de espacios en blanco entre palabras.
Utilice el filtro de token
icuNormalizerpara normalizar los tokens por descomposición de compatibilidad, seguida de composición canónica.
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
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 a su analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la Field Mappings sección, haga clic Add Field Mapping en para aplicar el analizador personalizado en el campo de mensaje.
Seleccione mensaje en el Field Name menú desplegable y Cadena en el Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
textNormalizerde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 consulta 1, aunque el documento contiene el número ① encerrado en un círculo en el campo message, ya que el filtro de tokens icuNormalizer crea el token 1 para este carácter utilizando la forma de normalización nfkc. La siguiente tabla muestra los tokens (términos de búsqueda) que MongoDB Search crea para el documento en los resultados utilizando la forma de normalización nfkc y, en comparación, los tokens que crea para las demás formas de normalización.
Formas de normalización | Tokens de salida | Cerillas |
|
| 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 | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible 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:
Aplique el tokenizador de espacios en blanco para crear tokens basados en las ocurrencias de espacios en blanco entre palabras.
Aplicar los siguientes filtros en 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.
Filtro de token porterStemming para eliminar 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 la secuencia.
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
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.
Add token filter Haga clic en 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 a su 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 de título.
Seleccione el título en el Field Name menú desplegable y la cadena en el Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
keywordStemRemoverde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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 consulta busca title en el campo de la colección de minutos el término mee* utilizando el wildcard operador.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 token kStemming combina la lematización algorítmica con un diccionario integrado para el inglés. Espera texto en minúsculas y no modifica el texto en mayúsculas.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible 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:
Aplique el tokenizador estándar para crear tokens basados en reglas de división de palabras.
Aplicar los siguientes filtros en los tokens:
Filtro de tokens minúsculas para convertir los tokens a minúsculas.
Filtro de tokenkStemming para derivar palabras mediante una combinación de derivación algorítmica y un diccionario incorporado para el idioma inglés.
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
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.
Seleccione lowercase del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.
Haga Add token filter clic en para agregar otro filtro de token.
Selecciona kStemming del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token a su 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 anidado text.en_US.
Seleccione text.en_US anidado del menú desplegable Field Name y String del menú desplegable Data Type.
En la sección de propiedades del tipo de datos, seleccione
kStemmerde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 _id: 1 con, que contiene el término plural meetings en minúsculas. MongoDB Search relaciona el término de consulta con el documento porque el filtro de tokens en 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 text.en_US campo del documento con el término de consulta singular. MongoDB Search también analiza el término de consulta mediante el analizador de índices (o, si se especifica,searchAnalyzer mediante). En concreto, MongoDB Search crea los siguientes tokens (términos de búsqueda) para el documento en los resultados, que luego utiliza para relacionar con el término de consulta:
head, this, page, deal, with, department, meeting, head
longitud
El filtro de token length elimina los tokens que son demasiado cortos o demasiado largos.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible 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 a Por defecto: |
| entero | no | Número que especifica la longitud máxima de un token. El valor debe ser mayor 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:
Utilice el tokenizador estándar para crear tokens basados en reglas de división de palabras.
Aplicar los siguientes filtros en los tokens:
Filtro de token icuFolding para aplicar plegados de caracteres.
lengthFiltro de token para indexar solo tokens que tengan al menos 20 unidades de código UTF-16 de longitud después de la tokenización.
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
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.
Seleccione icuFolding del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.
Haga Add token filter clic en para agregar otro filtro de token.
Seleccione length del menú desplegable y configure el siguiente campo para el filtro de token:
CampoValormin20Haga clic en Add token filter para agregar el filtro de token a su 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 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 del tipo de datos, seleccione
longOnlyde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 devuelve el documento con _id: 2, que contiene el término försäljningsavdelningen. MongoDB Search relaciona el documento con el término de consulta porque este tiene más de 20 caracteres. Además, aunque el término de consulta forsaljningsavdelningen no incluye los caracteres diacríticos, MongoDB Search relaciona el término de consulta con el documento incorporando los diacríticos del término original en el documento. En concreto, MongoDB Search crea los siguientes tokens (términos de búsqueda) para el documento con _id: 2.
forsaljningsavdelningen
MongoDB Search no devolverá ningún resultado para una búsqueda de cualquier otro término en el campo text.sv_FI de la colección porque todos los demás términos en el 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 | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible 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.
Seleccione lowercase del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.
En la Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo de título.
Seleccione el título en el Field Name menú desplegable y Autocompletar en el Data Type menú desplegable.
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
Haga clic en Add y luego en Save Changes.
Reemplace la definición de índice predeterminada con lo 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.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 |
|
|
Tras aplicar el analizador personalizado, MongoDB Search crea más tokens de n-gramas, ya que indexa el title campo como tipo de autocompletado, tal como se especifica en la definición del índice. MongoDB Search utiliza los tokens de n-gramas, que incluyen un token para,standup para vincular el documento con el término de standup consulta.
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 en los tokens:
icuNormalizer para normalizar los tokens utilizando un modo de normalización Unicode estándar.
lowercaseFiltro de token para 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
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 a su analizador personalizado.
Haga Add token filter clic en para agregar otro filtro de token.
Selecciona lowercase del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.
Haga clic en Add para crear el analizador personalizado.
En la Field Mappings sección, haga clic Add Field Mapping en para aplicar el analizador personalizado en el campo de mensaje.
Seleccione mensaje en el Field Name menú desplegable y Cadena en el Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
lowerCaserde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 conservando las mayúsculas y minúsculas originales en el documento. Posteriormente, el filtro de tokens lowercase convierte los tokens a minúsculas. MongoDB Search también analiza el término de consulta mediante el analizador de índices (o, si se especifica, mediante searchAnalyzer) para dividirlo y hacerlo coincidir con el documento.
Formas de normalización | Tokens de salida |
|
|
|
|
|
|
nGram
El nGram filtro de token tokeniza la entrada en n-gramas de tamaños configurados. No se puede usar el filtro de token n-Gram en definiciones de mapeo de sinónimos o autocompletado.
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 | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible 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 el analizador titleAutocomplete personalizado. Especifica el analizador de palabras clave.searchAnalyzer La función del analizador personalizado especifica lo siguiente:
Aplique el tokenizador estándar para crear tokens basados en las reglas de división de palabras.
Aplicar una serie de filtros de tokens en los tokens:
englishPossessivepara eliminar los posesivos ('sfinales) de las palabras.nGrampara convertir palabras en tokens de 4 a 7 caracteres de longitud.
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
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.
Seleccione englishPossessive del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.
Haga Add token filter clic en 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 a su 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 de título.
Seleccione el título en el Field Name menú desplegable y la cadena en el Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
titleAutocompletede los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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 consulta utiliza el operador comodín para buscar title en el campo de la colección de minutos el término meet seguido de cualquier cantidad de otros caracteres después del término.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 contienen el término meeting, que MongoDB Search hace coincidir con los criterios de consulta meet* al crear los siguientes tokens (términos de búsqueda).
Formas de normalización | Tokens de salida |
|---|---|
|
|
|
|
Nota
MongoDB Search no crea tokens para términos con menos de 4 caracteres (como the) y más de 7 caracteres, ya que el parámetro termNotInBounds está configurado en omit por defecto. Si se configura 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 lematización Porter para eliminar los sufijos morfológicos y flexivos comunes de las palabras en inglés. Espera texto en minúsculas y no funciona correctamente con texto en mayúsculas.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible 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:
Aplique el tokenizador estándar para crear tokens basados en reglas de división de palabras.
Aplicar los siguientes filtros de token en los tokens:
Filtro de token en minúsculas para convertir las palabras a minúsculas.
Filtro de token de origen para eliminar los sufijos morfológicos y flexivos comunes de las palabras.
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
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.
Seleccione lowercase del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.
Haga Add token filter clic en para agregar otro filtro de token.
Selecciona porterStemming del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token a su 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 de título.
Seleccione el título en el Field Name menú desplegable y la cadena en el Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
porterStemmerde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 en minúsculas normaliza el texto del token a minúsculas y, a continuación, el porterStemming filtro de tokens deriva el sufijo morfológico del meeting token para crear el meet token, que MongoDB Search asocia con el término de Meet consulta. 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 Meet consulta:
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 token en 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.
Seleccione el botón de opción Create Your Own y haga 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.
Seleccione lowercase del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.
Haga Add token filter clic en para agregar otro filtro de token.
Seleccione regex del menú desplegable y configure lo siguiente para el filtro de token:
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 a su 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 anidado page_updated_by.email.
Seleccione page_updated_by.email anidado en el Field Name menú desplegable y String en el Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
emailRedactde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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 consulta busca el page_updated_by.email campo en la colección de minutos utilizando el operador comodín para el término example.com precedido por cualquier número 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 consulta, aunque el campo page_updated_by.email contiene la palabra example.com en las direcciones de correo electrónico. MongoDB Search tokeniza las cadenas que coinciden con la expresión regular proporcionada en el analizador personalizado con la palabra redacted, por lo que no vincula el término de consulta con ningún documento.
eliminar duplicados
El filtro de token removeDuplicates elimina tokens duplicados consecutivos, que son tokens para el mismo término en la misma posición.
Atributos
Tiene el siguiente atributo:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible 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:
Aplique el tokenizador de espacios en blanco para crear tokens basados en las ocurrencias de espacios en blanco entre palabras.
Aplicar los siguientes filtros en los tokens:
Filtro de token de repetición depalabra clave para crear tokens dos veces, como palabra clave y como no palabra clave.
removeDuplicates para filtrar tokens en la misma posición y término que el token anterior en la secuencia.
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
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.
Haga Add token filter clic en para agregar otro filtro de token.
Selecciona removeDuplicates del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token a su 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 de título.
Seleccione el título en el Field Name menú desplegable y la cadena en el Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
removeDuplicatesde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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 consulta busca title en el campo de la colección de minutos el término mee* utilizando el wildcard operador.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 elimina los tokens duplicados en la transmisión.
marcha atrás
El filtro de token reverse invierte cada token de cadena.
Atributos
Tiene el siguiente atributo:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible que identifica este filtro de token. El valor debe ser |
Ejemplo
La siguiente definición de índice indexa los page_updated_by.email campos de la colección de minutos mediante un analizador personalizado keywordReverse llamado. Este analizador personalizado especifica lo siguiente:
Aplique la palabra clave tokenizer para tokenizar cadenas enteras como términos individuales.
Aplique el filtro de token
reversepara invertir los tokens de cadena.
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
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 a su 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 de título.
Seleccione el título en el Field Name menú desplegable y la cadena en el Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
reverseAnalyzerde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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 consulta busca page_updated_by.email en el campo de la colección de minutos utilizando el operador comodín para encontrar cualquier carácter que preceda a @example.com en orden inverso. El reverse filtro de token puede agilizar las consultas con comodín inicial.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 ejecuta la consulta contra los tokens indexados, que también se invierten. 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 moc.elpmaxe@*:
Formas de normalización | Tokens de salida |
|---|---|
|
|
|
|
|
|
|
|
guijarros
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 | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible 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 page_updated_by.email en el campo de la colección de minutos utiliza dos analizadores personalizados, emailAutocompleteIndex emailAutocompleteSearchy, para implementar una función similar a la de autocompletar. MongoDB Search utiliza el emailAutocompleteIndex analizador durante la creación del índice para:
Reemplazar
@caracteres en un campo conATCrear tokens con el tokenizador de espacios en blanco
Fichas de tejas
Crea un edgeGram de esos tokens shingled
MongoDB Search utiliza el analizador emailAutocompleteSearch durante una búsqueda para:
Reemplazar
@caracteres en un campo conATCrear tokens con el tokenizador de espacios en blanco tokenizador
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
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
Haga Add token filter clic en para agregar otro filtro de token.
Haga Add token filter clic en 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 a su 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.
Seleccione el botón de opción Create Your Own y haga 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 Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo anidado page_updated_by.email.
Seleccione page_updated_by.email anidado en el Field Name menú desplegable y String en el Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
emailAutocompleteIndexen el menú desplegable Index Analyzer yemailAutocompleteSearchen el menú desplegable Search Analyzer.Haga clic en Add y 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:
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 mediante el analizador emailAutocompleteSearch, que luego compara con los tokens de índice creados mediante el analizador emailAutocompleteIndex. La siguiente tabla muestra los tokens de búsqueda e índice (hasta 15 caracteres) que crea MongoDB Search:
Tokens de búsqueda | Index Tokens |
|---|---|
|
|
bola de nieveDerivado
El snowballStemming token filtra los tokens de Stems utilizando un lematizador generado por Snowball.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible 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:
Aplique el tokenizador estándar para crear tokens basados en reglas de división de palabras.
Aplicar los siguientes filtros de token en 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.
Seleccione el botón de opción Create Your Own y haga 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.
Seleccione lowercase del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.
Haga Add token filter clic en 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 a su 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 del tipo de datos, seleccione
frenchStemmerde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 relaciona el término de consulta con el documento porque crea los siguientes tokens para el documento, que luego utiliza para relacionar el término de consulta réunion:
ID de documento | Tokens de salida |
|---|---|
|
|
Plural de español
El filtro de token spanishPluralStemming deriva palabras en plural en español. Espera texto en minúsculas.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible 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:
Aplique el tokenizador estándar para crear tokens basados en reglas de división de palabras.
Aplicar los siguientes filtros de token en los tokens:
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
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.
Seleccione lowercase del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.
Haga Add token filter clic en para agregar otro filtro de token.
Selecciona spanishPluralStemming del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token a su 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 anidado text.es_MX.
Seleccione el texto anidado.es_MX del Field Name menú desplegable y Cadena del Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
spanishPluralStemmerde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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 consulta busca text.es_MX en el campo de la colección de minutos el término en punto español.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 contiene el término plural puntos. MongoDB Search encuentra este documento para el término de consulta punto porque analiza puntos como punto al derivar el plural (s) del término. En concreto, MongoDB Search crea los siguientes tokens (términos de búsqueda) para el documento en los resultados, que luego utiliza para encontrar la coincidencia con el término de consulta:
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 | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible 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:
Aplique el tokenizador estándar para crear tokens basados en reglas de división de palabras.
Aplicar los siguientes filtros en los tokens:
Filtro de token en minúsculas para convertir las palabras a minúsculas.
Filtro de tokenstempel para derivar las palabras polacas.
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
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.
Seleccione lowercase del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.
Haga Add token filter clic en para agregar otro filtro de token.
Selecciona spanishPluralStemming del menú desplegable.
Haga clic en Add token filter para agregar el filtro de token a su 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 de título.
Seleccione el título en el Field Name menú desplegable y la cadena en el Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
stempelAnalyzerde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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 consulta busca text.pl_PL en el campo de la colección de minutos el término punkt polaco.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 contiene el término plural punkty. MongoDB Search encuentra este documento para el término de consulta punkt porque analiza punkty como punkt al derivar el plural (y) del término. En concreto, MongoDB Search crea los siguientes tokens (términos de búsqueda) para el documento en los resultados, que luego compara con el término de consulta:
ID de documento | Tokens de salida |
|---|---|
|
|
palabra vacía
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 | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser |
| matriz de cadenas | sí | Lista que contiene las palabras vacías correspondientes a los tokens que se eliminarán. El valor debe ser una o más palabras vacías. |
| booleano | no | Marca que indica si se deben ignorar las mayúsculas y minúsculas de las palabras vacías al filtrar los tokens que se eliminarán. 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:
Aplique el tokenizador de espacios en blanco para crear tokens basados en las ocurrencias 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.
Seleccione el botón de opción Create Your Own y haga 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.
Seleccione stopword del menú desplegable y escriba lo siguiente en el campo tokens:
is,the,atHaga clic en Add token filter para agregar el filtro de token a su 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 anidado text.en_US.
Seleccione text.en_US anidado del menú desplegable Field Name y String del menú desplegable Data Type.
En la sección de propiedades del tipo de datos, seleccione
stopwordRemoverde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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 consulta busca la frase head of the sales en el text.en_US campo de la colección de minutos.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible 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 minutos mediante un analizador personalizado tokenTrimmer llamado. Este analizador personalizado especifica lo siguiente:
Aplique el filtro de caracteres htmlStrip para eliminar todas las etiquetas HTML del texto excepto la
aetiqueta.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.
Seleccione el botón de opción Create Your Own y haga clic en Next.
Escriba
tokenTrimmeren el campo Analyzer Name.Expanda Character Filters y haga clic Add character filter en.
Seleccione htmlStrip del menú desplegable y escriba
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 a su analizador personalizado.
Haga clic en Add para agregar el analizador personalizado a su índice.
En la Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo anidado text.en_US.
Seleccione text.en_US anidado del menú desplegable Field Name y String del menú desplegable Data Type.
En la sección de propiedades del tipo de datos, seleccione
tokenTrimmerde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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 consulta busca la frase *department meetings* precedida y seguida por cualquier número de otros caracteres en el text.en_US campo en la colección de minutos.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 consulta 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 cadena y eliminó los espacios iniciales y finales del token:
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 | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser |
| Objeto | no | Objeto que contiene las reglas que determinan cómo dividir las palabras en subpalabras. Por defecto: |
delimiterOptions.generateWordParts | booleano | no | Indicador que indica si se deben dividir los tokens según las subpalabras. Por ejemplo, si es 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 | Bandera 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 según las transiciones entre letras y números. Por ejemplo, si es 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 | Bandera que indica si se deben omitir los tokens con 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 demarcación. Si especifica |
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:
Aplique el tokenizador de espacios en blanco para crear tokens basados en las ocurrencias de espacios en blanco entre palabras.
Aplica el filtro de tokens wordDelimiterGraph para lo siguiente:
No intentes dividir
is,theyat. La exclusión distingue entre mayúsculas y minúsculas. Por ejemplo,IsytHeno se excluyen.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.
Seleccione el botón de opción Create Your Own y haga 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.
Seleccione lowercase del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.
Haga Add token filter clic en para agregar otro filtro de token.
Seleccione wordDelimiterGraph del menú desplegable y configure los siguientes campos:
Deseleccione delimiterOptions.generateWordParts y seleccione delimiterOptions.splitOnCaseChange.
Escriba y luego seleccione del 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 a su 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 anidado del título.
Seleccione el título anidado en el Field Name menú desplegable y la Cadena en el Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
wordDelimiterGraphAnalyzerde los menús desplegables Index Analyzer y Search Analyzer.Haga clic en Add y 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.
Haga clic en el botón Query para su índice.
Haga clic en Edit Query para editar la consulta.
Haga clic en la barra de consulta y seleccione la base de datos y la colección.
Reemplace la consulta predeterminada por la siguiente y haga 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 |
|---|---|
|
|
|
|