Menu Docs

Página inicial do DocsDesenvolver aplicaçõesManual do MongoDB

Realizar uma pesquisa de texto (sistemas autogerenciados)

Observação

Esta página descreve os recursos de pesquisa de texto para sistemas autogerenciados (não Atlas). Para dados hospedados no MongoDB Atlas, o MongoDB oferece uma solução aprimorada de pesquisa de texto completo, oAtlas Search.

Para executar consultas de queries de texto em sistemas autogerenciados, você deve ter um índice de texto na sua collection. O MongoDB fornece índices de texto para dar suporte à pesquisa de queries no conteúdo da string. Os índices de texto podem incluir qualquer campo cujo valor seja uma string ou uma array de elementos da string. Uma collection só pode ter um índice de pesquisa de texto, mas esse índice pode abranger vários campos.

Consulte a seção Índices de texto para uma referência completa sobre índices de texto, incluindo comportamento, tokenização e propriedades.

Este exemplo demonstra como construir um índice de texto e usá-lo para encontrar "coffee shops", considerando apenas campos de texto.

Crie uma collection stores com os seguintes 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" }
]
)

Execute o seguinte em mongosh para permitir a pesquisa de texto sobre os campos name e description :

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

Você também pode pesquisar frases exatas colocando-as entre aspas duplas. Se a string $search incluir uma frase e termos individuais, a pesquisa de texto corresponderá apenas aos documentos que incluírem a frase.

Por exemplo, o seguinte exemplo encontrará todos os documentos que contêm "coffee shop":

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

Para obter mais informações, consulte Frases.

Para excluir uma palavra, você pode preceder um caractere "-". Por exemplo, para encontrar todas as lojas que contenham "java" ou "shop", mas não "coffee", use o seguinte:

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

O MongoDB retornará seus resultados em ordem sem classificação por padrão. No entanto, as pesquisas de queries de texto computarão uma pontuação de relevância para cada documento que especifica o quanto um documento corresponde à query.

Para classificar os resultados em ordem de pontuação de relevância, você deve projetar explicitamente o campo $meta textScore e classificá-lo:

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

A pesquisa de texto também está disponível no aggregation pipeline.

← Pesquisa de texto em sistemas autogerenciados