Nota
Esta página describe las funciones de consulta de texto para implementaciones autogestionadas (no Atlas). Para los datos alojados en MongoDB, MongoDB también ofrece una solución mejorada de consulta de texto completo. Búsqueda MongoDB y una solución de búsqueda vectorial, Vector Search.
En la cadena de agregación, la búsqueda de texto está disponible mediante el uso de $textOperador de consulta en la $match etapa.
Restricciones
Para conocer las $text restricciones generales del operador,consulte restricciones del operador.
Además, la búsqueda de texto en el proceso 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 $text operador asigna una puntuación a cada documento resultante. Esta puntuación representa la relevancia de un documento para una consulta determinada. Puede formar parte de una especificación de canalización, así como de la expresión de proyección.$sort La { $meta: "textScore" } expresión proporciona información sobre el procesamiento de la $text operación.$meta Consulte para obtener más información sobre cómo acceder a la puntuación para la proyección o la ordenación.
Los metadatos solo están disponibles después de la etapa que incluye $match la $text operación.
Ejemplos
Los siguientes ejemplos suponen una colección articles que tiene un índice de texto en el campo subject:
db.articles.createIndex( { subject: "text" } )
Calcular el total de visualizaciones de artículos que contienen una palabra
La siguiente agregación busca el término cake en la etapa y calcula el $match total views para los documentos coincidentes en la $group etapa.
db.articles.aggregate( [ { $match: { $text: { $search: "cake" } } }, { $group: { _id: null, views: { $sum: "$views" } } } ] )
Resultados devueltos ordenados por puntuación de búsqueda de texto
Para ordenar por la puntuación de búsqueda de texto, incluya una {$meta:
"textScore"} expresión en la $sort etapa. El siguiente ejemplo busca coincidencias con el término cake o,tea ordena por el textScore en orden descendente y devuelve solo el title campo 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 "textScore" metadatos se ordenan en orden descendente. Consulte para obtener más información sobre los metadatos, así como un ejemplo de cómo anular el orden de clasificación $meta predeterminado.
Coincidencia en la puntuación de texto
Los "textScore" metadatos están disponibles para proyecciones, ordenaciones y condiciones posteriores a la etapa que incluye $match la $text operación.
El siguiente ejemplo coincide con el término cake tea title o,score proyecta los campos y y luego devuelve solo aquellos documentos con un score mayor 1.0 que.
db.articles.aggregate( [ { $match: { $text: { $search: "cake tea" } } }, { $project: { title: 1, _id: 0, score: { $meta: "textScore" } } }, { $match: { score: { $gt: 1.0 } } } ] )
Especificar un idioma 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 y calcula el $match total views para los documentos coincidentes en la $group etapa.
db.articles.aggregate( [ { $match: { $text: { $search: "saber -claro", $language: "es" } } }, { $group: { _id: null, views: { $sum: "$views" } } } ] )
$search Etapa en la búsqueda de MongoDB
Para los datos alojados en MongoDB, MongoDB Search proporciona la etapa de agregación $search para realizar búsqueda de texto completo en tus colecciones.