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 "synonyms": "<synonyms-mapping-name>" 10 } 11 } 12 }
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. 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:
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 |
Exemplos
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
.
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 ])
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 ]
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 ])
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 ]
Exemplo de slop
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
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 ])
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 ]
Exemplo de sinônimo
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
ouvehicle
, que são definidos como sinônimosequivalent
na coleçãosynonymous_terms
,race
,contest
ourally
, que são definidos como sinônimosexplicit
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.