Docs Menu
Docs Home
/ /

Filtros de Token

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.

Sintaxis
"tokenFilters": [
{
"type": "<token-filter-type>",
"<additional-option>": <value>
}
]

MongoDB Search admite los siguientes tipos de filtros de tokens:

  • asciiFolding

  • daitchMokotoffSoundex

  • edgeGram

  • Posesivo en inglés

  • aplanar gráfico

  • icuFolding

  • icuNormalizer

  • keywordRepeat

  • kStemming

  • longitud

  • minúsculas

  • regex

  • eliminar duplicados

  • marcha atrás

  • guijarros

  • bola de nieveDerivado

  • Plural de español

  • stempel

  • palabra vacía

  • recortar

  • Gráfico delimitador de palabras

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.


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.

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser asciiFolding.

originalTokens

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:

  • include - Incluir los tokens originales junto con los tokens convertidos en la salida del filtro de tokens. Recomendamos este valor si desea admitir consultas tanto en los tokens originales como en los formularios convertidos.

  • omit - Omite los tokens originales e incluye solo los tokens convertidos en la salida del filtro de tokens. Usa este valor si deseas consultar solo las formas convertidas de los tokens originales.

Por defecto: omit

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:

  1. Aplique el tokenizador estándar para crear tokens basados ​​en reglas de división de palabras.

  2. Aplica el filtro de tokens asciiFolding para convertir los valores de campo a su equivalente en ASCII.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba asciiConverter en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona standard del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Selecciona asciiFolding del menú desplegable.

  8. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  9. Haga clic en Add para crear el analizador personalizado.

  10. 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.

  11. Seleccione page_updated_by.first_name del Field Name menú desplegable y String del Data Type menú desplegable.

  12. En la sección de propiedades del tipo de datos, seleccione asciiConverter de los menús desplegables Index Analyzer y Search Analyzer.

  13. 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"
}
]
}
]
}
1db.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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

page_updated_by.first_name

Sian

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 fuzzy está habilitado. MongoDB Search admite la opción fuzzy para los siguientes operadores:

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser daitchMokotoffSoundex.

originalTokens

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:

  • include - Incluir los tokens originales junto con los tokens codificados en la salida del filtro de tokens. Recomendamos este valor si desea realizar consultas tanto en los tokens originales como en los codificados.

  • omit - omitir los tokens originales e incluir solo los tokens codificados en la salida del filtro de tokens. Utiliza este valor si solo quieres query las formas codificadas de los tokens originales.

Por defecto: include

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:

  1. Aplique el tokenizador estándar para crear tokens basados ​​en reglas de división de palabras.

  2. Aplica el filtro de token daitchMokotoffSoundex para codificar los tokens de palabras que suenan igual.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba dmsAnalyzer en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona standard del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Seleccione daitchMokotoffSoundex del menú desplegable y seleccione el valor que se muestra en la siguiente tabla para el campo originalTokens:

    Campo
    Valor

    originalTokens

    include

  8. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  9. Haga clic en Add para crear el analizador personalizado.

  10. 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.

  11. Seleccione page_updated_by.last_name del Field Name menú desplegable y String del Data Type menú desplegable.

  12. En la sección de propiedades del tipo de datos, seleccione dmsAnalyzer de los menús desplegables Index Analyzer y Search Analyzer.

  13. 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"
}
]
}
]
}
1db.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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

"_id": 1

AUERBACH, 097400, 097500

"_id": 2

OHRBACH, 097400, 097500

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.

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser edgeGram.

minGram

entero

Número que especifica la longitud mínima de n-gramas generados. El valor debe ser menor o igual a maxGram.

maxGram

entero

El número que indica la longitud máxima de los n-gramas generados. El valor debe ser mayor o igual a minGram.

termNotInBounds

string

no

Cadena que especifica si se indexan los tokens menores de minGram o mayores de maxGram. Los valores aceptados son:

  • include

  • omit

Si se especifica include, los tokens con una longitud inferior a minGram o superior a maxGram se indexan tal cual. Si se especifica omit, estos tokens no se indexan.

Por defecto: omit

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:

  1. Aplique el tokenizador estándar para crear tokens basados ​​en reglas de división de palabras.

  2. Aplicar los siguientes filtros en los tokens:

    • icuFolding Filtro de token para aplicar plegados de caracteres a los tokens.

    • edgeGram Filtro de token para crear tokens con una longitud de 4 a 7 caracteres desde el lado izquierdo.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba titleAutocomplete en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona standard del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Seleccione icuFolding del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  8. Haga Add token filter clic en para agregar otro filtro de token.

  9. Seleccione edgeGram del menú desplegable y escriba el valor que se muestra en la siguiente tabla para los campos:

    Campo
    Valor

    minGram

    4

    maxGram

    7

  10. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  11. Haga clic en Add para crear el analizador personalizado.

  12. En la Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo de título.

  13. Seleccione el título en el Field Name menú desplegable y la cadena en el Data Type menú desplegable.

  14. En la sección de propiedades del tipo de datos, seleccione titleAutocomplete de los menús desplegables Index Analyzer y Search Analyzer.

  15. 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
}
]
}
]
}
1db.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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

"_id": 1

team, team', team's, week, weekl, weekly, meet, meeti, meetin, meeting

"_id": 3

regu, regul, regula, regular, boar, board, meet, meeti, meetin, meeting

El filtro de token englishPossessive elimina los posesivos ('s finales) de las palabras.

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser englishPossessive.

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:

  1. Aplique el tokenizador estándar para crear tokens (términos de búsqueda) basados ​​en reglas de división de palabras.

  2. Aplique el filtro de token posesivo inglés para eliminar los posesivos ('s finales) de los tokens.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba englishPossessiveStemmer en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona standard del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Selecciona englishPossessive del menú desplegable.

  8. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  9. Haga clic en Add para crear el analizador personalizado.

  10. En la Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo de título.

  11. Seleccione el título en el Field Name menú desplegable y la cadena en el Data Type menú desplegable.

  12. En la sección de propiedades del tipo de datos, seleccione englishPossessiveStemmer de los menús desplegables Index Analyzer y Search Analyzer.

  13. 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"
}
]
}
]
}
1db.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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

"_id": 1

The, team, weekly, meeting

"_id": 2

The, check, in, with, sales, team

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.

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser flattenGraph.

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:

  1. Aplique el tokenizador de espacios en blanco para crear tokens basados ​​en las ocurrencias de espacios en blanco entre palabras.

  2. Aplicar los siguientes filtros a los tokens:

    • Filtro de tokens wordDelimiterGraph para dividir tokens en función de subpalabras, generar tokens para las palabras originales y también proteger la palabra SIGN_IN de la delimitación.

    • Filtro de token flattenGraph para aplanar los tokens a una forma plana.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba wordDelimiterGraphFlatten en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona whitespace del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Seleccione wordDelimiterGraph del menú desplegable y configure los siguientes campos para el filtro de token.

    1. Seleccione los siguientes campos:

      Campo
      Valor

      delimiterOptions.generateWordParts

      true

      delimiterOptions.preserveOriginal

      true

    2. Escriba SIGN_IN en el campo protectedWords.words.

    3. Seleccione protectedWords.ignoreCase.

  8. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  9. Haga Add token filter clic en para agregar otro filtro de token.

  10. Selecciona flattenGraph del menú desplegable.

  11. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  12. Haga clic en Add para crear el analizador personalizado.

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

  14. Seleccione mensaje en el Field Name menú desplegable y Cadena en el Data Type menú desplegable.

  15. En la sección de propiedades del tipo de datos, seleccione wordDelimiterGraphFlatten de los menús desplegables Index Analyzer y Search Analyzer.

  16. 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"
}
]
}
]
}
1db.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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

_id: 3

try, to, sign-in, sign, in

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.

Tiene el siguiente atributo:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser icuFolding.

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:

  1. Aplique la palabra clave tokenizer para tokenizar todos los términos en el campo de cadena como un solo término.

  2. Utilice el filtro de token icuFolding para aplicar pliegues como eliminación de acentos, pliegue de mayúsculas y minúsculas, pliegue de duplicados canónicos, etc.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba diacriticFolder en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona keyword del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Selecciona icuFolding del menú desplegable.

  8. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  9. Haga clic en Add para crear el analizador personalizado.

  10. En la Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo anidado text.sv_FI.

  11. Seleccione el texto anidado.sv_FI del Field Name menú desplegable y Cadena del Data Type menú desplegable.

  12. En la sección de propiedades del tipo de datos, seleccione diacriticFolder de los menús desplegables Index Analyzer y Search Analyzer.

  13. 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"
}
]
}
]
}
1db.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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

_id: 1

den har sidan behandlar avdelningsmoten

_id: 2

forst talade chefen for forsaljningsavdelningen

El icuNormalizer filtro de token normaliza los tokens utilizando un modo de normalización Unicode estándar.

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser icuNormalizer.

normalizationForm

string

no

Se aplicará el formato de normalización. Los valores aceptados son:

  • nfd (Descomposición canónica)

  • nfc (Descomposición canónica, seguida de composición canónica)

  • nfkd (Descomposición de compatibilidad)

  • nfkc (Descomposición por compatibilidad, seguida de composición canónica)

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: nfc

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:

  1. Utilice el tokenizador de espacios en blanco para crear tokens basados ​​en las ocurrencias de espacios en blanco entre palabras.

  2. Utilice el filtro de token icuNormalizer para normalizar los tokens por descomposición de compatibilidad, seguida de composición canónica.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba textNormalizer en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona whitespace del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Seleccione icuNormalizer del menú desplegable y seleccione nfkc del menú desplegable normalizationForm.

  8. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  9. Haga clic en Add para crear el analizador personalizado.

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

  11. Seleccione mensaje en el Field Name menú desplegable y Cadena en el Data Type menú desplegable.

  12. En la sección de propiedades del tipo de datos, seleccione textNormalizer de los menús desplegables Index Analyzer y Search Analyzer.

  13. 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"
}
]
}
]
}
1db.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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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 1

nfd

do, not, forget, to, SIGN-IN., See, , for, details.

X

nfc

do, not, forget, to, SIGN-IN., See, , for, details.

X

nfkd

do, not, forget, to, SIGN-IN., See, 1, for, details.

nfkc

do, not, forget, to, SIGN-IN., See, 1, for, details.

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.

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser keywordRepeat.

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:

  1. Aplique el tokenizador de espacios en blanco para crear tokens basados ​​en las ocurrencias de espacios en blanco entre palabras.

  2. Aplicar los siguientes filtros en los tokens:

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba keywordStemRemover en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona whitespace del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Seleccione keywordRepeat del menú desplegable y haga clic en Add token filter.

  8. Add token filter Haga clic en para agregar los siguientes filtros de token a su analizador personalizado:

    • removeDuplicates

    • porterStemming

  9. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  10. Haga clic en Add para crear el analizador personalizado.

  11. En la Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo de título.

  12. Seleccione el título en el Field Name menú desplegable y la cadena en el Data Type menú desplegable.

  13. En la sección de propiedades del tipo de datos, seleccione keywordStemRemover de los menús desplegables Index Analyzer y Search Analyzer.

  14. 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"
}
}
]
}
1db.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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

The team's weekly meeting

The, team's, weekly, meeting

The, team's, weekly, meeting

The regular board meeting

The, regular, board, meeting

The, regular, board, meeting

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

The team's weekly meeting

the, team, week, meet

The regular board meeting

the, regular, board, meet

El filtro de token removeDuplicates elimina cualquier token duplicado en la secuencia generada por un filtro de token keywordRepeat anterior:

Título
Tokens

The team's weekly meeting

the, team's, team, weekly, week, meeting, meet

The regular board meeting

the, regular, board, meeting, meet

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.

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser kStemming.

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:

  1. Aplique el tokenizador estándar para crear tokens basados ​​en reglas de división de palabras.

  2. Aplicar los siguientes filtros en los tokens:

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba kStemmer en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona standard del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Seleccione lowercase del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  8. Haga Add token filter clic en para agregar otro filtro de token.

  9. Selecciona kStemming del menú desplegable.

  10. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  11. Haga clic en Add para crear el analizador personalizado.

  12. En la Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo anidado text.en_US.

  13. Seleccione text.en_US anidado del menú desplegable Field Name y String del menú desplegable Data Type.

  14. En la sección de propiedades del tipo de datos, seleccione kStemmer de los menús desplegables Index Analyzer y Search Analyzer.

  15. 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"
}
]
}
]
}
1db.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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

El filtro de token length elimina los tokens que son demasiado cortos o demasiado largos.

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser length.

min

entero

no

Número que especifica la longitud mínima de un token. El valor debe ser menor o igual a max.

Por defecto: 0

max

entero

no

Número que especifica la longitud máxima de un token. El valor debe ser mayor o igual a min.

Por defecto: 255

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:

  1. Utilice el tokenizador estándar para crear tokens basados ​​en reglas de división de palabras.

  2. Aplicar los siguientes filtros en los tokens:

    • Filtro de token icuFolding para aplicar plegados de caracteres.

    • length Filtro 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.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba longOnly en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona standard del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Seleccione icuFolding del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  8. Haga Add token filter clic en para agregar otro filtro de token.

  9. Seleccione length del menú desplegable y configure el siguiente campo para el filtro de token:

    Campo
    Valor

    min

    20

  10. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  11. Haga clic en Add para crear el analizador personalizado.

  12. En la Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo anidado text.sv.FI.

  13. Seleccione text.sv.FI anidado en el Field Name menú desplegable y String en el Data Type menú desplegable.

  14. En la sección de propiedades del tipo de datos, seleccione longOnly de los menús desplegables Index Analyzer y Search Analyzer.

  15. 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
}
]
}
]
}
1db.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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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.

El filtro de token lowercase normaliza el texto del token a minúsculas.

Tiene el siguiente atributo:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser lowercase.

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:

  1. Aplique el tokenizador de palabras clave para crear un único token para una cadena o una matriz de cadenas.

  2. Aplica el filtro de token lowercase para convertir el texto del token a minúsculas.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba keywordLowerer en el campo Analyzer Name.

  4. Expande Tokenizer si está colapsado y selecciona el keyword del menú desplegable.

  5. Expanda Token Filters y haga clic Add token filter en.

  6. Seleccione lowercase del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

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

  8. Seleccione el título en el Field Name menú desplegable y Autocompletar en el Data Type menú desplegable.

  9. En la sección de propiedades del tipo de datos, seleccione los siguientes valores del menú desplegable para la propiedad:

    Nombre de la propiedad
    Valor

    Analyzer

    keywordLowerer

    Tokenization

    nGram

  10. 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"
}
]
}
]
}
1db.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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

_id: 4

the daily huddle on the standupapp2

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:

  1. Aplicar el tokenizador estándar para crear tokens basados ​​en reglas de división de palabras.

  2. Aplicar los siguientes filtros en los tokens:

    • icuNormalizer para normalizar los tokens utilizando un modo de normalización Unicode estándar.

    • lowercase Filtro de token para convertir el texto del token a minúsculas.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba lowerCaser en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona standard del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Seleccione icuNormalizer del menú desplegable y luego seleccione nfkd del menú desplegable normalizationForm.

  8. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  9. Haga Add token filter clic en para agregar otro filtro de token.

  10. Selecciona lowercase del menú desplegable.

  11. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  12. Haga clic en Add para crear el analizador personalizado.

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

  14. Seleccione mensaje en el Field Name menú desplegable y Cadena en el Data Type menú desplegable.

  15. En la sección de propiedades del tipo de datos, seleccione lowerCaser de los menús desplegables Index Analyzer y Search Analyzer.

  16. 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"
}
]
}
]
}
1db.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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

_id: 1

try, to, sign, in

_id: 3

try, to, sign, in

_id: 2

do, not, forget, to, sign, in, see, for, details

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.

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser nGram.

minGram

entero

Número que especifica la longitud mínima de n-gramas generados. El valor debe ser menor o igual a maxGram.

maxGram

entero

El número que indica la longitud máxima de los n-gramas generados. El valor debe ser mayor o igual a minGram.

termNotInBounds

string

no

Cadena que especifica si se indexan los tokens menores de minGram o mayores de maxGram. Los valores aceptados son:

  • include

  • omit

Si se especifica include, los tokens con una longitud inferior a minGram o superior a maxGram se indexan tal cual. Si se especifica omit, estos tokens no se indexan.

Por defecto: omit

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:

  1. Aplique el tokenizador estándar para crear tokens basados ​​en las reglas de división de palabras.

  2. Aplicar una serie de filtros de tokens en los tokens:

    • englishPossessive para eliminar los posesivos ('s finales) de las palabras.

    • nGram para convertir palabras en tokens de 4 a 7 caracteres de longitud.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba titleAutocomplete en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona standard del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Seleccione englishPossessive del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  8. Haga Add token filter clic en para agregar otro filtro de token.

  9. Selecciona nGram del menú desplegable y configura los siguientes campos para el filtro de tokens:

    Campo
    Valor

    minGram

    4

    maxGram

    7

  10. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  11. Haga clic en Add para crear el analizador personalizado.

  12. En la Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo de título.

  13. Seleccione el título en el Field Name menú desplegable y la cadena en el Data Type menú desplegable.

  14. En la sección de propiedades del tipo de datos, seleccione titleAutocomplete de los menús desplegables Index Analyzer y Search Analyzer.

  15. 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
}
]
}
]
}
1db.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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

_id: 2

team, week, weekl, weekly, eekl, eekly, ekly, meet, meeti, meetin, meeting, eeti, eeti, eeting, etin, eting, ting

_id: 3

regu, regul, regula, regular, egul, egula, egular, gula, gular, ular, boar, board, oard, meet, meeti, meetin, meeting, eeti, eeti, eeting, etin, eting, ting

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.

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.

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser porterStemming.

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:

  1. Aplique el tokenizador estándar para crear tokens basados ​​en reglas de división de palabras.

  2. 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.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba porterStemmer en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona standard del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Seleccione lowercase del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  8. Haga Add token filter clic en para agregar otro filtro de token.

  9. Selecciona porterStemming del menú desplegable.

  10. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  11. Haga clic en Add para crear el analizador personalizado.

  12. En la Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo de título.

  13. Seleccione el título en el Field Name menú desplegable y la cadena en el Data Type menú desplegable.

  14. En la sección de propiedades del tipo de datos, seleccione porterStemmer de los menús desplegables Index Analyzer y Search Analyzer.

  15. 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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

_id: 1

the, team', weekli, meet

_id: 3

the, regular, board, meet

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.

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este filtro de token. El valor debe ser regex.

pattern

string

Patrón de expresión regular para aplicar a cada token.

replacement

string

Cadena de reemplazo para sustituir dondequiera que aparezca un patrón coincidente.

Si especifica una cadena vacía"" () para ignorar o eliminar un token, MongoDB Search crea un token con una cadena vacía. Para eliminar tokens con cadenas vacías, utilice el filtro de token de palabra vacía después del regex filtro de token. Por ejemplo:

"analyzers": [
{
"name": "custom.analyzer.name",
"charFilters": [],
"tokenizer": {
"type": "whitespace"
},
"tokenFilters": [
{
"matches": "all",
"pattern": "^(?!\\$)\\w+",
"replacement": "",
"type": "regex"
},
{
"type": "stopword",
"tokens": [""]
}
]
}
]

matches

string

Los valores aceptables son:

  • all

  • first

Si matches se establece en all, se reemplazan todos los patrones coincidentes. De lo contrario, se reemplaza solo el primer patrón coincidente.

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:

  1. Aplique el tokenizador de palabras clave para indexar todas las palabras en el valor del campo como un solo término.

  2. Aplicar los siguientes filtros de token en los tokens:

    • Filtro de token lowercase para convertir caracteres mayúsculos en los tokens a minúsculas.

    • regex Filtro de token para encontrar cadenas que parezcan direcciones de correo electrónico en los tokens y reemplazarlas con la palabra redacted.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba emailRedact en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona keyword del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Seleccione lowercase del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  8. Haga Add token filter clic en para agregar otro filtro de token.

  9. Seleccione regex del menú desplegable y configure lo siguiente para el filtro de token:

    1. Escriba ^([a-z0-9_\\.-]+)@([\\da-z\\.-]+)\\.([a-z\\.]{2,5})$ en el campo pattern.

    2. Escriba redacted en el campo replacement.

    3. Selecciona all del menú desplegable matches.

  10. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  11. Haga clic en Add para crear el analizador personalizado.

  12. 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.

  13. Seleccione page_updated_by.email anidado en el Field Name menú desplegable y String en el Data Type menú desplegable.

  14. En la sección de propiedades del tipo de datos, seleccione emailRedact de los menús desplegables Index Analyzer y Search Analyzer.

  15. 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.

1db.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.

El filtro de token removeDuplicates elimina tokens duplicados consecutivos, que son tokens para el mismo término en la misma posición.

Tiene el siguiente atributo:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este filtro de token. El valor debe ser removeDuplicates.

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:

  1. Aplique el tokenizador de espacios en blanco para crear tokens basados ​​en las ocurrencias de espacios en blanco entre palabras.

  2. Aplicar los siguientes filtros en los tokens:

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba removeDuplicates en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona whitespace del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Seleccione keywordRepeat del menú desplegable y haga clic en Add token filter.

  8. Haga Add token filter clic en para agregar otro filtro de token.

  9. Selecciona removeDuplicates del menú desplegable.

  10. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  11. Haga clic en Add para crear el analizador personalizado.

  12. En la Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo de título.

  13. Seleccione el título en el Field Name menú desplegable y la cadena en el Data Type menú desplegable.

  14. En la sección de propiedades del tipo de datos, seleccione removeDuplicates de los menús desplegables Index Analyzer y Search Analyzer.

  15. 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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

The team's weekly meeting

The, team's, weekly, meeting

the, team's, weekly, meeting

The regular board meeting

The, regular, board, meeting

the, regular, board, meeting

El filtro de token removeDuplicates elimina los tokens duplicados en la transmisión.

El filtro de token reverse invierte cada token de cadena.

Tiene el siguiente atributo:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este filtro de token. El valor debe ser reverse.

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 reverse para invertir los tokens de cadena.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba reverseAnalyzer en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona standard del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Selecciona reverse del menú desplegable.

  8. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  9. Haga clic en Add para crear el analizador personalizado.

  10. En la Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo de título.

  11. Seleccione el título en el Field Name menú desplegable y la cadena en el Data Type menú desplegable.

  12. En la sección de propiedades del tipo de datos, seleccione reverseAnalyzer de los menús desplegables Index Analyzer y Search Analyzer.

  13. 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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

_id: 1

moc.elpmaxe@hcabreua

_id: 2

moc.elpmaxe@kcabrho

_id: 3

moc.elpmaxe@yksniwel

_id: 4

moc.elpmaxe@iksnivel

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.

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser shingle.

minShingleSize

entero

Número mínimo de tokens por teja. Debe ser mayor o igual a 2 y menor o igual a maxShingleSize.

maxShingleSize

entero

Número máximo de tokens por teja. Debe ser mayor o igual a minShingleSize

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 con AT

  • Crear 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:

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba emailAutocompleteIndex en el campo Analyzer Name.

  4. Expanda Character Filters y haga clic Add character filter en.

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

  6. Introduzca la siguiente clave y valor:

    Clave
    Valor

    @

    AT

  7. Haga clic en Add character filter para agregar el filtro de caracteres a su analizador personalizado.

  8. Expande Tokenizer si está contraído.

  9. Selecciona whitespace del menú desplegable e introduce 15 en el campo maxTokenLength.

  10. Expanda Token Filters y haga clic Add token filter en.

  11. Seleccione shingle del menú desplegable y configure los siguientes campos.

    Campo
    Valor del campo

    minShingleSize

    2

    minShingleSize

    3

  12. Haga Add token filter clic en para agregar otro filtro de token.

  13. Haga Add token filter clic en para agregar otro filtro de token.

  14. Selecciona edgeGram del menú desplegable y configura los siguientes campos para el filtro de tokens:

    Campo
    Valor del campo

    minGram

    2

    maxGram

    15

  15. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  16. Haga clic en Add para agregar el analizador personalizado a su índice.

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

  18. Seleccione el botón de opción Create Your Own y haga clic en Next.

  19. Escriba emailAutocompleteSearch en el campo Analyzer Name.

  20. Expanda Character Filters y haga clic Add character filter en.

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

  22. Introduzca la siguiente clave y valor:

    Clave
    Valor

    @

    AT

  23. Haga clic en Add character filter para agregar el filtro de caracteres a su analizador personalizado.

  24. Expande Tokenizer si está contraído.

  25. Selecciona whitespace del menú desplegable e introduce 15 en el campo maxTokenLength.

  26. Haga clic en Add para agregar el analizador personalizado a su índice.

  27. 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.

  28. Seleccione page_updated_by.email anidado en el Field Name menú desplegable y String en el Data Type menú desplegable.

  29. En la sección de propiedades del tipo de datos, seleccione emailAutocompleteIndex en el menú desplegable Index Analyzer y emailAutocompleteSearch en el menú desplegable Search Analyzer.

  30. 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:

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

auerbachATexamp

au, aue, auer, auerb, auerba, auerbac, auerbach, auerbachA, auerbachAT, auerbachATe, auerbachATex, auerbachATexa, auerbachATexam, auerbachATexamp

El snowballStemming token filtra los tokens de Stems utilizando un lematizador generado por Snowball.

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser snowballStemming.

stemmerName

string

Los siguientes valores son válidos:

  • arabic

  • armenian

  • basque

  • catalan

  • danish

  • dutch

  • english

  • estonian

  • finnish

  • french

  • german

  • german2 (anticuado)

  • hungarian

  • irish

  • italian

  • lithuanian

  • norwegian

  • porter (El algoritmo original de derivación del inglés de Porter).

  • portuguese

  • romanian

  • russian

  • spanish

  • swedish

  • turkish

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:

  1. Aplique el tokenizador estándar para crear tokens basados ​​en reglas de división de palabras.

  2. Aplicar los siguientes filtros de token en los tokens:

    • Filtro de tokens minúsculas para convertir los tokens a minúsculas.

    • french variante del filtro de tokens snowballStemming para extraer las raíces de las palabras.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba frenchStemmer en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona standard del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Seleccione lowercase del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  8. Haga Add token filter clic en para agregar otro filtro de token.

  9. Seleccione snowballStemming del menú desplegable y luego seleccione french del menú desplegable stemmerName.

  10. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  11. Haga clic en Add para crear el analizador personalizado.

  12. En la sección Field Mappings, haz clic en Add Field Mapping para aplicar el analizador personalizado en el text.fr_CA campo anidado.

  13. Seleccione el texto anidado.fr_CA del Field Name menú desplegable y Cadena del Data Type menú desplegable.

  14. En la sección de propiedades del tipo de datos, seleccione frenchStemmer de los menús desplegables Index Analyzer y Search Analyzer.

  15. 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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

_id: 1

cet, pag, trait, de, réunion, de, départ

El filtro de token spanishPluralStemming deriva palabras en plural en español. Espera texto en minúsculas.

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser spanishPluralStemming.

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:

  1. Aplique el tokenizador estándar para crear tokens basados ​​en reglas de división de palabras.

  2. Aplicar los siguientes filtros de token en los tokens:

    • Filtro de token en minúsculas para convertir términos en español a minúsculas.

    • spanishPluralStemming Filtro de tokens para convertir las palabras plurales en español en los tokens en su forma singular.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba spanishPluralStemmer en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona standard del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Seleccione lowercase del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  8. Haga Add token filter clic en para agregar otro filtro de token.

  9. Selecciona spanishPluralStemming del menú desplegable.

  10. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  11. Haga clic en Add para crear el analizador personalizado.

  12. En la Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo anidado text.es_MX.

  13. Seleccione el texto anidado.es_MX del Field Name menú desplegable y Cadena del Data Type menú desplegable.

  14. En la sección de propiedades del tipo de datos, seleccione spanishPluralStemmer de los menús desplegables Index Analyzer y Search Analyzer.

  15. 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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

_id: 4

la, pagina, ha, sido, actualizada, con, los, punto, de, la, agenda

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.

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser stempel.

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:

  1. Aplique el tokenizador estándar para crear tokens basados ​​en reglas de división de palabras.

  2. Aplicar los siguientes filtros en los tokens:

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba stempelAnalyzer en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona standard del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Seleccione lowercase del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  8. Haga Add token filter clic en para agregar otro filtro de token.

  9. Selecciona spanishPluralStemming del menú desplegable.

  10. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  11. Haga clic en Add para crear el analizador personalizado.

  12. En la Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo de título.

  13. Seleccione el título en el Field Name menú desplegable y la cadena en el Data Type menú desplegable.

  14. En la sección de propiedades del tipo de datos, seleccione stempelAnalyzer de los menús desplegables Index Analyzer y Search Analyzer.

  15. 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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

_id: 4

strona, zostać, zaktualizować, o, punkt, porządek, obrada

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.

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser stopword.

tokens

matriz de cadenas

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.

ignoreCase

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:

  • true - Ignorar mayúsculas y minúsculas y eliminar todos los tokens que coincidan con las palabras vacías especificadas

  • false - Distinga entre mayúsculas y minúsculas y elimine solo los tokens que coincidan exactamente con las mayúsculas y minúsculas especificadas

Por defecto: true

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:

  1. Aplique el tokenizador de espacios en blanco para crear tokens basados ​​en las ocurrencias de espacios en blanco entre palabras.

  2. Aplique el filtro de token stopword para eliminar los tokens que coincidan con las palabras vacías definidas is, the y at. 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.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba stopwordRemover en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona whitespace del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Seleccione stopword del menú desplegable y escriba lo siguiente en el campo tokens:

    is, the, at

  8. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  9. Haga clic en Add para crear el analizador personalizado.

  10. En la Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo anidado text.en_US.

  11. Seleccione text.en_US anidado del menú desplegable Field Name y String del menú desplegable Data Type.

  12. En la sección de propiedades del tipo de datos, seleccione stopwordRemover de los menús desplegables Index Analyzer y Search Analyzer.

  13. 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"]
}
]
}
]
}
1db.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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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
1db.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

_id: 2

head, of, sales, department, spoke, first.

El filtro de token trim recorta los espacios iniciales y finales de los tokens.

Tiene el siguiente atributo:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser trim.

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:

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba tokenTrimmer en el campo Analyzer Name.

  4. Expanda Character Filters y haga clic Add character filter en.

  5. Seleccione htmlStrip del menú desplegable y escriba a en el campo ignoredTags.

  6. Haga clic en Add character filter para agregar el filtro de caracteres a su analizador personalizado.

  7. Expande Tokenizer si está contraído.

  8. Selecciona keyword del menú desplegable.

  9. Expanda Token Filters y haga clic Add token filter en.

  10. Selecciona trim del menú desplegable.

  11. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  12. Haga clic en Add para agregar el analizador personalizado a su índice.

  13. En la Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo anidado text.en_US.

  14. Seleccione text.en_US anidado del menú desplegable Field Name y String del menú desplegable Data Type.

  15. En la sección de propiedades del tipo de datos, seleccione tokenTrimmer de los menús desplegables Index Analyzer y Search Analyzer.

  16. 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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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"
1db.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

_id: 1

This page deals with department meetings.

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.

Tiene los siguientes atributos:

Nombre
Tipo
¿Obligatorio?
Descripción

type

string

Etiqueta legible que identifica este tipo de filtro de token. El valor debe ser wordDelimiterGraph.

delimiterOptions

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 true, esta opción divide PowerShot en Power y Shot.

Por defecto: true

delimiterOptions
.generateNumberParts

booleano

no

Indicador que indica si se deben dividir los tokens según subnúmeros. Por ejemplo, si es true, esta opción divide 100-2 en 100 y 2.

Por defecto: true

delimiterOptions
.concatenateWords

booleano

no

Indicador que indica si se deben concatenar secuencias de subpalabras. Por ejemplo, si true es, esta opción concatena wi-fi wifien.

Por defecto: false

delimiterOptions
.concatenateNumbers

booleano

no

Indicador que indica si se deben concatenar segmentos de subnúmeros. Por ejemplo, si true, esta opción concatena 100-2 en 1002.

Por defecto: false

delimiterOptions
.concatenateAll

booleano

no

Indicador que indica si se deben concatenar todas las ejecuciones. Por ejemplo, si true es, esta opción concatena wi-fi-100-2 wifi1002en.

Por defecto: false

delimiterOptions
.preserveOriginal

booleano

no

Bandera que indica si se deben generar tokens de las palabras originales.

Por defecto: true

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 true, esta opción divide camelCase en camel y Case.

Por defecto: true

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 true, esta opción divide g2g en g, 2 y g.

Por defecto: true

delimiterOptions
.stemEnglishPossessive

booleano

no

Indicador que indica si se deben eliminar los posesivos finales de cada subpalabra. Por ejemplo, si es true, esta opción cambia who's a who.

Por defecto: true

delimiterOptions
.ignoreKeywords

booleano

no

Bandera que indica si se deben omitir los tokens con el atributo keyword establecido en true.

Por defecto: false

protectedWords

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, debe especificar esta opción.

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: true

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.

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:

  1. Aplique el tokenizador de espacios en blanco para crear tokens basados ​​en las ocurrencias de espacios en blanco entre palabras.

  2. Aplica el filtro de tokens wordDelimiterGraph para lo siguiente:

    • No intentes dividir is, the y at. La exclusión distingue entre mayúsculas y minúsculas. Por ejemplo, Is y tHe no se excluyen.

    • Dividir tokens en cambios de mayúsculas y remueve tokens que contengan sólo letras del alfabeto inglés.

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

  2. Seleccione el botón de opción Create Your Own y haga clic en Next.

  3. Escriba wordDelimiterGraphAnalyzer en el campo Analyzer Name.

  4. Expande Tokenizer si está contraído.

  5. Selecciona whitespace del menú desplegable.

  6. Expanda Token Filters y haga clic Add token filter en.

  7. Seleccione lowercase del menú desplegable y haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  8. Haga Add token filter clic en para agregar otro filtro de token.

  9. Seleccione wordDelimiterGraph del menú desplegable y configure los siguientes campos:

    1. Deseleccione delimiterOptions.generateWordParts y seleccione delimiterOptions.splitOnCaseChange.

    2. Escriba y luego seleccione del menú desplegable las palabras is, the y at, una a la vez, en el campo protectedWords.words.

    3. Deseleccionar protectedWords.ignoreCase.

  10. Haga clic en Add token filter para agregar el filtro de token a su analizador personalizado.

  11. Haga clic en Add para crear el analizador personalizado.

  12. En la Field Mappings sección,Add Field Mapping haga clic en para aplicar el analizador personalizado en el campo anidado del título.

  13. Seleccione el título anidado en el Field Name menú desplegable y la Cadena en el Data Type menú desplegable.

  14. En la sección de propiedades del tipo de datos, seleccione wordDelimiterGraphAnalyzer de los menús desplegables Index Analyzer y Search Analyzer.

  15. 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.

  1. Haga clic en el botón Query para su índice.

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

  3. Haga clic en la barra de consulta y seleccione la base de datos y la colección.

  4. 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

protectedWords

The, daily, huddle, on, t, He, Stand, Up, App, 2

delimiterOptions

The, daily, huddle, on, 2

Volver

Tokenizadores