Nota
La búsqueda por palabras clave no es lo mismo que la búsqueda de texto o la Full Text Search, y no proporciona funcionalidades de derivación ni otros procesamientos de texto. Ver el Sección Limitaciones de los índices de palabras clave para obtener más información.
En 2.4, MongoDB ofrece una funcionalidad de búsqueda de texto. Ver Índices de texto sobre implementaciones autogestionadas para obtener más información.
Si su aplicación necesita realizar consultas sobre el contenido de un campo que contiene texto, puede realizar coincidencias exactas en el texto o utilizar
$regex para usar coincidencias de patrones de expresiones regulares. Sin embargo, para muchas operaciones con texto, estos métodos no satisfacen los requisitos de la aplicación.
Este modelo describe un método para soportar la búsqueda por palabras clave utilizando MongoDB para soportar la funcionalidad de búsqueda en la aplicación, utilizando palabras clave almacenadas en un arreglo en el mismo documento que el campo de texto. Combinado con un índice multiclave, este patrón puede servir para operaciones de búsqueda por palabra clave de una aplicación.
Patrón
Para agregar estructuras a su documento que respalden consultas basadas en palabras clave, cree un campo de arreglo en sus documentos y agregue las palabras clave como cadenas en el arreglo. Luego podrás crear un índice multi-llave en el arreglo y crear consultas que seleccionen valores del arreglo.
Ejemplo
Dada una colección de volúmenes de la librería para la que quieres proporcionar una búsqueda por temas. Para cada volumen, añade el arreglo topics, y añade tantas palabras clave como necesite cada volumen.
Para el volumen Moby-Dick es posible que tenga el siguiente documento:
{ title : "Moby-Dick" , author : "Herman Melville" , published : 1851 , ISBN : 0451526996 , topics : [ "whaling" , "allegory" , "revenge" , "American" , "novel" , "nautical" , "voyage" , "Cape Cod" ] }
Luego, creas un índice de varias claves en el arreglo topics:
db.volumes.createIndex( { topics: 1 } )
El índice multiclave crea entradas de índice separadas para cada palabra clave en el arreglo topics. Por ejemplo, el índice contiene una entrada para whaling y otra para allegory.
Luego se hace la query en función de los términos clave. Por ejemplo:
db.volumes.findOne( { topics : "voyage" }, { title: 1 } )
Nota
Un arreglo con un gran número de elementos, como uno con varios cientos o miles de palabras clave, implicará mayores costos de indexación en la inserción.
Limitaciones de los índices por palabras clave
MongoDB puede soportar búsquedas por palabra clave utilizando modelos de datos específicos e índices multi-clave; sin embargo, estos índices de palabra clave no son suficientes ni comparables a los productos de texto completo en los siguientes aspectos:
Stemming. Las consultas de palabras clave en MongoDB no pueden analizar palabras clave para palabras raíz o relacionadas.
Sinónimos. Las funcionalidades de búsqueda basadas en palabras clave deben proporcionar soporte para sinónimos o queries relacionadas en la capa de aplicación.
Clasificación. Las búsquedas de palabras clave descritas en este documento no proporcionan una forma de evaluar (o ponderar) los resultados.
Indexación asincrónica. MongoDB crea índices de manera sincrónica, lo que significa que los índices utilizados para índices de palabras clave están siempre actualizados y pueden operar en tiempo real. Sin embargo, los índices bulk asíncronos pueden ser más eficientes para ciertos tipos de contenido y cargas de trabajo.