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

Personalize a pontuação dos documentos nos resultados

Você pode personalizar a pontuação dos documentos nos resultados. Ao ajustar a forma como as pontuações são calculadas, você pode garantir que os documentos mais relevantes sejam classificados em uma posição mais alta nos resultados da pesquisa. Para aprender mais sobre as diferentes maneiras de personalizar a pontuação, veja Classificar os documentos nos resultados. Esta página demonstra como:

  • Modifique a pontuação dos documentos nos resultados para aumentar ou diminuir os resultados.

  • Normalize sua pontuação de query $search na faixa de 0 a 1 nos estágios subsequentes do seu pipeline de agregação.

Uma query de pesquisa do MongoDB atribui a cada documento retornado uma pontuação com base em sua relevância. Os documentos incluídos em um conjunto de resultados retornam em ordem da pontuação mais alta para a mais baixa. Para saber mais, consulte Pontuação dos documentos nos resultados.

Você pode usar as seguintes opções com todos os operadores para modificar o comportamento padrão de pontuação. Para obter detalhes e exemplos, clique em qualquer uma das seguintes opções:

Esta seção demonstra como adicionar pesos aos campos de pesquisa para aumentar ou ocultar os documentos nos resultados ou em uma categoria de resultados. Especificamente, ele demonstra como atribuir um ou mais valores a um campo para retornar resultados com uma pontuação maior ou menor.

Você pode configurar um índice com mapeamentos dinâmicos ativados para indexar todos os campos na coleção. Como alternativa, use mapeamentos estáticos nos campos que você deseja query e classificar os resultados. Para saber mais sobre como criar índices de pesquisa do MongoDB Search, consulte Gerenciar índices de pesquisa do MongoDB Search.

As queries de amostra demonstram como impulsionar ou enterrar os documentos nos resultados. Eles usam o operador composto para combinar dois ou mais operadores em uma única query.

Use o operador composto para combinar dois ou mais operadores em uma única query. Use as opções de pontuação para alterar a pontuação de relevância que o MongoDB Search retorna.

Use os campos title e year no namespace sample_mflix.movies para aumentar a pontuação de relevância que o MongoDB Search retorna para títulos de filmes que contêm o termo snow. Se você configurar o índice na coleção movies, poderá executar as seguintes queries.

Use o operador composto para combinar dois ou mais operadores em uma única query. Use as opções de pontuação para alterar a pontuação de relevância que o MongoDB Search retorna.

As queries de exemplo a seguir utilizam os campos title, plot e genres no namespace sample_mflix.movies para executar as seguintes pesquisas:

  • Pesquise todos os filmes que contenham a palavra ghost, mas reduza a pontuação dos filmes de comédia para 50%.

  • Pesquise todos os filmes que contenham a palavra ghost, mas reduza a pontuação dos filmes com ObjectIds especificados em 50%.

Você pode normalizar sua pontuação de query do $search no intervalo de 0 a 1 nos estágios subsequentes do seu pipeline de agregação. Você pode usar os seguintes estágios após o estágio $search na seguinte ordem para normalizar a pontuação:

  • $addFields

    {
    "$addFields": {
    "score": {
    "$meta": "searchScore"
    }
    }
    }
  • $setWindowFields

    {
    "$setWindowFields": {
    "output": {
    "maxScore": {
    "$max": "$score"
    }
    }
    }
    }
  • $addFields

    {
    "$addFields": {
    "normalizedScore": {
    "$divide": [
    "$score", "$maxScore"
    ]
    }
    }
    }
1db.movies.aggregate([{
2 "$search": {
3 "text": {
4 "query": "Helsinki",
5 "path": "plot"
6 }
7 }
8 },
9 {
10 "$limit": 5
11 },
12 {
13 "$project": {
14 "_id": 0,
15 "title": 1,
16 "score": 1,
17 "maxScore": 1,
18 "normalizedScore": 1
19 }
20 },
21 {
22 "$addFields": {
23 "score": {
24 "$meta": "searchScore"
25 }
26 }
27 },
28 {
29 "$setWindowFields": {
30 "output": {
31 "maxScore": {
32 "$max": "$score"
33 }
34 }
35 }
36 },
37 {
38 "$addFields": {
39 "normalizedScore": {
40 "$divide": [
41 "$score", "$maxScore"
42 ]
43 }
44 }
45}])
1[
2 {
3 title: 'Drifting Clouds',
4 score: 4.5660295486450195,
5 maxScore: 4.5660295486450195,
6 normalizedScore: 1
7 },
8 {
9 title: 'Sairaan kaunis maailma',
10 score: 4.041563034057617,
11 maxScore: 4.5660295486450195,
12 normalizedScore: 0.8851372929150143
13 },
14 {
15 title: 'Bad Luck Love',
16 score: 3.6251673698425293,
17 maxScore: 4.5660295486450195,
18 normalizedScore: 0.79394303764817
19 },
20 {
21 title: 'Bad Luck Love',
22 score: 3.6251673698425293,
23 maxScore: 4.5660295486450195,
24 normalizedScore: 0.79394303764817
25 },
26 {
27 title: 'Forbidden Fruit',
28 score: 3.6251673698425293,
29 maxScore: 4.5660295486450195,
30 normalizedScore: 0.79394303764817
31 }
32]
1db.movies.aggregate([{
2 "$search": {
3 "text": {
4 "path": "title",
5 "query": "men",
6 "score": {
7 "function":{
8 "multiply":[
9 {
10 "path": {
11 "value": "imdb.rating",
12 "undefined": 2
13 }
14 },
15 {
16 "score": "relevance"
17 }
18 ]
19 }
20 }
21 }
22 }
23 },
24 {
25 "$limit": 5
26 },
27 {
28 "$addFields": {
29 "score": {
30 "$meta": "searchScore"
31 }
32 }
33 },
34 {
35 "$setWindowFields": {
36 "output": {
37 "maxScore": {
38 "$max": "$score"
39 }
40 }
41 }
42 },
43 {
44 "$addFields": {
45 "normalizedScore": {
46 "$divide": [
47 "$score", "$maxScore"
48 ]
49 }
50 }
51 },
52 {
53 "$project": {
54 "_id": 0,
55 "title": 1,
56 "score": 1,
57 "maxScore": 1,
58 "normalizedScore": 1
59 }
60}])
1[
2 {
3 title: 'Men...',
4 score: 23.431293487548828,
5 maxScore: 23.431293487548828,
6 normalizedScore: 1
7 },
8 {
9 title: '12 Angry Men',
10 score: 22.080968856811523,
11 maxScore: 23.431293487548828,
12 normalizedScore: 0.9423708882544255
13 },
14 {
15 title: 'X-Men',
16 score: 21.34803581237793,
17 maxScore: 23.431293487548828,
18 normalizedScore: 0.911090795039637
19 },
20 {
21 title: 'X-Men',
22 score: 21.34803581237793,
23 maxScore: 23.431293487548828,
24 normalizedScore: 0.911090795039637
25 },
26 {
27 title: 'Matchstick Men',
28 score: 21.05954933166504,
29 maxScore: 23.431293487548828,
30 normalizedScore: 0.8987787781692841
31 }
32]
1db.movies.aggregate([{
2 "$search": {
3 "text": {
4 "path": "title",
5 "query": "shop",
6 "score": {
7 "function":{
8 "gauss": {
9 "path": {
10 "value": "imdb.rating",
11 "undefined": 4.6
12 },
13 "origin": 9.5,
14 "scale": 5,
15 "offset": 0,
16 "decay": 0.5
17 }
18 }
19 }
20 }
21 }
22 },
23 {
24 "$limit": 5
25 },
26 {
27 "$addFields": {
28 "score": {
29 "$meta": "searchScore"
30 }
31 }
32 },
33 {
34 "$setWindowFields": {
35 "output": {
36 "maxScore": {
37 "$max": "$score"
38 }
39 }
40 }
41 },
42 {
43 "$addFields": {
44 "normalizedScore": {
45 "$divide": [
46 "$score", "$maxScore"
47 ]
48 }
49 }
50 },
51 {
52 "$project": {
53 "_id": 0,
54 "title": 1,
55 "score": 1,
56 "maxScore": 1,
57 "normalizedScore": 1
58 }
59}])
1[
2 {
3 title: 'The Shop Around the Corner',
4 score: 0.9471074342727661,
5 maxScore: 0.9471074342727661,
6 normalizedScore: 1
7 },
8 {
9 title: 'Exit Through the Gift Shop',
10 score: 0.9471074342727661,
11 maxScore: 0.9471074342727661,
12 normalizedScore: 1
13 },
14 {
15 title: 'The Shop on Main Street',
16 score: 0.9395227432250977,
17 maxScore: 0.9471074342727661,
18 normalizedScore: 0.9919917310611205
19 },
20 {
21 title: 'Chop Shop',
22 score: 0.8849083781242371,
23 maxScore: 0.9471074342727661,
24 normalizedScore: 0.9343273488331464
25 },
26 {
27 title: 'Little Shop of Horrors',
28 score: 0.8290896415710449,
29 maxScore: 0.9471074342727661,
30 normalizedScore: 0.8753913353110349
31 }
32]
1db.movies.aggregate([{
2 "$search": {
3 "text": {
4 "path": "title",
5 "query": "men",
6 "score": {
7 "function":{
8 "path": {
9 "value": "imdb.rating",
10 "undefined": 4.6
11 }
12 }
13 }
14 }
15 }
16 },
17 {
18 "$limit": 5
19 },
20 {
21 "$addFields": {
22 "score": {
23 "$meta": "searchScore"
24 }
25 }
26 },
27 {
28 "$setWindowFields": {
29 "output": {
30 "maxScore": {
31 "$max": "$score"
32 }
33 }
34 }
35 },
36 {
37 "$addFields": {
38 "normalizedScore": {
39 "$divide": [
40 "$score", "$maxScore"
41 ]
42 }
43 }
44 },
45 {
46 "$project": {
47 "_id": 0,
48 "title": 1,
49 "score": 1,
50 "maxScore": 1,
51 "normalizedScore": 1
52 }
53}])
1[
2 {
3 title: '12 Angry Men',
4 score: 8.899999618530273,
5 maxScore: 8.899999618530273,
6 normalizedScore: 1
7 },
8 {
9 title: 'The Men Who Built America',
10 score: 8.600000381469727,
11 maxScore: 8.899999618530273,
12 normalizedScore: 0.9662922191102197
13 },
14 {
15 title: 'No Country for Old Men',
16 score: 8.100000381469727,
17 maxScore: 8.899999618530273,
18 normalizedScore: 0.9101124414213563
19 },
20 {
21 title: 'X-Men: Days of Future Past',
22 score: 8.100000381469727,
23 maxScore: 8.899999618530273,
24 normalizedScore: 0.9101124414213563
25 },
26 {
27 title: 'The Best of Men',
28 score: 8.100000381469727,
29 maxScore: 8.899999618530273,
30 normalizedScore: 0.9101124414213563
31 }
32]
1db.movies.aggregate([{
2 "$search": {
3 "text": {
4 "path": "title",
5 "query": "men",
6 "score": {
7 "function": {
8 "log": {
9 "path": {
10 "value": "imdb.rating",
11 "undefined": 10
12 }
13 }
14 }
15 }
16 }
17 }
18 },
19 {
20 "$limit": 5
21 },
22 {
23 "$addFields": {
24 "score": {
25 "$meta": "searchScore"
26 }
27 }
28 },
29 {
30 "$setWindowFields": {
31 "output": {
32 "maxScore": {
33 "$max": "$score"
34 }
35 }
36 }
37 },
38 {
39 "$addFields": {
40 "normalizedScore": {
41 "$divide": [
42 "$score", "$maxScore"
43 ]
44 }
45 }
46 },
47 {
48 "$project": {
49 "_id": 0,
50 "title": 1,
51 "score": 1,
52 "maxScore": 1,
53 "normalizedScore": 1
54 }
55 }
56])
1[
2 {
3 title: '12 Angry Men',
4 score: 0.9493899941444397,
5 maxScore: 0.9493899941444397,
6 normalizedScore: 1
7 },
8 {
9 title: 'The Men Who Built America',
10 score: 0.9344984292984009,
11 maxScore: 0.9493899941444397,
12 normalizedScore: 0.9843145968064908
13 },
14 {
15 title: 'No Country for Old Men',
16 score: 0.9084849953651428,
17 maxScore: 0.9493899941444397,
18 normalizedScore: 0.9569144408182233
19 },
20 {
21 title: 'X-Men: Days of Future Past',
22 score: 0.9084849953651428,
23 maxScore: 0.9493899941444397,
24 normalizedScore: 0.9569144408182233
25 },
26 {
27 title: 'The Best of Men',
28 score: 0.9084849953651428,
29 maxScore: 0.9493899941444397,
30 normalizedScore: 0.9569144408182233
31 }
32]

Os resultados da pesquisa MongoDB contêm as seguintes pontuações:

  • The modified score for the $search query in the score field from the $addFields stage.

  • The maximum score assigned to the documents in the results in the maxScore field from the $setWindowFields stage.

  • The normalized score in the normalizedScore field from the $addFields stage. MongoDB computes this score by dividing the modified score in $score by the maximum score in $maxScore using $divide.

To learn more about compound queries using MongoDB Search, take Unit 9 of the Intro To MongoDB Course on MongoDB University. The 1.5-hour unit includes an overview of MongoDB Search. The unit also covers creating MongoDB Search indexes, running $search queries using compound operators, and grouping results using facet (MongoDB Search Operator).