Nota
Esta página describe las query capacidades de texto para implementaciones autogestionados (no Atlas). Para datos alojados en MongoDB Atlas, MongoDB ofrece una solución mejorada de consulta de texto completo, Atlas Search y una solución de búsqueda vectorial, Atlas Vector Search.
En la pipeline de agregación, la búsqueda de texto está disponible mediante el uso de la El operador del query $text en la etapa $match.
Restricciones
Para consultar las restricciones generales de los operadores $text, consulta las restricciones de los operadores.
Además, la búsqueda de texto en la pipeline de agregación tiene las siguientes restricciones:
La etapa
$matchque incluye un$textdebe ser la primera etapa en el pipeline.Un operador
$textsolo puede ocurrir una vez en la etapa.La expresión del Operador
$textno puede aparecer en$orni en$not.$text, por defecto, no devuelve los documentos coincidentes en el orden de las puntuaciones de coincidencia. Para ordenar por puntuación descendente, utiliza la expresión de agregación$metaen la etapa$sort.
Puntuación del texto
El operador $text asigna una puntuación a cada documento de resultado. La puntuación representa la relevancia de un documento para una query dada. El puntaje puede formar parte de una especificación de pipeline $sort, así como parte de la expresión de proyección. La expresión { $meta: "textScore" } proporciona información sobre el procesamiento de la operación $text. Para obtener detalles sobre cómo acceder a la puntuación para la proyección o clasificación, consulta $meta.
Los metadatos solo están disponibles después de la etapa $match que incluye la operación $text.
Ejemplos
Los siguientes ejemplos asumen una colección articles que tiene un índice de texto en el campo subject:
db.articles.createIndex( { subject: "text" } )
Calcular la cantidad total de vistas de artículos que contengan una palabra
La siguiente agregación busca el término cake en la etapa $match y calcula el total de views para los documentos coincidentes en la etapa $group.
db.articles.aggregate( [ { $match: { $text: { $search: "cake" } } }, { $group: { _id: null, views: { $sum: "$views" } } } ] )
Devuelve los resultados ordenados por la puntuación de búsqueda de texto
Para ordenar por el puntaje de búsqueda de texto, incluya una expresión {$meta:
"textScore"} en la etapa $sort . El siguiente ejemplo coincide con ya sea el término cake o tea, ordena por el textScore en orden descendente y devuelve solo el campo title en el conjunto de resultados.
db.articles.aggregate( [ { $match: { $text: { $search: "cake tea" } } }, { $sort: { score: { $meta: "textScore" } } }, { $project: { title: 1, _id: 0 } } ] )
Los metadatos especificados determinan el orden de clasificación. Por ejemplo, los metadatos "textScore" clasifican en orden descendente. Consulta $meta para obtener más información sobre los metadatos, así como un ejemplo de anular el orden de clasificación por defecto de los metadatos.
Coincidencia en la puntuación de texto
Los metadatos de "textScore" están disponibles para las proyecciones, ordenaciones y condiciones después de la etapa $match que incluye la operación de $text.
El siguiente ejemplo coincide con ya sea el término cake o tea, proyecta los campos title y score y, a continuación, devuelve solo los documentos con un score mayor que 1.0.
db.articles.aggregate( [ { $match: { $text: { $search: "cake tea" } } }, { $project: { title: 1, _id: 0, score: { $meta: "textScore" } } }, { $match: { score: { $gt: 1.0 } } } ] )
Especificar un lenguaje para la búsqueda de texto
La siguiente agregación busca en español documentos que contienen el término saber pero no el término claro en la etapa $match y calcula el total de views para los documentos coincidentes en la etapa $group.
db.articles.aggregate( [ { $match: { $text: { $search: "saber -claro", $language: "es" } } }, { $group: { _id: null, views: { $sum: "$views" } } } ] )
$search Fase en Atlas Search
Para los datos alojados en MongoDB Atlas, Atlas Search provee la etapa de agregación $search para realizar búsquedas de texto completo en tus colecciones.