En este capítulo, presentaremos la búsqueda de texto completo de MongoDB, la cual es diferente al operador "like" de SQL. La búsqueda de texto completo de MongoDB es más eficiente para buscar texto en comparación con la implementación de "like" en SQL.
Preparar datos de prueba
Inserta algunos registros en la colección de tiendas
db.stores.insert(
[
{ _id: 1, name: "Java Hut", description: "Café y pasteles" },
{ _id: 2, name: "Burger Buns", description: "Hamburguesas gourmet" },
{ _id: 3, name: "Coffee Shop", description: "Solo café" },
{ _id: 4, name: "Ropa Ropa Ropa", description: "Ropa de descuento" },
{ _id: 5, name: "Java Shopping", description: "Productos indonesios" }
]
)
Crear índice de texto
Para utilizar la capacidad de búsqueda de texto completo, debes crear un índice de texto. Ejemplo:
db.stores.createIndex( { name: "text", description: "text" } )
Explicación:
- Crear un índice de tipo texto para los campos de nombre y descripción.
Nota: Una colección solo permite un índice de texto, pero un índice de texto puede incluir varios campos.
Operador $text
Utiliza el operador $text para la búsqueda de texto.
Sintaxis:
{ $text: { $search: "palabra clave de búsqueda" } }
Ejemplo:
db.stores.find( { $text: { $search: "java café tienda" } } )
Explicación:
- Buscar documentos que contengan las palabras clave "café", "tienda" y "java" en los campos de nombre y descripción.
Resultado:
{ "_id" : 3, "name" : "Coffee Shop", "description" : "Solo café" }
{ "_id" : 1, "name" : "Java Hut", "description" : "Café y pasteles" }
{ "_id" : 5, "name" : "Java Shopping", "description" : "Productos indonesios" }
Búsqueda de frase
db.stores.find( { $text: { $search: "\"café tienda\"" } } )
Resultado
{ "_id" : 3, "name" : "Coffee Shop", "description" : "Solo café" }
Orden de relevancia
Por defecto, los resultados de una consulta $text no están ordenados. La consulta $text calcula una puntuación (textScore) para la relevancia de cada documento. Podemos usar esta puntuación para ordenar y mostrar documentos con mayor relevancia en la parte superior.
db.stores.find(
{ $text: { $search: "java café tienda" } },
{ score: { $meta: "textScore" } } // Declarar para devolver la puntuación de relevancia textScore
).sort( { score: { $meta: "textScore" } } ) // Especificar la clasificación usando textScore
Nota: La búsqueda de texto completo de MongoDB no proporciona un buen soporte para frases en chino.