Este tutorial describe cómo crear índices para limitar el número de entradas de índice escaneadas para consultas que incluyan una $text
condiciones de expresión e igualdad.
Una colección inventory contiene los siguientes documentos:
{ _id: 1, dept: "tech", description: "lime green computer" } { _id: 2, dept: "tech", description: "wireless red mouse" } { _id: 3, dept: "kitchen", description: "green placemat" } { _id: 4, dept: "kitchen", description: "red peeler" } { _id: 5, dept: "food", description: "green apple" } { _id: 6, dept: "food", description: "red potato" }
Considera el caso de uso común que realiza búsquedas de texto por departamentos individuales, como:
db.inventory.find( { dept: "kitchen", $text: { $search: "green" } } )
Para limitar la búsqueda de texto a que solo escanee aquellos documentos dentro de un dept específico, crea un índice compuesto que primero especifique una clave de índice ascendente/descendente en el campo dept y luego una clave de índice text en el campo description:
db.inventory.createIndex( { dept: 1, description: "text" } )
A continuación, la búsqueda de texto dentro de un departamento determinado limitará el escaneo de documentos indexados. Por ejemplo, la siguiente query escanea solo aquellos documentos con dept igual a kitchen:
db.inventory.find( { dept: "kitchen", $text: { $search: "green" } } )
Nota
Un índice compuesto
textno puede incluir ningún otro tipo de índice especial, como campos de índice multiclave o geoespacial.Si el índice de texto compuesto incluye claves anteriores a la clave de índice de texto, para utilizar
$text, el predicado de la consulta debe incluir condiciones de coincidencia exacta en las claves anteriores.Al crear un índice compuesto
text, todas las claves de índicetextdeben enumerarse de forma adyacente en el documento de especificación del índice.