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

$text Consultas

Nota

MongoDB ofrece una solución mejorada de búsqueda de texto completo, MongoDB Search, y la solución de búsqueda semántica, MongoDB Vector Search. Recomendamos utilizar el $search, $searchMeta, o $vectorSearch etapas, en lugar del operador $text.

Para ejecutar $text consultas, debe tener un índice de texto en su colección. MongoDB proporciona índices de texto para apoyar $text queries sobre string content. Los índices de texto pueden incluir cualquier campo cuyo valor sea un string o un arreglo de elementos string. Una colección solo puede tener un índice de texto, pero ese índice puede abarcar 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.

Cree 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 consultas de $text sobre los campos name y description:

db.stores.createIndex( { name: "text", description: "text" } )

Puedes buscar cadenas exactas de varias palabras envolviéndolas con comillas dobles. Las $text queries solo coinciden con documentos que incluyen toda la string.

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

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

Esta query devuelve los siguientes documentos:

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

Salvo que se especifique, la búsqueda exacta de string no distingue entre mayúsculas y minúsculas ni entre diacríticos. Por ejemplo, la siguiente query devuelve los mismos resultados que la query anterior:

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

La búsqueda de string exactas no admite la derivación o las palabras vacías.

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

En esta página