Para agentes de IA: um índice de documentação está disponível em https://www.mongodb.com/pt-br/docs/llms.txt — as versões de markdown de todas as páginas estão disponíveis anexando .md a qualquer caminho de URL.
Menu Docs

Modificar a Pontuação

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.

  • The boost option with path is the same as multiplying using the function option with a path expression.

A opção boost tem os seguintes campos:

Campo
Tipo
necessidade
Descrição

value

float

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

float

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.

The following examples use the movies collection in the sample_mflix database. If you have the sample dataset on your cluster, you can create the MongoDB Search default index and run the example queries on your 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
}
]

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.

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. A MongoDB Search inclui pontuações de documentos incorporados correspondentes apenas ao calcular a média. O MongoDB Search não contabiliza documentos incorporados que não atendam aos predicados de 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

    You can use function inside the score option of the embeddedDocument operator's operator. However, for function score expressions that require the path option, the numeric field that you specify as the path for the expression must be inside the embeddedDocument operator's path. For example, in the following example query, the field transactions.amount that is specified inside the score option of the compound operator on line 24 is inside in the embeddedDocument operator's path transactions on line 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 MongoDB 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]

The function option allows you to alter the final score of the document using a numeric field . You can specify the numeric field for computing the final score through an expression. If the final result of the function score is less than 0, MongoDB Search replaces the score with 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 MongoDB Search.

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

Observação

As pontuações da função MongoDB Search são sempre float valores e a precisão pode ser perdida para números muito grandes ou pequenos.

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

Adds a series of numbers. Takes an array of expressions, which can have negative values. Array length must be greater than or equal to 2. For example:

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

No exemplo anterior, o MongoDB Search utiliza 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, que é a pontuação que a Pesquisa MongoDB atribui com base na relevância

multiply

array de expressões

Multiplies a series of numbers. Takes an array of expressions, which can have negative values. Array length must be greater than or equal to 2. For example:

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

No exemplo anterior, o MongoDB 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, que é a pontuação que a Pesquisa MongoDB 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.

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 }