Join us at MongoDB.local London on 7 May to unlock new possibilities for your data. Use WEB50 to save 50%.
Register now >
Docs Menu
Docs Home
/ /

tokenizador

El tokenizador de un analizador personalizado determina cómo MongoDB Search divide el texto en fragmentos discretos para su indexación. Las tokenizadoras requieren un campo de tipo, y algunas también requieren opciones adicionales.

Sintaxis
"tokenizer": {
"type": "<tokenizer-type>",
"<additional-option>": "<value>"
}

MongoDB Search admite los siguientes tipos de tokenizadores:

  • edgeGram

  • keyword

  • nGram

  • regexCaptureGroup

  • regexSplit

  • Estándar

  • uaxUrlEmail

  • whitespace

Las siguientes definiciones de índice y consultas de ejemplo utilizan el colección de muestras llamada minutes. Para seguir estos ejemplos, carga la colección minutes en tu clúster y navega a la Create a Search Index page en la interfaz de usuario de Atlas siguiendo los pasos del tutorial Crear un índice de búsqueda de MongoDB. A continuación, selecciona la colección minutes como tu fuente de datos y sigue el procedimiento de ejemplo para crear un índice desde la Interfaz de Usuario de Atlas o utilizando mongosh.


➤ Utilice el menú desplegable Seleccione su lenguaje para establecer el idioma del ejemplo en esta página.


El tokenizador edgeGram tokeniza la entrada desde el lado izquierdo, o "borde", de una entrada de texto en n-gramas de tamaños determinados. No puedes usar un analizador personalizado con el tokenizador edgeGram en el campo analyzer para sinónimos o autocompletar definiciones de mapeo de campos.

Tiene los siguientes atributos:

Nota

El tokenizador edgeGram genera múltiples tokens de salida por palabra y entre palabras en el texto de entrada, produciendo grafos de tokens.

Debido a que las definiciones de mapeo de tipos de campo de autocompletado y los analizadores con mapeo de sinónimos solo funcionan cuando se utilizan con tokenizadores que no producen grafos, no puedes usar un analizador personalizado con el tokenizador edgeGram en el campo analyzer para las definiciones de mapeo de tipos de campo de autocompletado o analizadores con mapeos de sinónimos.

Nombre
Tipo
¿Requerido?
Descripción

type

string

Etiqueta legible por humanos que identifica este tipo de tokenizador. El valor debe ser edgeGram.

minGram

entero

Número de caracteres a incluir en el token más corto creado.

maxGram

entero

Número de caracteres a incluir en el token más largo creado.

La siguiente definición de índice indexa el campo message en la colección minutes usando un analizador personalizado llamado edgegramExample. Se utiliza el tokenizador edgeGram para crear tokens (términos de búsqueda) de entre 2 y 7 caracteres de longitud a partir del primer carácter en el lado izquierdo de las palabras en el campo message.

  1. En la sección Custom Analyzers, haga clic en Add Custom Analyzer.

  2. Selecciona el botón de opción Create Your Own y haz clic en Next.

  3. Escriba edgegramExample en el campo Analyzer Name.

  4. Expandir Tokenizer si está colapsado.

  5. Selecciona edgeGram en el menú desplegable y escribe el valor para los siguientes campos:

    Campo
    Valor

    minGram

    2

    maxGram

    7

  6. Haz clic en Add para agregar el analizador personalizado a tu índice.

  7. En la sección Field Mappings, haga clic en Add Field Mapping para aplicar el analizador personalizado en el campo mensaje.

  8. Selecciona mensaje del desplegable Field Name y String del desplegable Data Type .

  9. En la sección de propiedades para el tipo de dato, selecciona edgegramExample de los desplegables Index Analyzer y Search Analyzer.

  10. Haz clic en Add, luego en Save Changes.

Sustituye la definición de índice por defecto por la siguiente:

{
"mappings": {
"dynamic": true,
"fields": {
"message": {
"analyzer": "edgegramExample",
"type": "string"
}
}
},
"analyzers": [
{
"charFilters": [],
"name": "edgegramExample",
"tokenFilters": [],
"tokenizer": {
"maxGram": 7,
"minGram": 2,
"type": "edgeGram"
}
}
]
}
1db.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 query busca en el campo message de la colección minutes texto que empieza por tr.

  1. Haz clic en el botón Query para tu índice.

  2. Haz clic en Edit Query para editar la consulta.

  3. Haz clic en la barra de query y selecciona la base de datos y la colección.

  4. Reemplaza la consulta por defecto por la siguiente y haz 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>"
1db.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 MongoDB Search 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ía 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

standard

try, to, sign, in

edgeGram

tr, try, try{SPACE}, try t, try to, try to{SPACE}

El tokenizador keyword tokeniza toda la entrada como un solo token. MongoDB Search no indexa los campos de string que superan los 32766 caracteres cuando se emplea el tokenizador keyword.

Tiene los siguientes atributos:

Nombre
Tipo
¿Requerido?
Descripción

type

string

Etiqueta legible por humanos que identifica este tipo de tokenizador. El valor debe ser keyword.

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.

  1. En la sección Custom Analyzers, haga clic en Add Custom Analyzer.

  2. Selecciona el botón de opción Create Your Own y haz clic en Next.

  3. Escriba keywordExample en el campo Analyzer Name.

  4. Expandir Tokenizer si está colapsado.

  5. Selecciona keyword del menú desplegable.

  6. Haz clic en Add para agregar el analizador personalizado a tu índice.

  7. En la sección Field Mappings, haga clic en Add Field Mapping para aplicar el analizador personalizado en el campo mensaje.

  8. Selecciona mensaje del desplegable Field Name y String del desplegable Data Type .

  9. En la sección de propiedades para el tipo de dato, selecciona keywordExample de los desplegables Index Analyzer y Search Analyzer.

  10. Haz clic en Add, luego en Save Changes.

Sustituye la definición de índice por defecto por la 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}
1db.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 query busca la frase try to sign-in en el campo message de la colección minutes.

  1. Haz clic en el botón Query para tu índice.

  2. Haz clic en Edit Query para editar la consulta.

  3. Haz clic en la barra de query y selecciona la base de datos y la colección.

  4. Reemplaza la consulta por defecto por la siguiente y haz 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>"
1db.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, por comparación, el tokenizador standard crean para el documento con _id: 3:

tokenizador
Token Outputs

standard

try, to, sign, in

keyword

try to sign-in

El tokenizador nGram divide en fragmentos de texto, o "n-gramas", de tamaños determinados. No puedes usar un analizador personalizado con el tokenizador nGram en el campo analyzer para definiciones de mapeo de sinónimos o autocompletado en las definiciones de mapeo de campos.

Tiene los siguientes atributos:

Nombre
Tipo
¿Requerido?
Descripción

type

string

Etiqueta legible por humanos que identifica este tipo de tokenizador. El valor debe ser nGram.

minGram

entero

Número de caracteres a incluir en el token más corto creado.

maxGram

entero

Número de caracteres a incluir en el token más largo creado.

La siguiente definición de índice indexa el campo title en la colección minutes utilizando un analizador personalizado llamado ngramExample. Utiliza el tokenizador nGram para crear tokens (términos buscables) de entre 4 y 6 caracteres de longitud en el campo title.

  1. En la sección Custom Analyzers, haga clic en Add Custom Analyzer.

  2. Selecciona el botón de opción Create Your Own y haz clic en Next.

  3. Escriba ngramAnalyzer en el campo Analyzer Name.

  4. Expandir Tokenizer si está colapsado.

  5. Selecciona nGram en el menú desplegable y escribe el valor para los siguientes campos:

    Campo
    Valor

    minGram

    4

    maxGram

    6

  6. Haz clic en Add para agregar el analizador personalizado a tu índice.

  7. En la sección Field Mappings, haga clic en Add Field Mapping para aplicar el analizador personalizado en el campo mensaje.

  8. Selecciona mensaje del desplegable Field Name y String del desplegable Data Type .

  9. En la sección de propiedades para el tipo de dato, selecciona ngramAnalyzer de los desplegables Index Analyzer y Search Analyzer.

  10. Haz clic en Add, luego en Save Changes.

Sustituye la definición de índice por defecto por la 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.

  1. Haz clic en el botón Query para tu índice.

  2. Haz clic en Edit Query para editar la consulta.

  3. Haz clic en la barra de query y selecciona la base de datos y la colección.

  4. Reemplaza la consulta por defecto por la siguiente y haz 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"
1db.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 MongoDB Search creó un token con el valor week utilizando el tokenizador nGram para los documentos, que coincide con el término de búsqueda. Si se 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

standard

The, team's, weekly, meeting

edgeGram

The{SPACE}, The t, The te

nGram

The{SPACE}, The t, The te, he t, ... , week, weekl, weekly, eekl, ..., eetin, eeting, etin, eting, ting

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 las expresiones regulares de Java, consulta la patrón clase en la documentación de Java.

Tiene los siguientes atributos:

Nombre
Tipo
¿Requerido?
Descripción

type

string

Etiqueta legible por humanos que identifica este tipo de tokenizador. El valor debe ser regexCaptureGroup.

pattern

string

Expresión regular para coincidir.

group

entero

Índice del grupo de caracteres dentro de la expresión coincidente que se van a extraer en tokens. Utilice 0 para extraer todos los grupos de caracteres.

La siguiente definición de índice indexa el campo page_updated_by.phone en la colección minutes utilizando un analizador personalizado llamado phoneNumberExtractor. Utiliza lo siguiente:

  • mappings filtro de caracteres para remover los paréntesis alrededor de los primeros tres dígitos y reemplazar todos los espacios y puntos por guiones

  • regexCaptureGroup tokenizador para crear una sola ficha a partir del primer número de teléfono con formato estadounidense presente en el texto de entrada

  1. En la sección Custom Analyzers, haga clic en Add Custom Analyzer.

  2. Selecciona el botón de opción Create Your Own y haz clic en Next.

  3. Escriba phoneNumberExtractor en el campo Analyzer Name.

  4. Expande Character Filters y haz clic en Add character filter.

  5. Seleccione mapping del menú desplegable y haga clic en Add mapping.

  6. Ingrese los siguientes caracteres en el campo Original, uno a la vez, y deje el campo Replacement correspondiente en blanco.

    Original
    Reemplazo

    -

    .

    (

    )

  7. Haga clic en Add character filter.

  8. Expandir Tokenizer si está colapsado.

  9. Selecciona regexCaptureGroup en el menú desplegable y escribe el valor para los siguientes campos:

    Campo
    Valor

    pattern

    ^\\b\\d{3}[-]?\\d{3}[-]?\\d{4}\\b$

    group

    0

  10. Haz clic en Add para agregar el analizador personalizado a tu índice.

  11. En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado en el campo page_updated_by.phone.

  12. Seleccione page_updated_by.phone del menú desplegable Field Name y String del menú desplegable Data Type.

  13. En la sección de propiedades para el tipo de dato, selecciona phoneNumberExtractor de los desplegables Index Analyzer y Search Analyzer.

  14. Haz clic en Add, luego en Save Changes.

Reemplaza la definición de índice por defecto 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 query busca el campo page_updated_by.phone en la colección minutes para el número de teléfono 123-456-9870.

  1. Haz clic en el botón Query para tu índice.

  2. Haz clic en Edit Query para editar la consulta.

  3. Haz clic en la barra de query y selecciona la base de datos y la colección.

  4. Reemplaza la consulta por defecto por la siguiente y haz 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>"
1db.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, por comparación, el tokenizador standard crean para el documento con _id: 3:

tokenizador
Token Outputs

standard

123, 456.9870

regexCaptureGroup

123-456-9870

El tokenizador regexSplit divide los tokens usando 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 patrón de la documentación de Java.

Tiene los siguientes atributos:

Nombre
Tipo
¿Requerido?
Descripción

type

string

Etiqueta legible por humanos que identifica este tipo de tokenizador. El valor debe ser regexSplit.

pattern

string

Expresión regular para coincidir.

La siguiente definición de índice indexa el campo page_updated_by.phone en la colección de minutes utilizando un analizador personalizado llamado dashDotSpaceSplitter. Utiliza el tokenizador regexSplit para crear tokens (términos que se pueden buscar) a partir de uno o varios guiones, puntos y espacios en el campo page_updated_by.phone.

  1. En la sección Custom Analyzers, haga clic en Add Custom Analyzer.

  2. Selecciona el botón de opción Create Your Own y haz clic en Next.

  3. Escriba dashDotSpaceSplitter en el campo Analyzer Name.

  4. Expandir Tokenizer si está colapsado.

  5. Selecciona regexSplit del menú desplegable y escribe el valor del siguiente campo:

    Campo
    Valor

    pattern

    [-. ]+

  6. Haz clic en Add para agregar el analizador personalizado a tu índice.

  7. En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado en el campo page_updated_by.phone.

  8. Seleccione page_updated_by.phone del menú desplegable Field Name y String del menú desplegable Data Type.

  9. En la sección de propiedades para el tipo de dato, selecciona dashDotSpaceSplitter de los desplegables Index Analyzer y Search Analyzer.

  10. Haz clic en Add, luego en Save Changes.

Sustituye la definición de índice por defecto por la 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 query busca en el campo page_updated_by.phone de la colección minutes los dígitos 9870.

  1. Haz clic en el botón Query para tu índice.

  2. Haz clic en Edit Query para editar la consulta.

  3. Haz clic en la barra de query y selecciona la base de datos y la colección.

  4. Reemplaza la consulta por defecto por la siguiente y haz 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>"
1db.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 MongoDB Search creó un token con el valor 9870 utilizando el tokenizador regexSplit para los documentos, que coincide con el término de búsqueda. Si indexa el campo page_updated_by.phone utilizando 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, por comparación, el tokenizador standard crean para el documento con _id: 3:

tokenizador
Token Outputs

standard

123, 456.9870

regexSplit

(123), 456, 9870

El tokenizador standard tokeniza en función de las reglas de salto de palabra del algoritmo de Segmentación de Texto Unicode.

Tiene los siguientes atributos:

Nombre
Tipo
¿Requerido?
Descripción

type

string

Etiqueta legible por humanos que identifica este tipo de tokenizador. El valor debe ser standard.

maxTokenLength

entero

no

Longitud máxima para un solo token. Los tokens mayores a esta longitud se dividen en maxTokenLength en varios tokens.

Por defecto: 255

La siguiente definición de índice indexa el campo message en la colección minutes utilizando un analizador personalizado llamado standardExample. Utiliza el standard tokenizador y el filtro de token stopword.

  1. En la sección Custom Analyzers, haga clic en Add Custom Analyzer.

  2. Selecciona el botón de opción Create Your Own y haz clic en Next.

  3. Escriba standardExample en el campo Analyzer Name.

  4. Expandir Tokenizer si está colapsado.

  5. Selecciona standard del menú desplegable.

  6. Haz clic en Add para agregar el analizador personalizado a tu índice.

  7. En la sección Field Mappings, haga clic en Add Field Mapping para aplicar el analizador personalizado en el campo mensaje.

  8. Selecciona mensaje del desplegable Field Name y String del desplegable Data Type .

  9. En la sección de propiedades para el tipo de dato, selecciona standardExample de los desplegables Index Analyzer y Search Analyzer.

  10. Haz clic en Add, luego en Save Changes.

Sustituye la definición de índice por defecto por la siguiente:

{
"mappings": {
"dynamic": true,
"fields": {
"message": {
"analyzer": "standardExample",
"type": "string"
}
}
},
"analyzers": [
{
"charFilters": [],
"name": "standardExample",
"tokenFilters": [],
"tokenizer": {
"type": "standard"
}
}
]
}
1db.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.

  1. Haz clic en el botón Query para tu índice.

  2. Haz clic en Edit Query para editar la consulta.

  3. Haz clic en la barra de query y selecciona la base de datos y la colección.

  4. Reemplaza la consulta por defecto por la siguiente y haz 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."
1db.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 MongoDB Search creó un token con el valor signature utilizando el tokenizador standard para los documentos, que coincide con el término de búsqueda. Si índice el campo message utilizando 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

standard

write, down, your, signature, or, phone

keyword

write down your signature or phone №

El tokenizador uaxUrlEmail tokeniza URLs y direcciones de correo electrónico. Aunque el tokenizador uaxUrlEmail tokeniza basándose en las reglas de separación de palabras del algoritmo de segmentación de texto Unicode, recomendamos usar el tokenizador uaxUrlEmail solo cuando el valor del campo indexado incluya URLs y direcciones de correo electrónico. Para los campos que no incluyen URLni direcciones de correo electrónico, utiliza el tokenizador estándar para crear tokens basados en reglas de partición de palabras.

Tiene los siguientes atributos:

Nombre
Tipo
¿Requerido?
Descripción

type

string

Etiqueta legible por humanos que identifica este tipo de tokenizador. El valor debe ser uaxUrlEmail.

maxTokenLength

Int

no

Número máximo de caracteres en un token.

Por defecto: 255

El tokenizador whitespace tokeniza en función de la aparición de espacios en blanco entre palabras.

Tiene los siguientes atributos:

Nombre
Tipo
¿Requerido?
Descripción

type

string

Etiqueta legible por humanos que identifica este tipo de tokenizador. El valor debe ser whitespace.

maxTokenLength

entero

no

Longitud máxima para un solo token. Los tokens mayores a esta longitud se dividen en maxTokenLength en varios tokens.

Por defecto: 255

La siguiente definición de índice indexa el campo message en la colección minutes utilizando un analizador personalizado llamado whitespaceExample. Utiliza el tokenizador whitespace para crear tokens (términos buscables) a partir de cualquier espacio en blanco en el campo message.

  1. En la sección Custom Analyzers, haga clic en Add Custom Analyzer.

  2. Selecciona el botón de opción Create Your Own y haz clic en Next.

  3. Escriba whitespaceExample en el campo Analyzer Name.

  4. Expandir Tokenizer si está colapsado.

  5. Selecciona whitespace del menú desplegable.

  6. Haz clic en Add para agregar el analizador personalizado a tu índice.

  7. En la sección Field Mappings, haga clic en Add Field Mapping para aplicar el analizador personalizado en el campo mensaje.

  8. Selecciona mensaje del desplegable Field Name y String del desplegable Data Type .

  9. En la sección de propiedades para el tipo de dato, selecciona whitespaceExample de los desplegables Index Analyzer y Search Analyzer.

  10. Haz clic en Add, luego en Save Changes.

Reemplaza la definición de índice por defecto 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.

  1. Haz clic en el botón Query para tu índice.

  2. Haz clic en Edit Query para editar la consulta.

  3. Haz clic en la barra de query y selecciona la base de datos y la colección.

  4. Reemplaza la consulta por defecto por la siguiente y haz 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>"
1db.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 MongoDB Search creó un token con el valor sign-in utilizando el tokenizador whitespace para los documentos, que coincide con el término de búsqueda. Si indexas el campo message usando el tokenizador standard, MongoDB Search devuelve 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, por comparación, el tokenizador standard crean para el documento con _id: 3:

tokenizador
Token Outputs

standard

try, to, sign, in

whitespace

try, to, sign-in

Volver

Filtros de Caracteres

En esta página