El tokenizador de un analizador personalizado determina cómo MongoDB Search divide el texto en fragmentos discretos para su indexación. Los tokenizadores requieren un campo de tipo y algunos también admiten opciones adicionales.
"tokenizer": { "type": "<tokenizer-type>", "<additional-option>": "<value>" }
Tipos de tokenizadores
MongoDB Search admite los siguientes tipos de tokenizadores:
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.
edgeGram
El edgeGram tokenizador tokeniza la entrada del lado izquierdo (o borde) de una entrada de texto en n-gramas de tamaños determinados. No se puede usar un analizador personalizado con el tokenizador edgeGram en el analyzer campo para definiciones de asignación de campos de sinónimoso autocompletado.
Atributos
Tiene los siguientes atributos:
Nota
El tokenizador edgeGram genera múltiples tokens de salida por palabra y entre palabras en el texto de entrada, lo que genera gráficos de tokens.
Debido a que las definiciones de mapeo de tipos de campos de autocompletar y los analizadores con mapeos de sinónimos solo funcionan cuando se usan con tokenizadores que no producen gráficos, no puede usar un analizador personalizado con el tokenizador edgeGram en el analyzer campo para definiciones de mapeo de tipos de campos de autocompletar o analizadores con mapeos de sinónimos.
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible por humanos que identifica este tipo de tokenizador. El valor debe ser |
| entero | sí | Número de caracteres a incluir en el token más corto creado. |
| entero | sí | Número de caracteres a incluir en el token más largo creado. |
Ejemplo
La siguiente definición de índice indexa el campo message de la colección minutes mediante un analizador personalizado llamado edgegramExample. Utiliza el tokenizador edgeGram para crear tokens (términos de búsqueda) de entre 2 y 7 caracteres, comenzando por el primer carácter a la izquierda de las palabras del campo message.
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
edgegramExampleen el campo Analyzer Name.Expande Tokenizer si está contraído.
Seleccione edgeGram del menú desplegable y escriba el valor para los siguientes campos:
CampoValorminGram
2maxGram
7Haga 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
edgegramExamplede 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:
{ "mappings": { "dynamic": true, "fields": { "message": { "analyzer": "edgegramExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "edgegramExample", "tokenFilters": [], "tokenizer": { "maxGram": 7, "minGram": 2, "type": "edgeGram" } } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": true, 6 "fields": { 7 "message": { 8 "analyzer": "edgegramExample", 9 "type": "string" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "charFilters": [], 16 "name": "edgegramExample", 17 "tokenFilters": [], 18 "tokenizer": { 19 "maxGram": 7, 20 "minGram": 2, 21 "type": "edgeGram" 22 } 23 } 24 ] 25 } 26 )
La siguiente consulta busca en el campo message de la colección minutes texto que comience con tr.
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": "tr", "path": "message" } } } SCORE: 0.3150668740272522 _id: "1" message: "try to siGn-In" page_updated_by: Object last_name: "AUERBACH" first_name: "Siân" email: "auerbach@example.com" phone: "(123)-456-7890" text: Object en_US: "<head> This page deals with department meetings.</head>" sv_FI: "Den här sidan behandlar avdelningsmöten" fr_CA: "Cette page traite des réunions de département" SCORE: 0.3150668740272522 _id: "3" message: "try to sign-in" page_updated_by: Object last_name: "LEWINSKY" first_name: "Brièle" email: "lewinsky@example.com" phone: "(123).456.9870" text: Object en_US: "<body>We'll head out to the conference room by noon.</body>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "tr", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1 14 } 15 } 16 ])
{ _id: 1, message: 'try to siGn-In' }, { _id: 3, message: 'try to sign-in' }
MongoDB Search devuelve documentos con _id: 1 y _id: 3 en los resultados porque creó un token con el valor tr usando el tokenizador edgeGram para los documentos, que coincide con el término de búsqueda. Si indexa el campo message usando el tokenizador standard, MongoDB Search no devolverá ningún resultado para el término de búsqueda tr.
La siguiente tabla muestra los tokens que el tokenizador edgeGram y, en comparación, el tokenizador standard, crean para los documentos en los resultados:
Tokenizador | Token Outputs |
|---|---|
|
|
|
|
keyword
El tokenizador keyword tokeniza toda la entrada como un único token. MongoDB Search no indexa campos de cadena que superen los 32766 caracteres con el tokenizador keyword.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible por humanos que identifica este tipo de tokenizador. El valor debe ser |
Ejemplo
La siguiente definición de índice indexa el campo message en la colección minutes utilizando un analizador personalizado llamado keywordExample. Utiliza el tokenizador keyword para crear un token (términos buscables) en todo el campo como un único término.
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
keywordExampleen el campo Analyzer Name.Expande Tokenizer si está contraído.
Selecciona keyword 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
keywordExamplede 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 "dynamic": true, 4 "fields": { 5 "message": { 6 "analyzer": "keywordExample", 7 "type": "string" 8 } 9 } 10 }, 11 "analyzers": [ 12 { 13 "charFilters": [], 14 "name": "keywordExample", 15 "tokenFilters": [], 16 "tokenizer": { 17 "type": "keyword" 18 } 19 } 20 ] 21 }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": true, 6 "fields": { 7 "message": { 8 "analyzer": "keywordExample", 9 "type": "string" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "charFilters": [], 16 "name": "keywordExample", 17 "tokenFilters": [], 18 "tokenizer": { 19 "type": "keyword" 20 } 21 } 22 ] 23 } 24 )
La siguiente consulta busca en el campo message de la colección minutes la frase try to 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 Find:
{ "$search": { "text": { "query": "try to sign-in", "path": "message" } } } SCORE: 0.5472603440284729 _id: "3" message: "try to sign-in" page_updated_by: Object last_name: "LEWINSKY" first_name: "Brièle" email: "lewinsky@example.com" phone: "(123).456.9870" text: Object en_US: "<body>We'll head out to the conference room by noon.</body>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "try to sign-in", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1 14 } 15 } 16 ])
{ _id: 3, message: 'try to sign-in' }
MongoDB Search devuelve el documento con _id: 3 en los resultados porque MongoDB Search creó un token con el valor try to sign-in usando el tokenizador keyword para los documentos, lo que coincide con el término de búsqueda. Si indexes el campo message utilizando el tokenizador standard, MongoDB Search devuelve documentos con _id: 1, _id: 2 y _id: 3 para el término de búsqueda try to sign-in porque cada documento contiene algunos de los tokens que crea el tokenizador standard.
La siguiente tabla muestra los tokens que el tokenizador keyword y, en comparación, el tokenizador standard, crean para el documento con _id: 3:
Tokenizador | Token Outputs |
|---|---|
|
|
|
|
nGram
El nGram tokenizador tokeniza en fragmentos de texto, o "n-gramas", de tamaños determinados. No se puede usar un analizador personalizado con el tokenizador de n-gramas en el analyzer campo para definiciones de asignación de campos de sinónimos o de autocompletado.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible por humanos que identifica este tipo de tokenizador. El valor debe ser |
| entero | sí | Número de caracteres a incluir en el token más corto creado. |
| entero | sí | Número de caracteres a incluir en el token más largo creado. |
Ejemplo
La siguiente definición de índice indexa el campo title de la colección minutes mediante un analizador personalizado llamado ngramExample. Utiliza el tokenizador nGram para crear tokens (términos de búsqueda) de entre 4 y 6 caracteres en el campo title.
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
ngramAnalyzeren el campo Analyzer Name.Expande Tokenizer si está contraído.
Seleccione nGram del menú desplegable y escriba el valor para los siguientes campos:
CampoValorminGram
4maxGram
6Haga 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
ngramAnalyzerde 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 "dynamic": true, 4 "fields": { 5 "title": { 6 "analyzer": "ngramExample", 7 "type": "string" 8 } 9 } 10 }, 11 "analyzers": [ 12 { 13 "charFilters": [], 14 "name": "ngramExample", 15 "tokenFilters": [], 16 "tokenizer": { 17 "maxGram": 6, 18 "minGram": 4, 19 "type": "nGram" 20 } 21 } 22 ] 23 }
db.minutes.createSearchIndex("default", { "mappings": { "dynamic": true, "fields": { "title": { "analyzer": "ngramExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "ngramExample", "tokenFilters": [], "tokenizer": { "maxGram": 6, "minGram": 4, "type": "nGram" } } ] })
La siguiente query busca el campo title en la colección minutes para el término week.
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": { "index": "default", "text": { "query": "week", "path": "title" } } } SCORE: 0.5895273089408875 _id: "1" message: "try to siGn-In" page_updated_by: Object last_name: "AUERBACH" first_name: "Siân" email: "auerbach@example.com" phone: "(123)-456-7890" text: Object en_US: "<head> This page deals with department meetings.</head>" sv_FI: "Den här sidan behandlar avdelningsmöten" fr_CA: "Cette page traite des réunions de département"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "week", 6 "path": "title" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "title": 1 14 } 15 } 16 ])
{ _id: 1, title: "The team's weekly meeting" }
MongoDB Search devuelve el documento con _id: 1 en los resultados porque creó un token con el valor week usando el tokenizador nGram para los documentos, que coincide con el término de búsqueda. Si indexa el campo title usando el tokenizador standard o edgeGram, MongoDB Search no devolverá ningún resultado para el término de búsqueda week.
La siguiente tabla muestra los tokens que el tokenizador nGram y, en comparación, los tokenizadores standard y edgeGram crean para el documento con _id: 1:
Tokenizador | Token Outputs |
|---|---|
|
|
|
|
|
|
Grupo de captura de expresiones regulares
El tokenizador regexCaptureGroup coincide con un patrón de expresión regular de Java para extraer tokens.
Tip
Para obtener más información sobre la sintaxis de expresiones regulares de Java, consulte el Patrón clase en la documentación de Java.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible por humanos que identifica este tipo de tokenizador. El valor debe ser |
| string | sí | Expresión regular con la que comparar. |
| entero | sí | Índice del grupo de caracteres dentro de la expresión coincidente que se extraerá en tokens. Use |
Ejemplo
La siguiente definición de índice indexa el campo page_updated_by.phone de la colección minutes mediante un analizador personalizado llamado phoneNumberExtractor. Utiliza lo siguiente:
mappingsFiltro de caracteres para eliminar los paréntesis alrededor de los primeros tres dígitos y reemplazar todos los espacios y puntos con guionesregexCaptureGrouptokenizador para crear una sola ficha a partir del primer número de teléfono con formato estadounidense presente en el texto de entrada
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
phoneNumberExtractoren el campo Analyzer Name.Expanda Character Filters y haga clic en Add character filter.
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-.()Haga clic en Add character filter.
Expande Tokenizer si está contraído.
Seleccione regexCaptureGroup del menú desplegable y escriba el valor para los siguientes campos:
CampoValorpattern
^\\b\\d{3}[-]?\\d{3}[-]?\\d{4}\\b$group
0Haga 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.
Seleccione page_updated_by.phone del Field Name menú desplegable y String del Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
phoneNumberExtractorde 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": true, "fields": { "page_updated_by": { "fields": { "phone": { "analyzer": "phoneNumberExtractor", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "charFilters": [ { "mappings": { " ": "-", "(": "", ")": "", ".": "-" }, "type": "mapping" } ], "name": "phoneNumberExtractor", "tokenFilters": [], "tokenizer": { "group": 0, "pattern": "^\\b\\d{3}[-]?\\d{3}[-]?\\d{4}\\b$", "type": "regexCaptureGroup" } } ] }
db.minutes.createSearchIndex("default", { "mappings": { "dynamic": true, "fields": { "page_updated_by": { "fields": { "phone": { "analyzer": "phoneNumberExtractor", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "charFilters": [ { "mappings": { " ": "-", "(": "", ")": "", ".": "-" }, "type": "mapping" } ], "name": "phoneNumberExtractor", "tokenFilters": [], "tokenizer": { "group": 0, "pattern": "^\\b\\d{3}[-]?\\d{3}[-]?\\d{4}\\b$", "type": "regexCaptureGroup" } } ] })
La siguiente consulta busca el número de teléfono 123-456-9870 en el campo page_updated_by.phone 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": { "index": "default", "text": { "query": "123-456-9870", "path": "page_updated_by.phone" } } } SCORE: 0.5472603440284729 _id: "3" message: "try to sign-in" page_updated_by: Object last_name: "LEWINSKY" first_name: "Brièle" email: "lewinsky@example.com" phone: "(123).456.9870" text: Object en_US: "<body>We'll head out to the conference room by noon.</body>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "123-456-9870", 6 "path": "page_updated_by.phone" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.phone": 1 14 } 15 } 16 ])
{ _id: 3, page_updated_by: { phone: '(123).456.9870' }
MongoDB Search devuelve el documento con _id: 3 en los resultados porque MongoDB Search creó un token con el valor 123-456-7890 utilizando el tokenizador regexCaptureGroup para los documentos, que coincide con el término de búsqueda. Si indexas el campo page_updated_by.phone usando el tokenizador standard, MongoDB Search devuelve todos los documentos para el término de búsqueda 123-456-7890.
La siguiente tabla muestra los tokens que el tokenizador regexCaptureGroup y, en comparación, el tokenizador standard, crean para el documento con _id: 3:
Tokenizador | Token Outputs |
|---|---|
|
|
|
|
División de expresiones regulares
El tokenizador regexSplit divide los tokens con un delimitador basado en expresiones regulares de Java.
Tip
Para obtener más información sobre la sintaxis de expresiones regulares de Java, consulte la clase Pattern en la documentación de Java.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible por humanos que identifica este tipo de tokenizador. El valor debe ser |
| string | sí | Expresión regular con la que comparar. |
Ejemplo
La siguiente definición de índice indexa el campo page_updated_by.phone de la colección minutes mediante un analizador personalizado llamado dashDotSpaceSplitter. Utiliza el tokenizador regexSplit para crear tokens (términos de búsqueda) a partir de uno o más guiones, puntos y espacios en el campo page_updated_by.phone.
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
dashDotSpaceSplitteren el campo Analyzer Name.Expande Tokenizer si está contraído.
Seleccione regexSplit del menú desplegable y escriba el valor para el siguiente campo:
CampoValorpattern
[-. ]+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.
Seleccione page_updated_by.phone del Field Name menú desplegable y String del Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
dashDotSpaceSplitterde 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:
{ "mappings": { "dynamic": true, "fields": { "page_updated_by": { "fields": { "phone": { "analyzer": "dashDotSpaceSplitter", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "charFilters": [], "name": "dashDotSpaceSplitter", "tokenFilters": [], "tokenizer": { "pattern": "[-. ]+", "type": "regexSplit" } } ] }
db.minutes.createSearchIndex("default", { "mappings": { "dynamic": true, "fields": { "page_updated_by": { "fields": { "phone": { "analyzer": "dashDotSpaceSplitter", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "charFilters": [], "name": "dashDotSpaceSplitter", "tokenFilters": [], "tokenizer": { "pattern": "[-. ]+", "type": "regexSplit" } } ] })
La siguiente consulta busca en el campo page_updated_by.phone de la colección minutes los dígitos 9870.
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": { "index": "default", "text": { "query": "9870", "path": "page_updated_by.phone" } } } SCORE: 0.5472603440284729 _id: "3" message: "try to sign-in" page_updated_by: Object last_name: "LEWINSKY" first_name: "Brièle" email: "lewinsky@example.com" phone: "(123).456.9870" text: Object en_US: "<body>We'll head out to the conference room by noon.</body>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "9870", 6 "path": "page_updated_by.phone" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.phone": 1 14 } 15 } 16 ])
{ _id: 3, page_updated_by: { phone: '(123).456.9870' }
MongoDB Search devuelve el documento con _id: 3 en los resultados porque creó un token con el valor 9870 usando el tokenizador regexSplit para los documentos, que coincide con el término de búsqueda. Si indexa el campo page_updated_by.phone usando el tokenizador standard, MongoDB Search no devolverá ningún resultado para el término de búsqueda 9870.
La siguiente tabla muestra los tokens que el tokenizador regexCaptureGroup y, en comparación, el tokenizador standard, crean para el documento con _id: 3:
Tokenizador | Token Outputs |
|---|---|
|
|
|
|
estándar
El standard tokenizador tokeniza según las reglas de división de palabras del algoritmo de segmentación de texto Unicode.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible por humanos que identifica este tipo de tokenizador. El valor debe ser |
| entero | no | Longitud máxima para un token. Los tokens mayores se dividen en Por defecto: |
Ejemplo
La siguiente definición de índice indexa el message campo de la minutes colección mediante un analizador personalizado standardExample llamado. Utiliza el standard tokenizador y el filtro de tokens de palabras vacías.
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
standardExampleen el campo Analyzer Name.Expande Tokenizer si está contraído.
Selecciona standard 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
standardExamplede 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:
{ "mappings": { "dynamic": true, "fields": { "message": { "analyzer": "standardExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "standardExample", "tokenFilters": [], "tokenizer": { "type": "standard" } } ] }
1 db.minutes.createSearchIndex( 2 "default", 3 { 4 "mappings": { 5 "dynamic": true, 6 "fields": { 7 "message": { 8 "analyzer": "standardExample", 9 "type": "string" 10 } 11 } 12 }, 13 "analyzers": [ 14 { 15 "charFilters": [], 16 "name": "standardExample", 17 "tokenFilters": [], 18 "tokenizer": { 19 "type": "standard" 20 } 21 } 22 ] 23 } 24 )
La siguiente query busca el campo message en la colección minutes para el término signature.
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": "signature", "path": "message" } } } SCORE: 0.5376965999603271 _id: "4" message: "write down your signature or phone №" page_updated_by: Object last_name: "LEVINSKI" first_name: "François" email: "levinski@example.com" phone: "123-456-8907" text: Object en_US: "<body>This page has been updated with the items on the agenda.</body>" es_MX: "La página ha sido actualizada con los puntos de la agenda." pl_PL: "Strona została zaktualizowana o punkty porządku obrad."
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "signature", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1 14 } 15 } 16 ])
{ _id: 4, message: 'write down your signature or phone №' }
MongoDB Search devuelve el documento con _id: 4 porque creó un token con el valor signature usando el tokenizador standard para los documentos, que coincide con el término de búsqueda. Si indexa el campo message usando el tokenizador keyword, MongoDB Search no devolverá ningún resultado para el término de búsqueda signature.
La siguiente tabla muestra los tokens que el tokenizador standard y, en comparación, el analizador keyword, crean para el documento con _id: 4:
Tokenizador | Token Outputs |
|---|---|
|
|
|
|
uaxUrlEmail
El tokenizador uaxUrlEmail tokeniza URLy direcciones de correo electrónico. Aunque el uaxUrlEmail tokenizador tokeniza según las reglas de separación de palabras del algoritmo de segmentación de texto Unicode, recomendamos usar uaxUrlEmail el tokenizador solo cuando el valor del campo indexado incluya URLy direcciones de correo electrónico. Para los campos que no incluyan URLni direcciones de correo electrónico, use el tokenizador estándar para crear tokens según las reglas de separación de palabras.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible por humanos que identifica este tipo de tokenizador. El valor debe ser |
| Int | no | Número máximo de caracteres en un token. Por defecto: |
Ejemplo
La siguiente definición de índice indexa el page_updated_by.email campo de la minutes colección mediante un analizador personalizado basicEmailAddressAnalyzer llamado. Utiliza el uaxUrlEmail tokenizador para crear tokens (términos de búsqueda) a partir de URLy direcciones de correo electrónico en el page_updated_by.email campo.
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
basicEmailAddressAnalyzeren el campo Analyzer Name.Expande Tokenizer si está contraído.
Selecciona uaxUrlEmail 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.email.
Seleccione page_updated_by.email del Field Name menú desplegable y String del Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
basicEmailAddressAnalyzerde 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:
{ "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "basicEmailAddressAnalyzer", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "name": "basicEmailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] }
db.minutes.createSearchIndex("default", { "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "basicEmailAddressAnalyzer", "type": "string" } }, "type": "document" } } }, "analyzers": [ { "name": "basicEmailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] })
La siguiente consulta busca el campo page_updated_by.email en la colección minutes para el correo electrónico lewinsky@example.com.
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": "lewinsky@example.com", "path": "page_updated_by.email" } } } SCORE: 0.5472603440284729 _id: "3" message: "try to sign-in" page_updated_by: Object last_name: "LEWINSKY" first_name: "Brièle" email: "lewinsky@example.com" phone: "(123).456.9870" text: Object en_US: "<body>We'll head out to the conference room by noon.</body>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "autocomplete": { 5 "query": "lewinsky@example.com", 6 "path": "page_updated_by.email" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.email": 1 14 } 15 } 16 ])
{ _id: 3, page_updated_by: { email: 'lewinsky@example.com' } }
MongoDB Search devuelve el documento con _id: 3 en los resultados porque creó un token con el valor lewinsky@example.com usando el tokenizador uaxUrlEmail para los documentos, que coincide con el término de búsqueda. Si indexa el campo page_updated_by.email usando el tokenizador standard, MongoDB Search devuelve todos los documentos para el término de búsqueda lewinsky@example.com.
La siguiente tabla muestra los tokens que el tokenizador uaxUrlEmail y, en comparación, el tokenizador standard, crean para el documento con _id: 3:
Tokenizador | Token Outputs |
|---|---|
|
|
|
|
La siguiente definición de índice indexa el campo page_updated_by.email de la colección minutes mediante un analizador personalizado llamado emailAddressAnalyzer. Utiliza lo siguiente:
El tipo de autocompletar con una
edgeGramestrategia de tokenizaciónEl
uaxUrlEmailtokenizador para crear tokens (términos de búsqueda) a partir de URLy direcciones de correo electrónico
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
emailAddressAnalyzeren el campo Analyzer Name.Expande Tokenizer si está contraído.
Selecciona uaxUrlEmail 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.email.
Seleccione page_updated_by.email del Field Name menú desplegable y Autocompletar del Data Type menú desplegable.
En la sección de propiedades del tipo de datos, seleccione
emailAddressAnalyzerde 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:
{ "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "emailAddressAnalyzer", "tokenization": "edgeGram", "type": "autocomplete" } }, "type": "document" } } }, "analyzers": [ { "name": "emailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] }
db.minutes.createSearchIndex("default", { "mappings": { "fields": { "page_updated_by": { "fields": { "email": { "analyzer": "emailAddressAnalyzer", "tokenization": "edgeGram", "type": "autocomplete" } }, "type": "document" } } }, "analyzers": [ { "name": "emailAddressAnalyzer", "tokenizer": { "type": "uaxUrlEmail" } } ] })
La siguiente query busca el campo page_updated_by.email en la colección minutes para el término exam.
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": { "autocomplete": { "query": "lewinsky@example.com", "path": "page_updated_by.email" } } } SCORE: 1.0203158855438232 _id: "3" message: "try to sign-in" page_updated_by: Object last_name: "LEWINSKY" first_name: "Brièle" email: "lewinsky@example.com" phone: "(123).456.9870" text: Object en_US: "<body>We'll head out to the conference room by noon.</body>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "autocomplete": { 5 "query": "lewinsky@example.com", 6 "path": "page_updated_by.email" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "page_updated_by.email": 1 14 } 15 } 16 ])
{ _id: 3, page_updated_by: { email: 'lewinsky@example.com' } }
MongoDB Search devuelve el documento con _id: 3 en los resultados porque creó un token con el valor lewinsky@example.com usando el tokenizador uaxUrlEmail para los documentos, que coincide con el término de búsqueda. Si indexa el campo page_updated_by.email usando el tokenizador standard, MongoDB Search devuelve todos los documentos para el término de búsqueda lewinsky@example.com.
La siguiente tabla muestra los tokens que el tokenizador uaxUrlEmail y, en comparación, el tokenizador standard, crean para el documento con _id: 3:
Tokenizador | Tipo de campo de búsqueda de MongoDB | Token Outputs |
|---|---|---|
|
|
|
|
|
|
whitespace
El tokenizador whitespace tokeniza en función de las apariciones de espacios en blanco entre palabras.
Atributos
Tiene los siguientes atributos:
Nombre | Tipo | ¿Obligatorio? | Descripción |
|---|---|---|---|
| string | sí | Etiqueta legible por humanos que identifica este tipo de tokenizador. El valor debe ser |
| entero | no | Longitud máxima para un token. Los tokens mayores se dividen en Por defecto: |
Ejemplo
La siguiente definición de índice indexa el campo message de la colección minutes mediante un analizador personalizado llamado whitespaceExample. Utiliza el tokenizador whitespace para crear tokens (términos de búsqueda) a partir de cualquier espacio en blanco en el campo message.
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
whitespaceExampleen el campo Analyzer Name.Expande Tokenizer si está contraído.
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
whitespaceExamplede 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": true, "fields": { "message": { "analyzer": "whitespaceExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "whitespaceExample", "tokenFilters": [], "tokenizer": { "type": "whitespace" } } ] }
db.minutes.createSearchIndex("default", { "mappings": { "dynamic": true, "fields": { "message": { "analyzer": "whitespaceExample", "type": "string" } } }, "analyzers": [ { "charFilters": [], "name": "whitespaceExample", "tokenFilters": [], "tokenizer": { "type": "whitespace" } } ] })
La siguiente query busca el campo message en la colección minutes para 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 Find:
{ "$search": { "text": { "query": "sign-in", "path": "message" } } } SCORE: 0.6722691059112549 _id: "3" message: "try to sign-in" page_updated_by: Object last_name: "LEWINSKY" first_name: "Brièle" email: "lewinsky@example.com" phone: "(123).456.9870" text: Object en_US: "<body>We'll head out to the conference room by noon.</body>"
1 db.minutes.aggregate([ 2 { 3 "$search": { 4 "text": { 5 "query": "sign-in", 6 "path": "message" 7 } 8 } 9 }, 10 { 11 "$project": { 12 "_id": 1, 13 "message": 1 14 } 15 } 16 ])
[ { _id: 3, message: 'try to sign-in' } ]
MongoDB Search devuelve el documento con _id: 3 en los resultados porque creó un token con el valor sign-in usando el tokenizador whitespace para los documentos, que coincide con el término de búsqueda. Si indexa el campo message usando el tokenizador standard, MongoDB Search devuelve los documentos con _id: 1, _id: 2 y _id: 3 para el término de búsqueda sign-in.
La siguiente tabla muestra los tokens que el tokenizador whitespace y, en comparación, el tokenizador standard, crean para el documento con _id: 3:
Tokenizador | Token Outputs |
|---|---|
|
|
|
|