Página inicial do Docs → Iniciar e gerenciar o MongoDB → MongoDB Atlas
frase
Nesta página
Definição
phrase
O operador
phrase
realiza a pesquisa de documentos contendo uma sequência ordenada de termos usando o analisador especificado na configuração do índice. Se nenhum analisador for especificado, o analisador padrão será usado.
Sintaxe
phrase
tem a seguinte sintaxe:
1 { 2 $search: { 3 "index": <index name>, // optional, defaults to "default" 4 "phrase": { 5 "query": "<search-string>", 6 "path": "<field-to-search>", 7 "score": <options>, 8 "slop": <distance-number> 9 } 10 } 11 }
Opções
phrase
usa os seguintes termos para construir uma consulta:
Campo | Tipo | Descrição | necessidade |
---|---|---|---|
query | cadeia de caracteres ou matriz de cadeias de caracteres | String ou strings para pesquisar. | sim |
path | cadeia de caracteres ou matriz de cadeias de caracteres | Campos indexados a serem pesquisados. Você também pode especificar um caminho curinga para pesquisar. Consulte construção de caminho. | sim |
slop | inteiro | Distância permitida entre palavras na frase query . Um valor menor permite uma distância posicional menor entre as palavras, e um valor maior permite uma maior reorganização das palavras e uma distância maior entre as palavras para satisfazer a query. O padrão é 0 , o que significa que as palavras devem estar exatamente na mesma posição que a query para serem consideradas correspondentes. Correspondências exatas recebem uma pontuação mais alta. | Não |
score | objeto | Pontuação a ser atribuída aos resultados de pesquisa correspondentes. Você pode modificar a pontuação padrão usando as seguintes opções:
Para obter informações sobre as opções de modificação da pontuação padrão, consulte Pontuar os documentos nos resultados. ObservaçãoQuando você faz query de valores em arrays, o Atlas Search não altera a pontuação dos resultados correspondentes com base no número de valores dentro da array que correspondeu à query. A pontuação seria igual a uma única correspondência, independentemente do número de correspondências dentro de uma array. | Não |
Exemplos
Os exemplos abaixo utilizam a collection movies
no banco de dados sample_mflix
. Se você tiver o conjunto de dados de amostra em seu cluster, poderá criar o índice no campo title
e executar as queries de exemplo em seu cluster.
Dica
Se você já carregou o conjunto de dados de amostra, siga o tutorial Iniciar com Atlas Search para criar uma definição de índice e executar queries de Atlas Search.
Exemplo de frase única
O exemplo do Atlas Search a seguir executa uma pesquisa básica do campo title
para a string da query new york
. Não há slop
na query e, portanto, o valor de slop
tem como padrão 0
, o que significa que a posição das palavras deve corresponder exatamente à string da query para ser incluída nos resultados. A consulta também inclui:
$limit
para limitar a saída a 10 resultados.Estágio
$project
para excluir todos os campos, excetotitle
, e adicionar um campo chamadoscore
.
Exemplo
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "phrase": { 5 "path": "title", 6 "query": "new york" 7 } 8 } 9 }, 10 { $limit: 10 }, 11 { 12 $project: { 13 "_id": 0, 14 "title": 1, 15 score: { $meta: "searchScore" } 16 } 17 } 18 ])
A query acima retorna os seguintes resultados:
1 { "title" : "New York, New York", "score" : 6.75715970993042 } 2 { "title" : "New York", "score" : 6.231321334838867 } 3 { "title" : "New York Stories", "score" : 5.358973026275635 } 4 { "title" : "New York Minute", "score" : 5.358973026275635 } 5 { "title" : "Synecdoche, New York", "score" : 5.358973026275635 } 6 { "title" : "New York Doll", "score" : 5.358973026275635 } 7 { "title" : "Little New York", "score" : 5.358973026275635 } 8 { "title" : "Escape from New York", "score" : 4.700878143310547 } 9 { "title" : "King of New York", "score" : 4.700878143310547 } 10 { "title" : "Naked in New York", "score" : 4.700878143310547 }
Exemplo de múltiplas frases
O exemplo do Atlas Search a seguir executa uma pesquisa básica do campo title
para as strings da query the man
e the
moon
. Não há slop
na query e, portanto, o valor de slop
tem como padrão 0
, o que significa que a posição das palavras deve corresponder exatamente à string da query para ser incluída nos resultados. A consulta também inclui:
Exemplo
$limit
estágio para limitar a saída a 10.Estágio
$project
para excluir todos os campos, excetotitle
, e adicionar um campo chamadoscore
.
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "phrase": { 5 "path": "title", 6 "query": ["the man", "the moon"] 7 } 8 } 9 }, 10 { $limit: 10 }, 11 { 12 $project: { 13 "_id": 0, 14 "title": 1, 15 score: { $meta: "searchScore" } 16 } 17 } 18 ])
A query acima retorna os seguintes resultados:
1 { "title" : "The Man in the Moon", "score" : 4.500046730041504 } 2 { "title" : "Shoot the Moon", "score" : 3.278003215789795 } 3 { "title" : "Kick the Moon", "score" : 3.278003215789795 } 4 { "title" : "The Man", "score" : 2.8860299587249756 } 5 { "title" : "The Moon and Sixpence", "score" : 2.8754563331604004 } 6 { "title" : "The Moon Is Blue", "score" : 2.8754563331604004 } 7 { "title" : "Racing with the Moon", "score" : 2.8754563331604004 } 8 { "title" : "Mountains of the Moon", "score" : 2.8754563331604004 } 9 { "title" : "Man on the Moon", "score" : 2.8754563331604004 } 10 { "title" : "Castaway on the Moon", "score" : 2.8754563331604004 }
Exemplo de slop
O exemplo do Atlas Search a seguir executa uma pesquisa do campo title
para a string da query men women
. O valor slop
de 5
no query
permite uma movimentação maior das palavras e da distância entre as palavras men
e women
. A query inclui um estágio do $project
para:
Excluir todos os campos, exceto
title
Adicione um campo chamado
score
Exemplo
1 db.movies.aggregate([ 2 { 3 "$search": { 4 "phrase": { 5 "path": "title", 6 "query": "men women", 7 "slop": 5 8 } 9 } 10 }, 11 { 12 $project: { 13 "_id": 0, 14 "title": 1, 15 score: { $meta: "searchScore" } 16 } 17 } 18 ])
A query acima retorna os seguintes resultados:
{ "title" : "Men Without Women", "score" : 3.39743709564209 } { "title" : "Men Vs Women", "score" : 3.39743709564209 } { "title" : "Good Men, Good Women", "score" : 2.878715753555298 } { "title" : "The War Between Men and Women", "score" : 2.205303192138672 } { "title" : "Women Without Men", "score" : 1.983487844467163 } { "title" : "Women Vs Men", "score" : 1.983487844467163 }