Make the MongoDB docs better! We value your opinion. Share your feedback for a chance to win $100.
Click here >
Docs Menu
Docs Home
/ /
Búsqueda de texto
/ / /

Realice una búsqueda de texto (implementaciones autogestionadas)

MongoDB ofrece una solución prémium de búsqueda de texto completo, MongoDB Atlas Search, para los datos alojados en MongoDB Atlas. Hay una capacidad de búsqueda de texto heredada disponible para los usuarios que gestionan por sí mismos las implementaciones de MongoDB.

Para ejecutar consultas de búsqueda de texto en implementaciones autogestionadas, debes 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.

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 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" }
]
)

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" } )

También puedes buscar frases exactas colocándolas entre comillas dobles. Si la string $search incluye una frase y términos individuales, la búsqueda de texto solo coincidirá con los documentos que incluyan la frase.

Por ejemplo, lo siguiente encontrará todos los documentos que contengan "cafetería":

db.stores.find( { $text: { $search: "\"coffee shop\"" } } )

Para obtener más información, consulte Frases.

Para excluir una palabra, puedes anteponer un carácter “-”. Por ejemplo, para encontrar todas las tiendas que contienen "java" o "shop" pero no "coffee", usa lo siguiente:

db.stores.find( { $text: { $search: "java shop -coffee" } } )

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 el pipeline de agregación.

Volver

Búsqueda de texto