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

Modificar a Pontuação

Nesta página

  • boost
  • Campos
  • Exemplos
  • constant
  • Exemplos
  • embedded
  • Campos
  • Exemplos
  • function
  • Expressões
  • Exemplos

As seguintes opções de modificação de pontuação estão disponíveis para todos os operadores. Para obter detalhes e exemplos, clique em qualquer uma das seguintes opções:

A opção boost multiplica a pontuação-base de um resultado por um determinado número ou pelo valor de um campo numérico nos documentos. Por exemplo, você pode usar o boost para aumentar a importância de determinados documentos correspondentes no resultado.

Observação

  • Você não pode usar as opções boost e constant juntas.

  • A opção boost com path é a mesma que multiplicar utilizando a opção function com uma expressão de caminho.

A opção boost tem os seguintes campos:

Campo
Tipo
necessidade
Descrição
value
flutuar
Condicional
Número pelo qual multiplicar a pontuação base padrão. O valor deve ser um número positivo. value ou path é exigido, mas você não pode especificar ambos.
path
string
Condicional
Nome do campo numérico pelo qual multiplicar a pontuação-base padrão. path ou value é exigido, mas você não pode especificar ambos.
undefined
flutuar
Opcional
Valor numérico a ser substituído por path se o campo numérico especificado por meio do path não for encontrado nos documentos. Se omitido, o padrão é 0. Você pode especificar isso somente se especificar path.

Os exemplos seguintes utilizam a coleção movies no banco de dados sample_mflix . Se você tiver o conjunto dedados de amostra do no seu cluster, você poderá criar o índice do Atlas Search default e executar as queries de exemplo no seu cluster.

As queries compostas de amostra demonstram como aumentar a importância de um critério de pesquisa em detrimento de outro. As queries incluem um estágio $project para excluir todos os campos, exceto title e score.

No exemplo abaixo, o operador composto utiliza um operador de texto para pesquisar o termo Helsinki nos campos plot e title. A query para o campo title utiliza score com a opção boost para multiplicar os resultados de pontuação por 3, conforme especificado no campo value.

1db.movies.aggregate([
2 {
3 "$search": {
4 "compound": {
5 "should": [{
6 "text": {
7 "query": "Helsinki",
8 "path": "plot"
9 }
10 },
11 {
12 "text": {
13 "query": "Helsinki",
14 "path": "title",
15 "score": { "boost": { "value": 3 } }
16 }
17 }]
18 }
19 }
20 },
21 {
22 "$limit": 5
23 },
24 {
25 "$project": {
26 "_id": 0,
27 "title": 1,
28 "plot": 1,
29 "score": { "$meta": "searchScore" }
30 }
31 }
32])

Essa query retorna os seguintes resultados, nos quais a pontuação para documentos em que o title corresponde ao termo de consulta é multiplicada por 3 de seu valor base:

[
{
plot: 'Epic tale about two generations of men in a wealthy Finnish family, spanning from the 1960s all the way through the early 1990s. The father has achieved his position as director of the ...',
title: 'Kites Over Helsinki',
score: 12.2470121383667
},
{
plot: 'Alex is Finlander married to an Italian who works as a taxi driver in Berlin. One night in his taxi come two men with a briefcase full of money. Unluckily for Alex, they are being chased by...',
title: 'Helsinki-Naples All Night Long',
score: 9.56808090209961
},
{
plot: 'The recession hits a couple in Helsinki.',
title: 'Drifting Clouds',
score: 4.5660295486450195
},
{
plot: 'Two teenagers from Helsinki are sent on a mission by their drug dealer.',
title: 'Sairaan kaunis maailma',
score: 4.041563034057617
},
{
plot: 'A murderer tries to leave his criminal past in East Helsinki and make a new life for his family',
title: 'Bad Luck Love',
score: 3.6251673698425293
}
]

No exemplo a seguir, o operador composto utiliza um operador de texto para pesquisar o termo Helsinki nos campos plot e title . A consulta ao campo title usa score com a opção boost para multiplicar os resultados da pontuação pelo campo numérico imdb.rating em path. Se o campo numérico não for encontrado no path especificado, o operador multiplicará a pontuação dos documentos por 3.

1db.movies.aggregate([
2 {
3 "$search": {
4 "compound": {
5 "should": [{
6 "text": {
7 "query": "Helsinki",
8 "path": "plot"
9 }
10 },
11 {
12 "text": {
13 "query": "Helsinki",
14 "path": "title",
15 "score": {
16 "boost": {
17 "path": "imdb.rating",
18 "undefined": 3
19 }
20 }
21 }
22 }]
23 }
24 }
25 },
26 {
27 "$limit": 5
28 },
29 {
30 "$project": {
31 "_id": 0,
32 "title": 1,
33 "plot": 1,
34 "score": { "$meta": "searchScore" }
35 }
36 }
37])

Essa query retorna os seguintes resultados, nos quais a pontuação para documentos em que o campo title corresponde ao termo de query é multiplicada de seu valor base pelo valor do campo numérico imdb.rating ou 3, se o campo não for encontrado nos documentos:

[
{
plot: 'Epic tale about two generations of men in a wealthy Finnish family, spanning from the 1960s all the way through the early 1990s. The father has achieved his position as director of the ...',
title: 'Kites Over Helsinki',
score: 24.902257919311523
},
{
plot: 'Alex is Finlander married to an Italian who works as a taxi driver in Berlin. One night in his taxi come two men with a briefcase full of money. Unluckily for Alex, they are being chased by...',
title: 'Helsinki-Naples All Night Long',
score: 20.411907196044922
},
{
plot: 'The recession hits a couple in Helsinki.',
title: 'Drifting Clouds',
score: 4.5660295486450195
},
{
plot: 'Two teenagers from Helsinki are sent on a mission by their drug dealer.',
title: 'Sairaan kaunis maailma',
score: 4.041563034057617
},
{
plot: 'A murderer tries to leave his criminal past in East Helsinki and make a new life for his family',
title: 'Bad Luck Love',
score: 3.6251673698425293
}
]

A opção constant substitui a pontuação base por um número especificado.

Observação

Você não deve usar as opções constant e boost juntas.

O exemplo seguinte utiliza o índice padrão na collection sample_mflix.movies para fazer a query dos campos plot e title utilizando o operador composto. Na query, o operador text usa score com a opção constant para substituir todos os resultados da pontuação por 5 nos resultados que corresponderem à query somente do campo title.

1db.movies.aggregate([
2 {
3 "$search": {
4 "compound": {
5 "should": [{
6 "text": {
7 "query": "tower",
8 "path": "plot"
9 }
10 },
11 {
12 "text": {
13 "query": "tower",
14 "path": "title",
15 "score": { "constant": { "value": 5 } }
16 }
17 }]
18 }
19 }
20 },
21 {
22 "$limit": 5
23 },
24 {
25 "$project": {
26 "_id": 0,
27 "title": 1,
28 "plot": 1,
29 "score": { "$meta": "searchScore" }
30 }
31 }
32])

A query acima retorna os seguintes resultados, nos quais a pontuação para documentos que correspondem à query no campo title é substituída somente pelo valor constant especificado:

1[
2 {
3 plot: 'Several months after witnessing a murder, residents of Tower Block 31 find themselves being picked off by a sniper, pitting those lucky enough to be alive into a battle for survival.',
4 title: 'Tower Block',
5 score: 8.15460205078125
6 },
7 {
8 plot: "When a group of hard-working guys find out they've fallen victim to their wealthy employer's Ponzi scheme, they conspire to rob his high-rise residence.",
9 title: 'Tower Heist',
10 score: 5
11 },
12 {
13 plot: 'Toru Kojima and his friend Koji are young student boys with one thing in common - they both love to date older women. Koji is a playboy with several women, young and older, whereas Toru is a romantic with his heart set on on certain lady.',
14 title: 'Tokyo Tower',
15 score: 5
16 },
17 {
18 plot: 'A middle-aged mental patient suffering from a split personality travels to Italy where his two personalities set off all kinds of confusing developments.',
19 title: 'The Leaning Tower',
20 score: 5
21 },
22 {
23 plot: 'A documentary that questions the cost -- and value -- of higher education in the United States.',
24 title: 'Ivory Tower',
25 score: 5
26 }
27]

Observação

Você pode usar essa opção somente com o operador embeddedDocument.

A opção embedded permite a você configurar como:

  • Agregar as pontuações de vários documentos incorporados correspondentes.

  • Modifique a pontuação de um operador embeddedDocument depois de agregar as pontuações de documentos incorporados correspondentes.

Observação

A opção de índice embeddedDocuments do Atlas Search, o operador embeddedDocument e a opção de pontuação do embedded estão na pré-visualização. Quando um índice do Atlas Search em um conjunto de réplicas ou shard do MongoDB atinge o limite de dois bilhões de documentos do Lucene, o Atlas Search não indexa novos documentos nem aplica atualizações a documentos existentes para esse índice. Uma solução para acomodar essa limitação será implementada quando esse recurso estiver geralmente disponível. Para solucionar qualquer problema relacionado ao uso dessa funcionalidade, entre em contato com o Suporte.

A opção embedded tem os seguintes campos:

Campo
Tipo
necessidade
Descrição
aggregate
string
Opcional

Configura como combinar pontuações de documentos incorporados correspondentes. O valor deve ser uma das seguintes estratégias de agregação:

  • sum - (Padrão) Soma a pontuação de todos os documentos incorporados correspondentes.

  • maximum - Escolhe a maior pontuação de todos os documentos incorporados correspondentes.

  • minimum - Escolha a pontuação menos alta de todos os documentos incorporados correspondentes.

  • mean - Escolhe a pontuação média (média aritmética) de todos os documentos incorporados correspondentes. O Atlas Search inclui pontuações de documentos incorporados correspondentes apenas ao calcular a média. O Atlas Search não conta os documentos incorporados que não satisfazem os predicados da query como documentos com pontuação zero.

Se omitido, este campo é padronizado como sum.

outerScore
Opcional
Especifica a modificação de pontuação a ser aplicada após a aplicação da estratégia de aggregation.

A consulta de exemplo a seguir usa um índice chamado default na coleção sample_analytics.transactions. O índice configura um tipo embeddedDocuments em documentos na matriz transactions e tipo string para campos transactions.symbol e transactions.transaction_code.

Exemplo

Índice de amostra
{
"mappings": {
"dynamic": true,
"fields": {
"transactions": {
"dynamic": true,
"fields": {
"symbol": {
"type": "string"
},
"transaction_code": {
"type": "string"
}
},
"type": "embeddedDocuments"
}
}
}
}

A consulta de exemplo no campo transactions, que contém uma matriz de documentos, inclui um estágio $limit para limitar a saída a 10 resultados e um estágio $project para:

  • Excluir todos os campos, exceto account_id e transaction_count.

  • Adicione um campo denominado score que aplica uma estratégia de aggregation e uma modificação de pontuação adicional.

    Observação

    Você pode usar dentro function da score opção do No entanto, para operator expressões de pontuação de função que a path opção , o campo numérico que você especifica como path para a deve estar dentro do EmbeddedDocument path. Por exemplo, no exemplo de consulta a seguir, o campo transactions.amount especificado na score opção do compound operador na linha 24 está dentro do embeddedDocument caminho operador transactions na linha 4.

A query procura contas que compraram AMD e multiplica a maior compra única de AMD (por número de partes) pelo valor log1p do número de transações que a conta fez no período. Ela classifica as contas com base em:

  • Número de AMD comprados em uma única transação

  • Número de transações no último período

1db.transactions.aggregate({
2 "$search": {
3 "embeddedDocument": {
4 "path": "transactions",
5 "operator": {
6 "compound": {
7 "must": [
8 {
9 "text": {
10 "path": "transactions.symbol",
11 "query": "amd"
12 }
13 },
14 {
15 "text": {
16 "path": "transactions.transaction_code",
17 "query": "buy"
18 }
19 }
20 ],
21 "score": {
22 "function": {
23 "path": {
24 "value": "transactions.amount",
25 "undefined": 1.0
26 }
27 }
28 }
29 }
30 },
31 "score": {
32 "embedded": {
33 "aggregate": "maximum",
34 "outerScore": {
35 "function": {
36 "multiply": [
37 {
38 "log1p": {
39 "path": {
40 "value": "transaction_count"
41 }
42 }
43 },
44 {
45 "score": "relevance"
46 }
47 ]
48 }
49 }
50 }
51 }
52 }
53 }
54},
55{ "$limit": 10 },
56{
57 "$project": {
58 "_id": 0,
59 "account_id": 1,
60 "transaction_count": 1,
61 "score": { $meta: "searchScore" }
62 }
63})

O Atlas Search confere uma alta classificação às contas que fizeram muitas transações no último período e compraram muitas AMD em uma única transação.

1[
2 { account_id: 467651, transaction_count: 99, score: 19982 },
3 { account_id: 271554, transaction_count: 96, score: 19851.822265625 },
4 { account_id: 71148, transaction_count: 99, score: 19840 },
5 { account_id: 408143, transaction_count: 100, score: 19836.76953125 },
6 { account_id: 977774, transaction_count: 98, score: 19822.64453125 },
7 { account_id: 187107, transaction_count: 96, score: 19754.470703125 },
8 { account_id: 492843, transaction_count: 97, score: 19744.998046875 },
9 { account_id: 373169, transaction_count: 93, score: 19553.697265625 },
10 { account_id: 249078, transaction_count: 89, score: 19436.896484375 },
11 { account_id: 77690, transaction_count: 90, score: 19418.017578125 }
12]

A opção function permite alterar a pontuação final do documento usando um campo numérico. Você pode especificar o campo numérico para calcular a pontuação final por meio de uma expressão. Se o resultado final da pontuação de função for menor que 0, o Atlas Search substituirá a pontuação por 0.

Observação

Você pode usar function dentro da opção score do operator do operador embeddedDocument. Entretanto, para expressões de pontuação de função que exigem a opção path, o campo numérico que você especificar como path para a expressão deverá estar dentro do path do operador embeddedDocument.

Use as seguintes expressões com a opção function para alterar a pontuação final do documento:

  • Expressões aritméticas, que adicionam ou multiplicam uma série de números.

  • Expressões constantes, que permitem um número constante na pontuação de função.

  • Expressões de decaimento gaussiano, que diminuem ou reduzem as pontuações multiplicando-se a uma taxa especificada.

  • Expressões de caminho, que incorporam um valor de campo numérico indexado em uma pontuação de função.

  • Expressões de pontuação, que retornam a pontuação de relevância atribuída pelo Atlas Search.

  • Expressões unárias, que são expressões que tomam um único argumento. No Atlas Search, você pode calcular o log10(x) ou o log10(x+1) de um número especificado.

Uma expressão aritmética adiciona ou multiplica uma série de números. Por exemplo, você pode utilizar a expressão aritmética para modificar a classificação de relevância por um campo numérico de uma pipeline de enriquecimento de dados. Ela deve incluir uma das seguintes opções:

Opção
Tipo
Descrição
add
array de expressões

Adiciona uma série de números. Recebe uma array de expressões, que podem ter valores negativos. O comprimento da array deve ser maior ou igual a 2.

Exemplo

Sintaxe da expressão aritmética
"function": {
"add": [
{"path": "rating"},
{"score": "relevance"}
]
}

O Atlas Search usa as expressões path e score para adicionar o seguinte:

  • Valor numérico do campo rating ou 0, se o campo rating não estiver presente no documento

  • Pontuação de relevância é a pontuação que o Atlas Search atribui com base na relevância

multiply
array de expressões

Multiplica uma série de números. Recebe uma array de expressões, que podem ter valores negativos. O comprimento da array deve ser maior ou igual a 2.

Exemplo

Sintaxe da expressão aritmética
"function": {
"multiply": [
{
"path": {
"value": "popularity",
"undefined": 2.5
}
},
{"score": "relevance"},
{"constant": 0.75}
]
}

O Atlas Search usa as expressões path, score e constant para alterar a pontuação final do documento. Ele multiplica o seguinte:

  • Valor numérico da expressão de caminho, que é o valor numérico do campo popularity ou 2.5, se o campo popularity não estiver presente no documento

  • Pontuação de relevância é a pontuação que o Atlas Search atribui com base na relevância

  • Valor constante de 0.75

Observação

Você não pode substituir uma expressão aritmética que avalia para undefined com um valor constante.

Uma expressão constante permite um número constante na pontuação de função. Por exemplo, você pode usar constant para modificar a classificação de relevância por um valor numérico de uma pipeline de enriquecimento de dados. Ela deve incluir a seguinte opção:

Opção
Tipo
Descrição
constant
flutuar
Número que indica um valor fixo. O Atlas Search suporta valores negativos.

Exemplo

Sintaxe da expressão constante
{
"function": {
"constant": -23.78
}
}

Uma expressão de decaimento gaussiano permite diminuir ou reduzir multiplicando as pontuações finais dos documentos com base na distância de um valor de campo numérico a partir de um ponto de origem especificado. decay é calculado como:

Captura de tela da computação de decaimento
clique para ampliar

onde sigma é calculado para garantir que a pontuação tenha o valor decay à distância scale de origin±offset:

Captura de tela da computação sigma
clique para ampliar

Por exemplo, você pode usar gauss para ajustar a pontuação relevante de documentos com base na atualização do documento ou na data que influencia a classificação mais alta. gauss escolhe as seguintes opções:

Campo
Tipo
necessidade
Descrição
decay
em dobro
Opcional

Taxa na qual você deseja multiplicar as pontuações. O valor deve ser um número positivo entre 0 e 1 exclusivo. Se omitido, o padrão é 0.5.

Para documentos cujo valor de campo numérico (especificado usando path) está a uma distância (especificada usando scale) de origin mais ou menos (±) offset, o Atlas Search multiplica a pontuação atual usando decay.

offset
em dobro
Opcional
Número a ser usado para determinar a distância da origem. A operação de decaimento é realizada somente para documentos cujas distâncias são maiores que origin mais ou menos (±) offset. Se omitido, o padrão é 0.
origin
em dobro
Obrigatório
Ponto de origem a partir do qual calcular a distância.
path
Obrigatório
Nome do campo numérico cujo valor você deseja utilizar para multiplicar a pontuação base.
scale
em dobro
Obrigatório
Distância de origin mais ou menos (±) offset na qual as pontuações devem ser multiplicadas.

Exemplo

Sintaxe da expressão gaussian
{
"function": {
"gauss": {
"path": {
"value": "rating",
"undefined": 50
},
"origin": 95,
"scale": 5,
"offset": 5,
"decay": 0.5
}
}
}

Suponha que a classificação máxima seja 100. O Atlas Search usa o campo rating nos documentos para diminuir a pontuação:

  • Mantém a pontuação atual para documentos com classificação entre 90 e 100.

  • Multiplica a pontuação atual por 0.5 para documentos com uma classificação inferior a 90.

  • Multiplica a pontuação atual por 0.25 para documentos com classificação inferior a 85, e assim por diante.

Uma expressão de caminho incorpora um valor de campo numérico indexado em uma pontuação de função. Pode ser string ou object.

Se string, o valor é o nome do campo numérico para procurar a expressão de caminho.

Exemplo

Sintaxe da expressão de caminho
{
"function": {
"path": "rating"
}
}

O Atlas Search incorpora o valor numérico do campo rating na pontuação final do documento.

Se object, a expressão de caminho utiliza as seguintes opções:

Opção
Tipo
necessidade
Descrição
value
string
Obrigatório
Nome do campo numérico. O campo pode conter valores numéricos negativos.
undefined
flutuar
Opcional
Valor a ser usado se o campo numérico especificado usando value estiver ausente no documento. Se omitido, o padrão é 0.

Exemplo

Sintaxe da expressão de caminho
{
"function": {
"path": {"value": "quantity", "undefined": 2}
}
}

O Atlas Search incorpora o valor numérico do campo quantity ou 2, se o campo quantity não estiver presente no documento, na pontuação final do documento.

Uma expressão de caminho não pode ser um array e não pode conter regex ou asterisco no path.

Uma expressão de pontuação representa a pontuação de relevância, que é a pontuação que o Atlas Search atribui documentos com base na relevância da query. É igual à pontuação atual do documento. Ela deve incluir a seguinte opção:

Opção
Tipo
Descrição
score
string
Valor da pontuação de relevância da query. O valor deve ser relevance.

Exemplo

Sintaxe da expressão de pontuação
{
"function": {
"score": "relevance"
}
}

Uma expressão unária é uma expressão que utiliza um único argumento. No Atlas Search, você pode utilizar expressões unárias para calcular o log10(x) ou log10(x+1) de um número especificado. Por exemplo, você pode usar log1p para influenciar a pontuação de relevância pela pontuação de compatibilidade do documento. Ela deve incluir uma das seguintes opções:

Opção
Tipo
Descrição
log

Calcula o registro10 de um número.

Exemplo

O exemplo a seguir utiliza a opção de expressão aritmética multiply . O Atlas Search calcula o registro10 da expressão aritmética.

Sintaxe da expressão unária
{
"function": {
"log": {
"multiply": [
{"path": "popularity"},
{"constant": 0.5},
{"score": "relevance"}
]
}
}
}

Se a expressão especificada for avaliada como menor ou igual a 0, então o log será avaliado como indefinido.

Exemplo

No exemplo a seguir, o registro10 de -5.1, especificado usando uma expressão constante, é avaliado como indefinido. Portanto, a pontuação final do documento é 0.

Sintaxe da expressão unária
{
"function": {
"log": {
"constant": -5.1
}
}
}
log1p

Adiciona 1 ao número e depois calcula seu registro10. Por exemplo:

Exemplo

O exemplo a seguir usa a expressão de caminho. O Atlas Search adiciona 1 ao valor numérico da expressão de caminho e depois calcula o log10.

Sintaxe da expressão unária
{
"function": {
"log1p": {
"path": {
"value": "rating",
"undefined": 4
}
}
}
}

Os exemplos seguintes utilizam o índice padrão na collection sample_mflix.movies para executar a query do campo title. As queries de amostra incluem um estágio $limit para limitar o resultado para 5 resultados e um estágio $project para excluir todos os campos, exceto title e score.

Exemplo

Neste exemplo, o operador de texto utiliza score com a opção function para multiplicar o seguinte:

  • Valor numérico da expressão de caminho, que é o valor do campo imdb.rating nos documentos ou 2, se o campo imdb.rating não estiver no documento

  • Pontuação de relevância ou pontuação atual do documento

db.movies.aggregate([{
"$search": {
"text": {
"path": "title",
"query": "men",
"score": {
"function":{
"multiply":[
{
"path": {
"value": "imdb.rating",
"undefined": 2
}
},
{
"score": "relevance"
}
]
}
}
}
}
},
{
$limit: 5
},
{
$project: {
"_id": 0,
"title": 1,
"score": { "$meta": "searchScore" }
}
}])

Esta query gera os seguintes resultados, nos quais a pontuação é substituída pelo valor function especificado:

{ "title" : "Men...", "score" : 23.431293487548828 }
{ "title" : "12 Angry Men", "score" : 22.080968856811523 }
{ "title" : "X-Men", "score" : 21.34803581237793 }
{ "title" : "X-Men", "score" : 21.34803581237793 }
{ "title" : "Matchstick Men", "score" : 21.05954933166504 }

Exemplo

No exemplo a seguir, o operador de texto usa score com a opção function para substituir a pontuação atual do documento pelo valor numérico constante de 3.

db.movies.aggregate([
{
"$search": {
"text": {
"path": "title",
"query": "men",
"score": {
"function":{
"constant": 3
}
}
}
}
},
{
$limit: 5
},
{
$project: {
"_id": 0,
"title": 1,
"score": { "$meta": "searchScore" }
}
}
])

Esta query gera os seguintes resultados, nos quais a pontuação é substituída pelo valor function especificado:

{ "title" : "Men Without Women", "score" : 3 }
{ "title" : "One Hundred Men and a Girl", "score" : 3 }
{ "title" : "Of Mice and Men", "score" : 3 }
{ "title" : "All the King's Men", "score" : 3 }
{ "title" : "The Men", "score" : 3 }

Exemplo

No exemplo a seguir, o operador de texto usa score com a opção function para diminuir a pontuação de relevância dos documentos no resultado.

A consulta especifica que, para documentos cujo valor de campo imdb.rating ou 4.6, se o campo imdb.rating não estiver presente nos documentos, está a scale distância, que é 5, de origin, que é 9.5, mais ou menos offset, que é 0, o Atlas Search deve multiplicar a pontuação usando decay, que começa em 0.5. Essa query inclui um estágio $limit para limitar a saída a até 10 resultados e um estágio $project para adicionar o campo imdb.rating nos resultados.

db.movies.aggregate([
{
"$search": {
"text": {
"path": "title",
"query": "shop",
"score": {
"function":{
"gauss": {
"path": {
"value": "imdb.rating",
"undefined": 4.6
},
"origin": 9.5,
"scale": 5,
"offset": 0,
"decay": 0.5
}
}
}
}
}
},
{
"$limit": 10
},
{
"$project": {
"_id": 0,
"title": 1,
"imdb.rating": 1,
"score": { "$meta": "searchScore" }
}
}
])

Esta query retorna os seguintes resultados:

[
{ title: 'The Shop Around the Corner', imdb: { rating: 8.1 }, score: 0.9471074342727661 },
{ title: 'Exit Through the Gift Shop', imdb: { rating: 8.1 }, score: 0.9471074342727661 },
{ title: 'The Shop on Main Street', imdb: { rating: 8 }, score: 0.9395227432250977 },
{ imdb: { rating: 7.4 }, title: 'Chop Shop', score: 0.8849083781242371 },
{ title: 'Little Shop of Horrors', imdb: { rating: 6.9 }, score: 0.8290896415710449 },
{ title: 'The Suicide Shop', imdb: { rating: 6.1 }, score: 0.7257778644561768 },
{ imdb: { rating: 5.6 }, title: 'A Woman, a Gun and a Noodle Shop', score: 0.6559237241744995 },
{ title: 'Beauty Shop', imdb: { rating: 5.4 }, score: 0.6274620294570923 }
]

Para comparar os resultados das expressões Gaussian utilizadas na query anterior com a pontuação de relevância que é retornada nos resultados pelo Atlas Search, execute a seguinte query:

db.movies.aggregate([
{
"$search": {
"text": {
"path": "title",
"query": "shop"
}
}
},
{
"$limit": 10
},
{
"$project": {
"_id": 0,
"title": 1,
"imdb.rating": 1,
"score": { "$meta": "searchScore" }
}
}
])

Esta query retorna os seguintes resultados:

[
{ title: 'Beauty Shop', imdb: { rating: 5.4 }, score: 4.111973762512207 },
{ imdb: { rating: 7.4 }, title: 'Chop Shop', score: 4.111973762512207 },
{ title: 'The Suicide Shop', imdb: { rating: 6.1 }, score: 3.5363259315490723 },
{ title: 'Little Shop of Horrors', imdb: { rating: 6.9 }, score: 3.1020588874816895 },
{ title: 'The Shop Around the Corner', imdb: { rating: 8.1 }, score: 2.762784481048584 },
{ title: 'The Shop on Main Street', imdb: { rating: 8 }, score: 2.762784481048584 },
{ title: 'Exit Through the Gift Shop', imdb: { rating: 8.1 }, score: 2.762784481048584 },
{ imdb: { rating: 5.6 }, title: 'A Woman, a Gun and a Noodle Shop', score: 2.0802340507507324 }
]

Exemplo

No exemplo a seguir, o operador de texto usa score com a opção function para substituir a pontuação de relevância da query pelo valor do campo numérico imdb.rating ou 4.6, se o campo imdb.rating não for presente nos documentos.

db.movies.aggregate([{
"$search": {
"text": {
"path": "title",
"query": "men",
"score": {
"function":{
"path": {
"value": "imdb.rating",
"undefined": 4.6
}
}
}
}
}
},
{
$limit: 5
},
{
$project: {
"_id": 0,
"title": 1,
"score": { "$meta": "searchScore" }
}
}])

Esta query gera os seguintes resultados, nos quais a pontuação é substituída pelo valor function especificado:

{ "title" : "12 Angry Men", "score" : 8.899999618530273 }
{ "title" : "The Men Who Built America", "score" : 8.600000381469727 }
{ "title" : "No Country for Old Men", "score" : 8.100000381469727 }
{ "title" : "X-Men: Days of Future Past", "score" : 8.100000381469727 }
{ "title" : "The Best of Men", "score" : 8.100000381469727 }

Exemplo

No exemplo a seguir, o operador text usa score com a opção function para retornar a pontuação de relevância, que é a mesma da pontuação atual, dos documentos.

db.movies.aggregate([{
"$search": {
"text": {
"path": "title",
"query": "men",
"score": {
"function":{
"score": "relevance"
}
}
}
}
},
{
"$limit": 5
},
{
"$project": {
"_id": 0,
"title": 1,
"score": { "$meta": "searchScore" }
}
}])

Esta query gera os seguintes resultados, nos quais a pontuação é substituída pelo valor function especificado:

{ "title" : "Men...", "score" : 3.4457783699035645 }
{ "title" : "The Men", "score" : 2.8848698139190674 }
{ "title" : "Simple Men", "score" : 2.8848698139190674 }
{ "title" : "X-Men", "score" : 2.8848698139190674 }
{ "title" : "Mystery Men", "score" : 2.8848698139190674 }

Exemplo

No exemplo a seguir, o operador text usa score com a opção function para calcular o registro10 do campo imdb.rating ou 10, se o campo imdb.rating não estiver presente no documento.

db.movies.aggregate([{
"$search": {
"text": {
"path": "title",
"query": "men",
"score": {
"function": {
"log": {
"path": {
"value": "imdb.rating",
"undefined": 10
}
}
}
}
}
}
},
{
"$limit": 5
},
{
"$project": {
"_id": 0,
"title": 1,
"score": { "$meta": "searchScore" }
}
}])

Esta query gera os seguintes resultados, nos quais a pontuação é substituída pelo valor function especificado:

{ "title" : "12 Angry Men", "score" : 0.9493899941444397 }
{ "title" : "The Men Who Built America", "score" : 0.9344984292984009 }
{ "title" : "No Country for Old Men", "score" : 0.9084849953651428 }
{ "title" : "X-Men: Days of Future Past", "score" : 0.9084849953651428 }
{ "title" : "The Best of Men", "score" : 0.9084849953651428
}

Voltar

4. Documentos de pontuação

Próximo

Retorne os Detalhes da Pontuação