Menu Docs
Página inicial do Docs
/
MongoDB Atlas
/ / / /

frase

Nesta página

  • Definição
  • Sintaxe
  • Opções
  • Exemplos
  • Exemplo de frase única
  • Exemplo de múltiplas frases
  • Exemplo de slop
  • Exemplo de sinônimo
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 "synonyms": "<synonyms-mapping-name>"
10 }
11 }
12}

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. Para mais informações, consulte Criar um caminho de query.
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.
no
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.

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.

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

no
synonyms
string

Obrigatório para executar queries usando sinônimos.

Nome da definição de mapeamento de sinônimos na definição do índice. O valor não pode ser uma string vazia.

O tempo que o Atlas Search leva para executar queries que usam mapeamentos de sinônimos depende do número e do tamanho dos documentos na collection de fontes de sinônimos.

Por exemplo, uma consulta que usa um mapeamento de sinônimos com base em muito poucos documentos de sinônimos pode ser mais rápida do que uma consulta que usa um mapeamento de sinônimos com base em muitos documentos de sinônimos.

Opcional

Os exemplos nesta página usam a coleção movies no banco de dados sample_mflix. Depois de carregar o conjunto de dados de amostra em seu cluster, crie o índice do Atlas Search com mapeamentos dinâmicos e execute as queries de exemplo em seu cluster. Para testar os exemplos de sinônimos, você também deve adicionar a coleção synonymous_terms ao banco de dados sample_mflix e, em seguida, definir o índice com a coleção de mapeamento synonyms.

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])
1[
2 { title: 'New York, New York', score: 6.786321640014648 }
3 { title: 'New York', score: 6.258549213409424 }
4 { title: 'New York Stories', score: 5.3813982009887695 }
5 { title: 'New York Minute', score: 5.3813982009887695 }
6 { title: 'Synecdoche, New York', score: 5.3813982009887695 }
7 { title: 'New York Doll', score: 5.3813982009887695 }
8 { title: 'Little New York', score: 5.3813982009887695 }
9 { title: 'Escape from New York', score: 4.719893455505371 }
10 { title: 'Naked in New York', score: 4.719893455505371 }
11 { title: 'Autumn in New York', score: 4.719893455505371 }
12]

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])
1[
2 { title: 'The Man in the Moon', score: 4.4830474853515625 },
3 { title: 'Shoot the Moon', score: 3.252699851989746 },
4 { title: 'Kick the Moon', score: 3.252699851989746 },
5 { title: 'The Man', score: 2.8923356533050537 },
6 { title: 'The Moon and Sixpence', score: 2.8528637886047363 },
7 { title: 'The Moon Is Blue', score: 2.8528637886047363 },
8 { title: 'Racing with the Moon', score: 2.8528637886047363 },
9 { title: 'Mountains of the Moon', score: 2.8528637886047363 },
10 { title: 'Man on the Moon', score: 2.8528637886047363 },
11 { title: 'Castaway on the Moon', score: 2.8528637886047363 }
12]

O exemplo do Atlas Search abaixo executa uma pesquisa do campo title para a string de 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 de $project para:

  • Excluir todos os campos, exceto title

  • Adicione um campo chamado score

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])
1[
2 { title: 'Men Without Women', score: 3.367523193359375 },
3 { title: 'Men Vs Women', score: 3.367523193359375 },
4 { title: 'Good Men, Good Women', score: 2.8529787063598633 },
5 { title: 'The War Between Men and Women', score: 2.1851978302001953 },
6 { title: 'Women Without Men', score: 1.9656763076782227 },
7 { title: 'Women Vs Men', score: 1.9656763076782227 }
8]

As queries a seguir pesquisam o campo plot na coleção movies para os termos na string de query fornecida. O Atlas Search retorna resultados com base no tipo de mapeamento na coleção de origem de sinônimos, synonymous_terms, especificado na definição de mapeamento de sinônimos do índice para a coleção sample_mflix.movies.

A consulta a seguir pesquisa a frase automobile race em qualquer lugar no campo plot com uma distância de até 5 entre os termos.

db.movies.aggregate([
{
$search: {
"phrase": {
"path": "plot",
"query": "automobile race",
"slop": 5,
"synonyms": "my_synonyms"
}
}
},
{
"$limit": 5
},
{
$project: {
"_id": 0,
"plot": 1,
"title": 1,
score: { $meta: "searchScore" }
}
}
])
[
{
plot: 'When a popular daredevil proposes an automobile race across three continents, his arch rival vows to beat him, while an ambitious female reporter has her own plans for victory.',
title: 'The Great Race',
score: 29.569732666015625
},
{
plot: 'A wide variety of eccentric competitors participate in a wild and illegal cross-country car race.',
title: 'The Cannonball Run',
score: 25.50379180908203
},
{
plot: 'A mechanic takes his family to a car race and a series of events occur which brings problems, betrayals, violence and the unexpected death of an elderly person.',
title: 'National Mechanics',
score: 21.538257598876953
},
{
plot: "It's time for the annual London to Brighton antique car rally, and Alan McKim and Ambrose Claverhouse are not going to let their friendship stop them from trying to humiliate each other. ...",
title: 'Genevieve',
score: 20.19266128540039
},
{
plot: "A naive drifter runs away from his army father in hopes of making it on the car racing circuit. In Las Vegas, he meets a young scam artist, who develops a crush on him. He is then ...",
title: 'Speedway Junky',
score: 18.639965057373047
}
]

Os documentos nos resultados contêm os seguintes termos no campo plot com uma distância de 5 entre os termos:

  • automobile, car ou vehicle, que são definidos como sinônimos equivalent na coleção synonymous_terms,

  • race, contest ou rally, que são definidos como sinônimos explicit na coleção sy``synonymous_terms``,

O Atlas Search retorna resultados semelhantes para uma pesquisa por car race ou vehicle race porque configuramos automobile, car, e vehicle como equivalent sinônimos. No entanto, os resultados de automobile contest não incluiriam documentos com race ou rally e os resultados de automobile rally não incluiriam documentos com race ou contest porque não configuramos contest ou rally para serem sinônimos de nenhum termo.

Voltar

perto