Observação
O MongoDB oferece uma solução aprimorada de pesquisa de texto completo, MongoDB Search, e uma solução de pesquisa semântica, MongoDB Vector Search. Recomendamos usar os estágios $search, $searchMeta ou $vectorSearch em vez do operador $text.
No pipeline de agregação, você pode usar o operador de query $text no estágio $match.
Restrições
Para restrições gerais de operadores $text, consulte restrições de operadores.
Além disso, as queries do $text no pipeline de agregação têm as seguintes restrições:
O estágio
$matchque inclui um$textdeve ser o primeiro estágio no pipeline.Um operador
$textsó pode ocorrer uma vez no estágio.A expressão do operador
$textnão pode aparecer em expressões$orou$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$metano estágio$sort.
Pontuação de texto
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.
Exemplos
Os seguintes exemplos assumem uma coleção articles com um índice de texto no campo subject:
db.articles.createIndex( { subject: "text" } )
Calcule o total de visualizações de artigos que contêm uma palavra
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" } } } ] )
Resultados de retorno classificados por pontuação de pesquisa de texto
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.
Correspondência na pontuação do texto
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 } } } ] )
Especificar um idioma para pesquisa de texto
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" } } } ] )
$search Estágio na pesquisa do MongoDB
MongoDB Search fornece o estágio de agregação $search para realizar pesquisas de texto completo em suas coleções.