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
$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 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.