Los filtros de caracteres examinan el texto carácter por carácter y realizan operaciones de filtrado. Requieren un campo de tipo y algunos también aceptan opciones adicionales.
"charFilters": [ { "type": "<filter-type>", "<additional-option>": <value> } ]
Tipos de filtros de caracteres
MongoDB Search admite los siguientes tipos de filtros de caracteres:
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 idioma para configurar el método para ejecutar los ejemplos en esta página.
tira html
El filtro de caracteres htmlStrip elimina las construcciones HTML.
Atributos
El filtro de caracteres htmlStrip tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible que identifica este tipo de filtro de caracteres. El valor debe ser |
| matriz de cadenas | sí | Lista que contiene las etiquetas HTML a excluir del filtrado. |
Ejemplo
El siguiente ejemplo de definición de índice indexa el text.en_US campo de la colección de minutos mediante un analizador personalizado htmlStrippingAnalyzer llamado. Este analizador personalizado especifica lo siguiente:
Elimine todas las etiquetas HTML del texto excepto la etiqueta
autilizando el filtro de caractereshtmlStrip.Generar tokens basados en reglas de división de palabras del algoritmo de segmentación de texto Unicodeutilizando el tokenizador estándar.
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
htmlStrippingAnalyzeren 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.
Expande Tokenizer si está contraído y selecciona standard del menú desplegable.
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
htmlStrippingAnalyzerde 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 lo siguiente:
1 { 2 "mappings": { 3 "fields": { 4 "text": { 5 "type": "document", 6 "dynamic": true, 7 "fields": { 8 "en_US": { 9 "analyzer": "htmlStrippingAnalyzer", 10 "type": "string" 11 } 12 } 13 } 14 } 15 }, 16 "analyzers": [{ 17 "name": "htmlStrippingAnalyzer", 18 "charFilters": [{ 19 "type": "htmlStrip", 20 "ignoredTags": ["a"] 21 }], 22 "tokenizer": { 23 "type": "standard" 24 }, 25 "tokenFilters": [] 26 }] 27 }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "text": { 7 "type": "document", 8 "dynamic": true, 9 "fields": { 10 "en_US": { 11 "analyzer": "htmlStrippingAnalyzer", 12 "type": "string" 13 } 14 } 15 } 16 } 17 }, 18 "analyzers": [ 19 { 20 "name": "htmlStrippingAnalyzer", 21 "charFilters": [ 22 { 23 "type": "htmlStrip", 24 "ignoredTags": ["a"] 25 } 26 ], 27 "tokenizer": { 28 "type": "standard" 29 }, 30 "tokenFilters": [] 31 } 32 ] 33 } 34 )
La siguiente consulta busca ocurrencias de la cadena head en el campo text.en_US de la colección minutes.
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 Find:
{ "$search": { "text": { "query": "head", "path": "text.en_US" } } } SCORE: 0.32283568382263184 _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" SCORE: 0.3076632022857666 _id: “3” message: "try to sign-in" page_updated_by: Object last_name: "LEWINSKY" first_name: "Brièle" email: "lewinsky@example.com" phone: "(123).456.9870" text: Object en_US: "<body>We'll head out to the conference room by noon.</body>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "head", 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." } }, { _id: 3, text: { en_US: "<body>We'll head out to the conference room by noon.</body>" } } ]
MongoDB Search no devuelve el documento con _id: 1 porque la cadena head forma parte de la etiqueta <head> HTML. El documento con _id: 3 contiene etiquetas HTML, pero la cadena head se encuentra en otro lugar, por lo que el documento coincide. La siguiente tabla muestra los tokens que MongoDB Search genera para los text.en_US valores del campo en los _id: 1 documentos, _id: 2 y _id: 3 de la colección de minutos htmlStrippingAnalyzer mediante.
ID de documento | Tokens de salida |
|---|---|
|
|
|
|
|
|
icuNormalizar
El icuNormalize filtro de caracteres normaliza el texto con el normalizador de ICU. Está basado en el ICUNormalizer2CharFilterde Lucene.
Atributos
El filtro de carácter icuNormalize tiene el siguiente atributo:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible que identifica este tipo de filtro de caracteres. El valor debe ser |
Ejemplo
El siguiente ejemplo de definición de índice indexa el message campo de la colección de minutos mediante un analizador personalizado normalizingAnalyzer llamado. Este analizador personalizado especifica lo siguiente:
Normalice el texto en el valor del campo
messageutilizando el filtro de caracteresicuNormalize.Tokenice las palabras en el campo en función de las ocurrencias de espacios en blanco entre palabras utilizando el tokenizador de espacios en blanco.
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
normalizingAnalyzeren el campo Analyzer Name.Expanda Character Filters y haga clic Add character filter en.
Seleccione icuNormalize del menú desplegable y haga clic en Add character filter.
Expande Tokenizer si está contraído y selecciona whitespace del menú desplegable.
Haga clic en Add para agregar el analizador personalizado a su índice.
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
normalizingAnalyzerde 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 lo siguiente:
1 { 2 "mappings": { 3 "fields": { 4 "message": { 5 "type": "string", 6 "analyzer": "normalizingAnalyzer" 7 } 8 } 9 }, 10 "analyzers": [ 11 { 12 "name": "normalizingAnalyzer", 13 "charFilters": [ 14 { 15 "type": "icuNormalize" 16 } 17 ], 18 "tokenizer": { 19 "type": "whitespace" 20 }, 21 "tokenFilters": [] 22 } 23 ] 24 }
db.minutes.createSearchIndex("default", { "mappings": { "fields": { "message": { "type": "string", "analyzer": "normalizingAnalyzer" } } }, "analyzers": [ { "name": "normalizingAnalyzer", "charFilters": [ { "type": "icuNormalize" } ], "tokenizer": { "type": "whitespace" }, "tokenFilters": [] } ] })
La siguiente consulta busca ocurrencias de la cadena no (para número) en el campo message de la colección minutes.
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 Find:
{ "$search": { "text": { "query": "no", "path": "message" } } } SCORE: 0.4923309087753296 _id: “4” message: "write down your signature or phone №" page_updated_by: Object last_name: "LEVINSKI" first_name: "François" email: "levinski@example.com" phone: "123-456-8907" text: Object en_US: "<body>This page has been updated with the items on the agenda.</body>" es_MX: "La página ha sido actualizada con los puntos de la agenda." pl_PL: "Strona została zaktualizowana o punkty porządku obrad."
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "no", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1, 14 "title": 1 15 } 16 } 17 ])
[ { _id: 4, title: 'The daily huddle on tHe StandUpApp2', message: 'write down your signature or phone №' } ]
MongoDB Search encontró la correspondencia entre el documento _id: 4 y el término de consulta no porque normalizó el símbolo de número № en el campo mediante el filtro de caracteres icuNormalize y creó el token no para esa abreviatura tipográfica de la palabra "número". MongoDB Search genera los siguientes tokens para el valor del campo message en el documento _id: 4 mediante normalizingAnalyzer:
ID de documento | Tokens de salida |
|---|---|
|
|
cartografía
El mapping filtro de caracteres aplica asignaciones de normalización especificadas por el usuario a los caracteres. Se basa en MappingCharFilter de Lucene.
Atributos
El filtro de caracteres mapping tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible por humanos que identifica este tipo de filtro de caracteres. El valor debe ser |
| Objeto | sí | Objeto que contiene una lista de asignaciones separadas por comas. Una asignación indica que un carácter o grupo de caracteres debe sustituirse por otro, en el formato |
Ejemplo
El siguiente ejemplo de definición de índice indexa el page_updated_by.phone campo de la colección de minutos mediante un analizador personalizado mappingAnalyzer llamado. Este analizador personalizado especifica lo siguiente:
Elimine las instancias de guion (
-), punto (.), paréntesis de apertura ((), paréntesis de cierre ()) y espacios en el campo de teléfono utilizando el filtro de caracteresmapping.Tokenice toda la entrada como un solo token utilizando la palabra clave tokenizer.
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
mappingAnalyzeren 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 los siguientes caracteres en el campo Original, uno a la vez, y deje el campo Replacement correspondiente vacío.
OriginalSustitución-.(){ESPACIO}
Haga clic en Add character filter.
Expande Tokenizer si está contraído y selecciona keyword del menú desplegable.
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 page_updated_by.phone (anidado).
Seleccione page_updated_by.phone (anidado)del Field Name menú desplegable y String del Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
mappingAnalyzerde 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 lo siguiente:
1 { 2 "mappings": { 3 "fields": { 4 "page_updated_by": { 5 "fields": { 6 "phone": { 7 "analyzer": "mappingAnalyzer", 8 "type": "string" 9 } 10 }, 11 "type": "document" 12 } 13 } 14 }, 15 "analyzers": [ 16 { 17 "name": "mappingAnalyzer", 18 "charFilters": [ 19 { 20 "mappings": { 21 "-": "", 22 ".": "", 23 "(": "", 24 ")": "", 25 " ": "" 26 }, 27 "type": "mapping" 28 } 29 ], 30 "tokenizer": { 31 "type": "keyword" 32 } 33 } 34 ] 35 }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "fields": { 6 "page_updated_by": { 7 "fields": { 8 "phone": { 9 "analyzer": "mappingAnalyzer", 10 "type": "string" 11 } 12 }, 13 "type": "document" 14 } 15 } 16 }, 17 "analyzers": [ 18 { 19 "name": "mappingAnalyzer", 20 "charFilters": [ 21 { 22 "mappings": { 23 "-": "", 24 ".": "", 25 "(": "", 26 ")": "", 27 " ": "" 28 }, 29 "type": "mapping" 30 } 31 ], 32 "tokenizer": { 33 "type": "keyword" 34 } 35 } 36 ] 37 } 38 )
La siguiente consulta busca en el campo page_updated_by.phone la cadena 1234567890.
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 Find:
{ "$search": { "text": { "query": "1234567890", "path": "page_updated_by.phone" } } } 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: "Den här sidan behandlar avdelningsmöten" fr_CA: "Cette page traite des réunions de département"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "1234567890", 6 "path": "page_updated_by.phone" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.phone": 1, 14 "page_updated_by.last_name": 1 15 } 16 } 17 ])
[ { _id: 1, page_updated_by: { last_name: 'AUERBACH', phone: '(123)-456-7890' } } ]
Los resultados de MongoDB Search contienen un documento donde los números de la cadena phone coinciden con la cadena de consulta. MongoDB Search encontró la coincidencia entre el documento y la cadena de consulta, aunque esta no incluye los paréntesis que encierran el código de área telefónico ni el guion entre los números, ya que MongoDB Search eliminó estos caracteres mediante el filtro de caracteres mapping y creó un único token para el valor del campo. En concreto, MongoDB Search generó el siguiente token para el campo phone en el documento con _id: 1:
ID de documento | Tokens de salida |
|---|---|
|
|
MongoDB Search también coincidiría con el documento _id: 1 en las búsquedas (123)-456-7890 123-456-7890de,,, 123.456.7890 etc., ya que, para los campos "Cómo indexar campos de cadena", MongoDB Search también analiza los términos de consulta mediante el analizador de índices (o, si se especifica, searchAnalyzer mediante). La siguiente tabla muestra los tokens que MongoDB Search crea al eliminar las instancias de- guion (),. punto( (), paréntesis de) apertura (), paréntesis de cierre () y espacios en el término de consulta:
query término | Tokens de salida |
|---|---|
|
|
|
|
|
|
Persa
El persian filtro de caracteres reemplaza las instancias de caracteres no enlazados de ancho cero con el carácter de espacio. Este filtro de caracteres se basa en PersianCharFilter de Lucene.
Atributos
El filtro de carácter persian tiene el siguiente atributo:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible que identifica este tipo de filtro de caracteres. El valor debe ser |
Ejemplo
El siguiente ejemplo de definición de índice indexa el text.fa_IR campo de la colección de minutos mediante un analizador personalizado persianCharacterIndex llamado. Este analizador personalizado especifica lo siguiente:
Aplique el filtro de carácter
persianpara reemplazar los caracteres no imprimibles en el valor del campo con el carácter de espacio.Utilice el tokenizador de espacios en blanco para crear tokens basados en las ocurrencias de espacios en blanco entre 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
persianCharacterIndexen el campo Analyzer Name.Expanda Character Filters y haga clic Add character filter en.
Seleccione persian del menú desplegable y haga clic en Add character filter.
Expande Tokenizer si está contraído y selecciona whitespace del menú desplegable.
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 text.fa_IR (anidado).
Seleccione text.fa_IR (anidado) del Field Name menú desplegable y String del Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
persianCharacterIndexde 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 lo siguiente:
1 { 2 "analyzer": "lucene.standard", 3 "mappings": { 4 "fields": { 5 "text": { 6 "dynamic": true, 7 "fields": { 8 "fa_IR": { 9 "analyzer": "persianCharacterIndex", 10 "type": "string" 11 } 12 }, 13 "type": "document" 14 } 15 } 16 }, 17 "analyzers": [ 18 { 19 "name": "persianCharacterIndex", 20 "charFilters": [ 21 { 22 "type": "persian" 23 } 24 ], 25 "tokenizer": { 26 "type": "whitespace" 27 } 28 } 29 ] 30 }
db.minutes.createSearchIndex("default", { "analyzer": "lucene.standard", "mappings": { "fields": { "text": { "dynamic": true, "fields": { "fa_IR": { "analyzer": "persianCharacterIndex", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "name": "persianCharacterIndex", "charFilters": [ { "type": "persian" } ], "tokenizer": { "type": "whitespace" } } ] })
La siguiente consulta busca en el campo text.fa_IR el 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 Find:
{ "$search": { "text": { "query": "صحبت", "path": "text.fa_IR" } } } SCORE: 0.13076457381248474 _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"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "صحبت", 6 "path": "text.fa_IR" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "text.fa_IR": 1, 14 "page_updated_by.last_name": 1 15 } 16 } 17 ])
[ { _id: 2, page_updated_by: { last_name: 'OHRBACH' }, text: { fa_IR: 'ابتدا رئیس بخش فروش صحبت کرد' } } ]
MongoDB Search devuelve el documento _id: 2 que contiene el término de consulta. MongoDB Search relaciona el término de consulta con el documento reemplazando primero las instancias de non-joiners de ancho cero con el carácter de espacio y luego creando tokens individuales para cada palabra en el valor del campo según las instancias de espacios entre palabras. Específicamente, MongoDB Search genera los siguientes tokens para el documento con _id: 2:
ID de documento | Tokens de salida |
|---|---|
|
|
Obtén más información
Para ver definiciones de índices y consultas adicionales que utilizan el filtro de caracteres mapping, consulte los siguientes ejemplos de páginas de referencia:
shingle Filtro de tokens
TokenizadorregexCaptureGroup