$text no pipeline de agregação em implantações autogerenciadas
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
.
Restrições
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
.
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 Atlas Search
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.