Puedes crear un índice de texto que contenga todos los campos de documentos con datos de string en una colección. Estos índices de texto se denominan índices de texto wild-card. Soporte para índices de texto comodín búsqueda de texto en campos desconocidos, arbitrarios o generados dinámicamente.
Para crear un índice de texto comodín, establezca la clave del índice en el especificador de comodín ($**) y establezca el valor de índice en text:
db.<collection>.createIndex( { "$**": "text" } )
Acerca de esta tarea
Los índices de texto comodín son distintos de índices comodín. Los índices de texto comodín soportan consultas que usan el operador $text, mientras que los índices comodín no.
Nota
$text proporciona capacidades de query de texto para implementaciones autogestionadas (no Atlas). Para los datos alojados en MongoDB Atlas, MongoDB ofrece una solución mejorada de consultas de texto completo, Atlas búsqueda.
Después de crear un índice de texto comodín, al insertar o actualizar documentos, el índice se actualiza para incluir cualquier nuevo valor de campo de string. Como resultado, los índices de texto comodín tienen un impacto negativo en el rendimiento de las inserciones y actualizaciones.
Solo usa los índices de texto comodín cuando los campos que deseas indexar son desconocidos o podrían cambiar. Los índices de texto con comodines no ofrecen el mismo rendimiento que los índices de texto selectivos en campos específicos. Si tu colección contiene nombres de campos arbitrarios que impiden los índices dirigidos, considera remodelar tu esquema para tener nombres de campos coherentes. Para obtener más información sobre índices dirigidos, consulta Crea índices para respaldar tus consultas.
Antes de comenzar
Crea una colección blog con los siguientes documentos:
db.blog.insertMany( [ { _id: 1, content: "This morning I had a cup of coffee.", about: "beverage", keywords: [ "coffee" ] }, { _id: 2, content: "Who likes chocolate ice cream for dessert?", about: "food", keywords: [ "poll" ] }, { _id: 3, content: "My favorite flavors are strawberry and coffee", about: "ice cream", keywords: [ "food", "dessert" ] } ] )
Procedimiento
Cree un índice de texto de comodín en la colección blog:
db.blog.createIndex( { "$**": "text" } )
Resultados
El índice de texto comodín admite consultas de búsqueda de texto en todos los campos de la colección. Considera las siguientes consultas:
Buscar una sola palabra
Consultar la colección blog por la string coffee:
db.blog.find( { $text: { $search: "coffee" } } )
Salida:
[ { _id: 1, content: 'This morning I had a cup of coffee.', about: 'beverage', keywords: [ 'coffee' ] }, { _id: 3, content: 'My favorite flavors are strawberry and coffee', about: 'ice cream', keywords: [ 'food', 'dessert' ] } ]
La consulta anterior devuelve todos los documentos que contienen la string coffee en cualquier campo.
Buscar múltiples términos
Query la colección blog para buscar documentos que contengan la cadena poll o coffee:
db.blog.find( { $text: { $search: "poll coffee" } } )
Salida:
[ { _id: 1, content: 'This morning I had a cup of coffee.', about: 'beverage', keywords: [ 'coffee' ] }, { _id: 3, content: 'My favorite flavors are strawberry and coffee', about: 'ice cream', keywords: [ 'food', 'dessert' ] }, { _id: 2, content: 'Who likes chocolate ice cream for dessert?', about: 'food', keywords: [ 'poll' ] } ]
La query anterior devuelve documentos que contienen la string poll o coffee en cualquier campo.
Buscar un String exacto
Query la colección blog para documentos que contengan la string exacta chocolate ice cream:
db.blog.find( { $text: { $search: "\"chocolate ice cream\"" } } )
Salida:
[ { _id: 2, content: 'Who likes chocolate ice cream for dessert?', about: 'food', keywords: [ 'poll' ] } ]
La query precedente devuelve documentos que contienen la cadena exacta chocolate ice cream en cualquier campo.
Obtén más información
Para aprender a controlar la clasificación de los resultados de consultas de texto, consulta Asignar pesos a los resultados de búsqueda de texto en implementaciones autogestionadas.
Puedes incluir un índice de texto comodín como parte de un índice de texto compuesto. Para obtener más información sobre los índices de texto compuestos, consulte Crear un índice de texto compuesto.
Para ver ejemplos de consultas de búsqueda de texto, consulte
$text.Nota
$textproporciona capacidades de query de texto para implementaciones autogestionadas (no pertenecientes a Atlas). Para los datos alojados en MongoDB Atlas, MongoDB ofrece una solución mejorada de búsqueda de texto completo, Búsqueda de Atlas.Para aprender sobre las propiedades de los índices de texto, como la sensibilidad a mayúsculas y minúsculas, consulta Propiedades de los índices de texto en implementaciones autogestionadas.