Docs Menu
Docs Home
/
Manual de base de datos
/

Búsqueda de texto en implementaciones autogestionadas

Nota

Esta página describe las funciones de consulta de texto para implementaciones autogestionadas (no Atlas). Para los datos alojados en MongoDB Atlas, MongoDB ofrece una solución mejorada de consulta de texto completo, Atlas Search, y una solución de búsqueda vectorial, Atlas Vector Search.

Para ejecutar consultas de búsqueda de texto en implementaciones autoadministradas, debe tener un Índice de texto en su colección. MongoDB proporciona índices de texto para realizar búsquedas de texto en cadenas. Los índices de texto pueden incluir cualquier campo cuyo valor sea una cadena o un array de elementos de cadena. Una colección solo puede tener un índice de búsqueda de texto, pero este puede abarcar varios campos.

Consulte la sección Índices de texto en implementaciones autoadministradas para obtener una referencia completa sobre los índices de texto, incluido 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" },
{ _id: 6, name: "NYC_Coffee Shop", description: "local NYC coffee" }
]
)

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

Puede buscar cadenas de varias palabras entre comillas dobles. La búsqueda de texto solo encuentra documentos que incluyan la cadena completa.

Por ejemplo, la siguiente consulta encuentra todos los documentos que contienen la cadena "cafetería":

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

Esta consulta devuelve los siguientes documentos:

[
{ _id: 3, name: 'Coffee Shop', description: 'Just coffee' },
{ _id: 6, name: 'NYC_Coffee Shop', description: 'local NYC coffee' }
]

A menos que se especifique, la búsqueda de cadenas exactas no distingue entre mayúsculas y minúsculas ni diacríticos. Por ejemplo, la siguiente consulta devuelve los mismos resultados que la anterior:

db.stores.find( { $text: { $search: "\"COFFEé SHOP\"" } } )

La búsqueda de cadenas exactas no maneja palabras derivadas ni palabras vacías.

Para excluir una palabra, puede anteponer el carácter "-". Por ejemplo, para buscar todas las tiendas que contengan "java" o "tienda", pero no "café", utilice lo siguiente:

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

MongoDB devuelve sus resultados sin ordenar por defecto. Sin embargo, las consultas $text calculan una puntuación de relevancia para cada documento que especifica su grado de coincidencia con la consulta.

Para ordenar los resultados según el puntaje de relevancia, debe proyectar explícitamente el $meta textScore campo y ordenar según él:

db.stores.find(
{ $text: { $search: "java coffee shop" } },
{ score: { $meta: "textScore" } }
).sort( { score: { $meta: "textScore" } } )

$text También está disponible en la canalización de agregación.

Volver

Cliente OpenSSL

En esta página