Menu Docs

Página inicial do DocsIniciar e gerenciar o MongoDBMongoDB Atlas

frase

Nesta página

  • Definição
  • Sintaxe
  • Opções
  • Exemplos
  • Exemplo de frase única
  • Exemplo de múltiplas frases
  • Exemplo de slop
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.

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}

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:

  • boost: multiplique a pontuação do resultado pelo número fornecido.

  • constant: substitui a pontuação do resultado pelo número fornecido.

  • function: substitua a pontuação do resultado pela expressão fornecida.

Para obter informações sobre as opções de modificação da pontuação padrão, consulte Pontuar os documentos nos resultados.

Observação

Quando 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

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.

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, exceto title , e adicionar um campo chamado score.

Exemplo

1db.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 }

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, exceto title , e adicionar um campo chamado score.

1db.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 }

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

1db.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 }
← perto