$search
$search
O estágio
$search
realiza uma Full Text Search no campo ou campos especificados. O campo ou campos devem ser cobertos por umíndicedo Atlas Search .
Sintaxe
Um estágio de pipeline do $search
tem a seguinte forma de protótipo:
{ $search: { "index": "<index-name>", "<operator-name>"|"<collector-name>": { <operator-specification>|<collector-specification> }, "highlight": { <highlight-options> }, "concurrent": true | false, "count": { <count-options> }, "searchAfter"|"searchBefore": "<encoded-token>", "scoreDetails": true| false, "sort": { <fields-to-sort>: 1 | -1 }, "returnStoredSource": true | false, "tracking": { <tracking-option> } } }
Campos
O estágio $search
recebe um documento com os seguintes campos:
Campo | Tipo | necessidade | Descrição |
---|---|---|---|
| objeto | Condicional | Nome do coletor para utilizar com a query. Você pode fornecer um documento que contenha as opções específicas do coletor como valor para esse campo. Isto ou |
| booleano | Opcional | Paralelize a procura entre segmentos em nós de pesquisa dedicados. Se você não tiver nós de pesquisa separados no seu cluster, a Pesquisa Atlas ignorará esta bandeira. Se omitido, o padrão é |
| objeto | Opcional | Documento que especifica as opções de contagem para recuperar uma contagem dos resultados. Para mais informações, consulte Resultados de contagem do Atlas Search. |
| objeto | Opcional | Documento que especifica as opções de destaque para exibir os termos de pesquisa em seu contexto original. |
| string | Opcional | Nome do índice do Atlas Search a ser usado. Se omitido, o padrão é Se você nomear seu índice Atlas Search não retorna resultados se você digitar incorretamente o nome do índice ou se o índice especificado ainda não existir no cluster. |
| objeto | Condicional | |
| booleano | Opcional | Sinalizador que especifica se uma pesquisa completa de documentos deve ser executada no banco de dados de backend ou se deseja retornar apenas campos de origem armazenados diretamente do Atlas Search. Se omitido, o padrão é |
| string | Opcional | Ponto de referência para recuperação de resultados. |
| string | Opcional | Ponto de referência para recuperação de resultados. |
| booleano | Opcional | Sinalizador que especifica se deseja recuperar um detalhamento detalhado da pontuação para os documentos nos resultados. Se omitido, o padrão é |
| objeto | Opcional | Documento que especifica os campos para classificar os resultados do Atlas Search em ordem crescente ou decrescente. Você pode classificar por data, número (valores inteiros, flutuantes e double) e valores de string. Para mais informações, consulte Classificar Resultados do Atlas Search. |
| objeto | Opcional | Documento que especifica a opção de rastreamento para recuperar informações analíticas sobre os termos de pesquisa. |
Comportamento
$search
deve ser o primeiro estágio de qualquer pipeline em que apareça. $search
não pode ser usado em:
um estágio de pipeline
$facet
Variável de agregação
$search
retorna somente os resultados da sua query. Os resultados de metadados da sua query $search
são salvos na variável de agregação $$SEARCH_META
. Você pode usar a variável $$SEARCH_META
para ver os resultados de metadados de sua query $search
.
A variável de agregação $$SEARCH_META
pode ser usada em qualquer lugar após um estágio $search
em qualquer pipeline, mas não pode ser usada após o estágio $lookup
ou $unionWith
em qualquer pipeline. A partir do MongoDB 6.0, a variável de agregação $$SEARCH_META
não pode ser usada em nenhum estágio subsequente após um estágio $searchMeta
.
Exemplo
Suponha o seguinte índice na coleção sample_mflix.movies
.
{ "mappings": { "dynamic": false, "fields": { "released": { "type": "date" } } } }
As seguintes pesquisas de query sobre filmes lançados perto de 01 de setembro de 2011 usando o estágio $search
. A consulta inclui um:
Etapa
$project
para excluir todos os campos nos documentos, excetotitle
ereleased
.$facet
estágio que produz um:docs
campo com uma array dos5
principais resultados de pesquisameta
campo com o valor de$$SEARCH_META
variável
db.movies.aggregate([ { "$search": { "near": { "path": "released", "origin": ISODate("2011-09-01T00:00:00.000+00:00"), "pivot": 7776000000 } } }, { $project: { "_id": 0, "title": 1, "released": 1 } }, { "$limit": 5 }, { "$facet": { "docs": [], "meta": [ {"$replaceWith": "$$SEARCH_META"}, {"$limit": 1} ] } } ])
{ "docs" : [ { "title" : "Submarino", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "Devil's Playground", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "Bag It", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "Dos", "released" : ISODate("2011-09-01T00:00:00Z") }, { "title" : "We Were Here", "released" : ISODate("2011-09-01T00:00:00Z") } ], "meta" : [ { "count" : { "lowerBound" : NumberLong(17373) } } ] }
Para saber mais sobre a variável $$SEARCH_META
e seu uso, consulte:
Solução de problemas
Se você estiver enfrentando problemas com suas queries do Atlas Search $search
, consulte Solução de problemas de erros do Atlas Search.