Nota
Esta página describe las funciones de consulta de texto para implementaciones autogestionadas (no Atlas). Para los 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.
Para ejecutar consultas de búsqueda de texto en implementaciones autoadministradas, debe tener un índice de texto de tu colección. MongoDB suministra índices de texto para admitir consultas de búsqueda de texto en contenido de string. Los índices de texto pueden incluir cualquier campo cuyo valor sea una string o un arreglo de elementos de string. Una colección solo puede tener un índice de búsqueda de texto, aunque dicho índice puede cubrir varios campos.
Consulta la sección Índices de texto en implementaciones autogestionadas para obtener una referencia completa sobre los índices de texto, incluidos el comportamiento, la tokenización y las propiedades.
Ejemplos
Este ejemplo demuestra cómo compilar un índice de texto y usarlo para encontrar cafeterías, dado solo campos de texto.
Crear una colección
Crear una colección stores con los siguientes documentos:
db.stores.insertMany( [ { _id: 1, name: "Java Hut", description: "Coffee and cakes" }, { _id: 2, name: "Burger Buns", description: "Gourmet hamburgers" }, { _id: 3, name: "Coffee Shop", description: "Just coffee" }, { _id: 4, name: "Clothes Clothes Clothes", description: "Discount clothing" }, { _id: 5, name: "Java Shopping", description: "Indonesian goods" }, { _id: 6, name: "NYC_Coffee Shop", description: "local NYC coffee" } ] )
Cree un índice de texto
Ejecuta lo siguiente en mongosh para permitir la búsqueda de texto en los campos name y description:
db.stores.createIndex( { name: "text", description: "text" } )
Buscar un String exacto
Puedes buscar cadenas exactas de varias palabras envolviéndolas con comillas dobles. La búsqueda de texto solo coincide con los documentos que incluyen la string completa.
Por ejemplo, la siguiente query encuentra todos los documentos que contienen la string "cafetería":
db.stores.find( { $text: { $search: "\"coffee shop\"" } } )
Esta query devuelve los siguientes documentos:
[ { _id: 3, name: 'Coffee Shop', description: 'Just coffee' }, { _id: 6, name: 'NYC_Coffee Shop', description: 'local NYC coffee' } ]
Salvo que se especifique, la búsqueda exacta de string no distingue entre mayúsculas y minúsculas ni entre diacríticos. Por ejemplo, la siguiente query devuelve los mismos resultados que la query anterior:
db.stores.find( { $text: { $search: "\"COFFEé SHOP\"" } } )
La búsqueda de cadenas exactas no maneja palabras derivadas ni palabras vacías.
Excluir un término
Para excluir una palabra, puede anteponer el carácter "-". Por ejemplo, para buscar todas las tiendas que contengan "java" o "tienda", pero no "café", utilice lo siguiente:
db.stores.find( { $text: { $search: "java shop -coffee" } } )
Ordenar los resultados
MongoDB devuelve sus resultados en orden no ordenado por defecto. Sin embargo, $text queries calculan una puntuación de relevancia para cada documento que especifica qué tan bien coincide un documento con la query.
Para ordenar los resultados según el puntaje de relevancia, debes proyectar explícitamente el campo $meta textScore y ordenarlos:
db.stores.find( { $text: { $search: "java coffee shop" } }, { score: { $meta: "textScore" } } ).sort( { score: { $meta: "textScore" } } )
$text También está disponible en la canalización de agregación.