Menu Docs
Página inicial do Docs
/
Manual do MongoDB
/ /

$text no pipeline de agregação em implantações autogerenciadas

Nesta página

  • Restrições
  • Pontuação de texto
  • Exemplos
  • $search Estágio Atlas Search

O MongoDB oferece uma solução premium de pesquisa de texto completo, MongoDB Atlas Search, para dados hospedados no MongoDB Atlas. Um recurso de pesquisa de texto legado está disponível para usuários que gerenciam MongoDB autogerenciados.

No pipeline de agregação, a pesquisa de texto está disponível por meio do uso do operador de query $text na etapa $match.

Para restrições gerais de operadores $text, consulte restrições de operadores.

Além disso, a pesquisa de texto no aggregation pipeline tem as seguintes restrições:

  • O estágio $match que inclui um $text deve ser o primeiro estágio no pipeline.

  • Um operador $text só pode ocorrer uma vez no estágio.

  • A expressão do operador $text não pode aparecer em expressões $or ou $not.

  • $text, por padrão, não retorna os documentos correspondentes na ordem das pontuações correspondentes. Para classificar por pontuação decrescente, use a expressão de agregação $meta no estágio $sort.

O operador $text atribui uma pontuação a cada documento de resultado. A pontuação representa a relevância de um documento para uma determinada consulta. A pontuação pode ser parte de uma especificação de pipeline $sort, e parte da expressão de projeção. A expressão { $meta: "textScore" } apresenta informações sobre o processamento da operação $text. Consulte $meta para ver detalhes sobre como acessar a pontuação para projeção ou classificação.

Os metadados estão disponíveis somente após o estágio $match que inclui a operação $text.

Os seguintes exemplos assumem uma coleção articles com um índice de texto no campo subject:

db.articles.createIndex( { subject: "text" } )

A seguinte agregação pesquisa o termo cake na etapa $match e calcula o total de views para os documentos correspondentes na etapa $group.

db.articles.aggregate(
[
{ $match: { $text: { $search: "cake" } } },
{ $group: { _id: null, views: { $sum: "$views" } } }
]
)

Para classificar pela pontuação da pesquisa de texto, inclua uma expressão {$meta: "textScore"} no estágio $sort. O exemplo a seguir corresponde ao termo cake ou tea, classifica pelo textScore em ordem decrescente e retorna somente o campo title no conjunto de resultados.

db.articles.aggregate(
[
{ $match: { $text: { $search: "cake tea" } } },
{ $sort: { score: { $meta: "textScore" } } },
{ $project: { title: 1, _id: 0 } }
]
)

Os metadados definidos determinam a ordem de classificação. Por exemplo, os metadados "textScore" são classificados em ordem decrescente. Consulte $meta para obter mais informações sobre metadados, bem como um exemplo de substituição da ordem de classificação padrão dos metadados.

Os metadados "textScore" estão disponíveis para projeções, ordenações e condições subsequentes ao estágio $match que inclui a operação $text.

O exemplo a seguir corresponde ao termo cake ou tea, projeta os campos title e score e retorna somente os documentos com score maior que 1.0.

db.articles.aggregate(
[
{ $match: { $text: { $search: "cake tea" } } },
{ $project: { title: 1, _id: 0, score: { $meta: "textScore" } } },
{ $match: { score: { $gt: 1.0 } } }
]
)

A agregação a seguir procura, em espanhol, documentos que contêm o termo saber mas não o termo claro no estágio $match e calcula o views total para os documentos correspondentes no estágio $group.

db.articles.aggregate(
[
{ $match: { $text: { $search: "saber -claro", $language: "es" } } },
{ $group: { _id: null, views: { $sum: "$views" } } }
]
)

Para dados hospedados no MongoDB Atlas, o Atlas Atlas Search fornece o estágio de agregação $search para realizar Full Text Searches em suas coleções.

Voltar

$text