Para agentes de IA: hay un índice de documentación disponible en https://www.mongodb.com/es/docs/llms.txt — versiones en markdown de todas las páginas están disponibles agregando .md a cualquier ruta URL.
See how MongoDB 9.0 delivers up to 2x higher throughput.
MongoDB Branding Shape
Register now >
Docs Menu

text (MongoDB Search Operador)

El operador text realiza una búsqueda de texto completo utilizando el analizador que especifiques en la configuración del índice. Si omites un analizador, el operador text utiliza el analizador estándar por defecto.

Puede utilizar el operador text para buscar coincidencias exactas con términos de una sola palabra.

text tiene la siguiente sintaxis:

{
$search: {
"index": <index name>, // optional, defaults to "default"
"text": {
"query": "<search-string>",
"path": "<field-to-search>",
"fuzzy": <options>,
"matchCriteria": "any" | "all"
"score": <options>,
"synonyms": "<synonyms-mapping-name>"
}
}
}

text utiliza los siguientes términos para construir una query:

Campo
Tipo
Descripción
Necesidad

query

string o arreglo de strings

La o las cadenas que se deben buscar. Si hay varios términos en una string, la búsqueda en MongoDB Search también busca una coincidencia para cada término de la string por separado.

Requerido

path

string o arreglo de strings

El campo o los campos indexados a buscar. También se puede especificar una ruta comodín para realizar una búsqueda.

Requerido

fuzzy

Documento

Habilita la búsqueda difusa. Encuentre cadenas que sean similares al término o términos de búsqueda. No puedes utilizar fuzzy con synonyms.

Opcional

fuzzy.maxEdits

entero

El número máximo de ediciones de un solo carácter requeridas para coincidir con el término de búsqueda especificado. El valor puede ser 1 o 2. El valor por defecto es 2. Utiliza la distancia de Damerau-Levenshtein.

Opcional

fuzzy.prefixLength

entero

Número de caracteres al inicio de cada término en el resultado que deben coincidir exactamente. El valor por defecto es 0.

Opcional

fuzzy.maxExpansions

entero

Número máximo de variaciones a generar y buscar. Este límite se aplica a cada token. El valor por defecto es 50.

Opcional

matchCriteria

string

Criterios a utilizar para hacer coincidir los términos en la query. Si se omite, el valor por defecto es any. El valor puede ser uno de los siguientes:

  • any - para devolver documentos que contengan cualquiera de los términos del campo query.

  • all - para devolver solo documentos que contengan todos los términos del campo query.

Opcional, recomendado

score

Documento

Puntuación asignada a los resultados de términos de búsqueda coincidentes. Utiliza una de las siguientes opciones para modificar el puntaje:

  • boostMultiplica la puntuación resultante por el número dado.

  • constant: reemplazar la puntuación del resultado por el número dado.

  • function: reemplazar el puntaje de resultados usando la expresión dada.

Cuando se consultan valores en arreglos, MongoDB Search asigna mayores puntuaciones si más valores en el arreglo coinciden con la query.

Opcional

synonyms

string

Es necesario para ejecutar queries utilizando synonyms.

Nombre de la definición de asignación de sinónimos en la definición de índice. El valor no puede ser una cadena vacía. No puedes usar fuzzy con synonyms.

IMPORTANTE: Para usar la opción synonyms, debes indexar el campo de consulta como tipo string, con la propiedad indexOptions establecida en positions o el valor predeterminado offsets. Para obtener más información, consulta Configura propiedades de campo String.

Siempre usa matchCriteria cuando uses synonyms. Para text queries que utilizan synonyms sin matchCriteria, MongoDB Search solo se corresponde con documentos donde todos los términos se encuentran exactamente en la misma posición que en la query. Este comportamiento podría cambiar en el futuro y tus resultados de query también podrían cambiar.

La cantidad de tiempo que MongoDB Search tarda en ejecutar consultas que utilizan mapeos de sinónimos depende de la cantidad y tamaño de los documentos en la colección fuente de sinónimos. Una query que utiliza un mapeo de sinónimos basado en muy pocos documentos de sinónimos podría ser más rápida que una query que utiliza un mapeo de sinónimos basado en muchos documentos de sinónimos.

Opcional

Por defecto, el texto operador utiliza el algoritmo de similitud bm25 para puntuar los documentos según su relevancia con respecto a la query.

Puede cambiar el algoritmo de similitud que se utiliza especificando un algoritmo de similitud diferente en la propiedad similarity.type para los campos string en su definición de índice de MongoDB Search. Para aprender a configurar un índice de MongoDB Search para el tipo string, se puede consultar Cómo indexar campos de string.

Para obtener más información sobre los algoritmos de similitud admitidos, consulta Detalles de la puntuación.

Para las text queries que utilizan synonyms sin matchCriteria, MongoDB Search sólo coincide con los documentos que contienen una coincidencia exacta de los términos de la query (con o sin los sinónimos expandidos).

Este comportamiento puede cambiar en el futuro y tus resultados de consulta también pueden cambiar. Para evitar interrupciones en el servicio, siempre usa matchCriteria cuando utilices synonyms. O utiliza sinónimos con el operador frase.

Por ejemplo, suponga que existen asignaciones de sinónimos equivalentes para nyc y new york city. Una búsqueda de i like nyc devuelve lo siguiente:

Especificación del Operador
Comportamiento por defecto
"matchCriteria": "any"
"matchCriteria": "all"

text sin synonyms

Coincide con i O like O nyc

Coincide con i O like O nyc

Coincidencias i Y like Y nyc

text con synonyms

Coincide con i like nyc O i like new york city

Coincide con i O like O (nyc O new york city)

Coincide con i Y like Y (nyc O new york city)

La cantidad de tiempo que MongoDB Search tarda en ejecutar consultas que utilizan mapeos de sinónimos depende de la cantidad y tamaño de los documentos en la colección fuente de sinónimos. Una query que utiliza un mapeo de sinónimos basado en muy pocos documentos de sinónimos podría ser más rápida que una query que utiliza un mapeo de sinónimos basado en muchos documentos de sinónimos.

Los ejemplos de esta página usan la colección movies en la base de datos sample_mflix. Después de cargar el dataset de muestra en el clúster, crea el índice MongoDB Search con mapeos dinámicos y ejecuta las consultas de ejemplo en el clúster. También debes definir una colección de mapeo synonyms en el índice como se muestra en el Ejemplo de definición de índices para probar los siguientes ejemplos de sinónimos.

La siguiente query de búsqueda de MongoDB Search utiliza el operador text para buscar el campo title en la colección movies el término surfer. Incluye una etapa de $project para:

  • Excluir todos los campos excepto title

  • Añade un campo llamado score

db.movies.aggregate([
{
$search: {
"text": {
"path": "title",
"query": "surfer"
}
}
},
{
$project: {
"_id": 0,
"title": 1,
score: { $meta: "searchScore" }
}
}
])

La siguiente consulta busca el campo title por el término summer. Usa la etapa $searchMeta para recuperar el número de películas en los siguientes grupos (años) que coinciden con los criterios de búsqueda:

  • 1970, límite inferior inclusivo para este intervalo

  • 1980, límite superior exclusivo para el cubo 1970 y límite inferior inclusivo para este cubo

  • 1990, límite superior exclusivo para el cubo 1980 y límite inferior inclusivo para este cubo

  • 2000, límite superior exclusivo para el cubo 1990 y límite inferior inclusivo para este cubo

  • 2010, límite superior exclusivo para el cubo 2000 y límite inferior inclusivo para este cubo

  • 2015, límite superior exclusivo para el intervalo 2010

db.movies.aggregate([
{
"$searchMeta": {
"facet": {
"operator": {
"text": {
"path": "title",
"query": "summer"
}
},
"facets": {
"yearFacet": {
"type": "number",
"path": "year",
"boundaries": [1970, 1980, 1990, 2000, 2010, 2020 ]
}
}
}
}
}
])

Las siguientes consultas usan el operador text para buscar en el campo title de la colección movies términos que estén a una variante de carácter de cada término de la frase query naw yark. MongoDB Search devuelve diferentes resultados dependiendo de si usas las opciones fuzzy por defecto o defines los campos maxExpansions, prefixLength o maxEdits.

Haz clic en las siguientes pestañas para ver ejemplos de queries que utilizan opciones por defecto y especificadas:

La siguiente consulta busca la frase naw yark en el campo title. Utiliza las opciones por defecto de fuzzy donde:

  • maxEdits permite hasta dos variaciones de caracteres para cada término en la frase dada, lo que permite que la query coincida con un documento.

  • maxExpansions considera hasta cincuenta términos similares para cada término en naw yark para encontrar coincidencias.

  • prefixLength está desactivado.

La query también incluye una $limit etapa para limitar la salida a 10 resultados y una $project etapa para:

  • Excluir todos los campos excepto title

  • Añade un campo llamado score

db.movies.aggregate([
{
$search: {
"text": {
"path": "title",
"query": "naw yark",
"fuzzy": {}
}
}
},
{
$limit: 10
},
{
$project: {
"_id": 0,
"title": 1,
score: { $meta: "searchScore" }
}
}
])

La siguiente consulta busca en el campo title términos que estén a un carácter de distancia de cada término en la string naw yark. Usa:

  • El campo maxEdits para indicar que solo se permite una variación de carácter para cada término con el fin de coincidir la query con un documento.

  • El campo maxExpansions para indicar que hasta cien términos similares para naw y cien términos similares para yark deben ser considerados al hacer coincidir la query con un documento.

La query también incluye una $limit etapa para limitar la salida a 10 resultados y una $project etapa para:

  • Excluir todos los campos excepto title

  • Añade un campo llamado score

db.movies.aggregate([
{
$search: {
"text": {
"path": "title",
"query": "naw yark",
"fuzzy": {
"maxEdits": 1,
"maxExpansions": 100,
}
}
}
},
{
$limit: 10
},
{
$project: {
"_id": 0,
"title": 1,
score: { $meta: "searchScore" }
}
}
])

La siguiente consulta busca en el campo title términos que estén a un carácter de distancia de cada término en la string naw yark. Usa:

  • El campo maxEdits para indicar que solo se permite una variación de carácter para que coincida con la query de un documento.

  • El campo prefixLength para indicar que los dos primeros caracteres de cada término en la string naw yark no deben alterarse para hacer que la query coincida con un documento.

La query también incluye una $limit etapa para limitar la salida a 8 resultados y una $project etapa para:

  • Excluir todos los campos salvo _id y title

  • Añade un campo llamado score

db.movies.aggregate([
{
$search: {
"text": {
"path": "title",
"query": "naw yark",
"fuzzy": {
"maxEdits": 1,
"prefixLength": 2,
}
}
}
},
{
$limit: 8
},
{
$project: {
"_id": 1,
"title": 1,
score: { $meta: "searchScore" }
}
}
])

La consulta siguiente utiliza el operador text para buscar el campo plot de la colección movies para todos los términos de la string del query automobile race.

db.movies.aggregate([
{
"$search": {
"text": {
"path": "plot",
"query": "automobile race",
"matchCriteria": "all"
}
}
},
{
"$limit": 20
},
{
"$project": {
"_id": 0,
"plot": 1,
"title": 1,
"score": { "$meta": "searchScore" }
}
}
])
[
{
plot: 'A young driver, Speed Racer, aspires to be champion of the racing world with the help of his family and his high-tech Mach 5 automobile.',
title: 'Speed Racer',
score: 6.122188568115234
},
{
plot: 'A gorgeous young automobile fanatic--and front to the hottest unsigned band on the West coast--finds herself caught up in illegal drag-racing competitions organized by exotic car fanatics.',
title: 'Redline',
score: 5.497724533081055
},
{
plot: 'When a popular daredevil proposes an automobile race across three continents, his arch rival vows to beat him, while an ambitious female reporter has her own plans for victory.',
title: 'The Great Race',
score: 5.282209396362305
}
]

MongoDB Search devuelve documentos que contienen los términos automobile y race en cualquier parte del campo plot.

Los siguientes ejemplos utilizan el operador text para buscar en el campo plot en el namespace sample_mflix.movies . MongoDB Search devuelve resultados basados en el tipo de mapeo de la colección de origen de sinónimos, synonymous_terms, especificado en la definición de mapeo de sinónimos del índice para la colección sample_mflix.movies.

La siguiente consulta busca la frase attire en el campo plot. Utiliza el mapeo de sinónimos llamado mySynonyms en el índice de la colección para buscar también las palabras que están configuradas como sinónimos de la palabra dress.

db.movies.aggregate([
{
"$search": {
"text": {
"path": "plot",
"query": "attire",
"synonyms": "my_synonyms",
"matchCriteria": "any"
}
}
},
{
"$limit": 5
},
{
"$project": {
"_id": 0,
"plot": 1,
"title": 1,
"score": { "$meta": "searchScore" }
}
}
])

MongoDB Search devuelve los documentos que contienen los términos attire, apparel y dress porque configuramos todos estos términos como equivalent sinónimos en la colección fuente de sinónimos synonymous_terms, lo que significa que todos estos términos son sinónimos entre sí. Por lo tanto, MongoDB Search devuelve documentos similares para búsquedas en dress y attire.

La siguiente query busca en el campo plot la frase boat race. Utiliza el mapeo de sinónimos llamado my_synonyms en el índice de la colección para también buscar palabras que estén configuradas como sinónimos de la palabra boat y race.

db.movies.aggregate([
{
"$search": {
"text": {
"path": "plot",
"query": "boat race",
"synonyms": "my_synonyms",
"matchCriteria": "any"
}
}
},
{
"$limit": 10
},
{
"$project": {
"_id": 0,
"plot": 1,
"title": 1,
"score": { "$meta": "searchScore" }
}
}
])

MongoDB Search devuelve documentos que contienen el término boat, vessel, o sail, o race, rally o contest porque configuramos boat como un sinónimo de explicit o vessel y sail y configuramos race como un sinónimo de explicit de rally y contest. MongoDB Search no devuelve ningún resultado para una consulta en vessel y sail o rally y contest porque no configuramos estas palabras para que consideren a ninguna de las demás palabras como sinónimos.

La siguiente query utiliza el operador text para buscar en el campo plot de la colección movies todos los términos presentes en la string del query automobile race.

MongoDB Search devuelve resultados basados en el tipo de mapeo en la colección de origen de sinónimos, synonymous_terms, especificada en la definición de mapeo de sinónimos del índice para la colección sample_mflix.movies.

db.movies.aggregate([
{
"$search": {
"text": {
"path": "plot",
"query": "automobile race",
"matchCriteria": "all",
"synonyms": "my_synonyms"
}
}
},
{
"$limit": 20
},
{
"$project": {
"_id": 0,
"plot": 1,
"title": 1,
"score": { "$meta": "searchScore" }
}
}
])

MongoDB Search devuelve documentos que contienen los términos de consulta automobile, car o vehicle y race, context o rally, porque configuramos automobile, vehicle y car como sinónimos de equivalent y configuramos rally y contest como sinónimos de explicit de race en la colección synonymous_terms.