Docs Menu
Docs Home
/
Atlas
/ /

결과에서 문서 점수를 사용자 지정하는 방법

결과에서 문서의 점수를 사용자 정의할 수 있습니다. 점수 계산 방식을 조정하면 가장 관련성이 높은 문서가 검색 결과에서 더 높은 순위를 차지할 수 있습니다. 점수를 사용자 지정할 수 있는 다양한 방법에 대해 자세히 알아보려면 결과에서 문서 점수 매기기를 참조하세요. 이 페이지에서는 결과 내 문서의 점수를 수정하여 결과의 순위를 올리거나 내리는 방법과 후속 집계 파이프라인 단계에서 $search 쿼리 점수를 0 ~ 1 범위로 정규화하는 방법을 설명합니다.

Atlas Search 쿼리 반환하는 모든 문서 에는 관련성에 따라 점수가 할당됩니다. 결과 설정하다 에 포함된 문서는 가장 높은 점수부터 가장 낮은 점수 순으로 반환됩니다. 자세히 학습 결과에서 문서 점수 매기기를 참조하세요.

모든 연산자에서 다음 옵션을 사용하여 기본 채점 동작을 수정할 수 있습니다. 자세한 내용과 예시를 보려면 다음 옵션 중 하나를 클릭하세요.

이 섹션에서는 검색 필드에 가중치를 추가하여 결과나 결과 카테고리에서 문서의 순위를 올리거나 내리는 방법을 설명합니다. 특히 하나 이상의 값을 필드에 할당하여 더 높거나 낮은 점수의 결과를 반환하는 방법을 보여줍니다.

동적 매핑이 활성화된 인덱스를 설정하여 컬렉션의 모든 필드를 인덱싱하거나, 쿼리하고 결과를 정렬하려는 필드에 정적 매핑을 설정할 수 있습니다. Atlas Search 검색 인덱스를 만드는 방법에 대한 자세한 내용은 Atlas Search 인덱스 생성을 참조하세요.

샘플 쿼리는 결과에서 문서의 순위를 올리거나 내리는 방법을 보여줍니다. 이러한 연산자는 복합 연산자를 사용하여 두 개 이상의 연산자를 하나의 쿼리로 결합합니다.


언어 선택 드롭다운 메뉴를 사용하여 사용할 클라이언트를 설정하다 이 섹션의 예제를 사용해 보세요.


집계 파이프라인의 후속 단계에서 0 에서 1 범위의 $search 쿼리 점수를 정규화할 수 있습니다. $search 단계 이후 다음 단계를 사용하여 다음 순서로 점수를 정규화할 수 있습니다.

  • $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]

Atlas Search 결과에는 다음 점수가 포함됩니다.

  • $addFields 단계의 score 필드에서 $search 쿼리에 대한 수정된 점수.

  • $setWindowFields 단계의 maxScore 필드에 있는 결과의 문서에 할당된 최대 점수입니다.

  • $addFields 단계의 normalizedScore 필드의 정규화된 점수는 $divide를 사용하여 $score 의 수정된 점수를 $maxScore 의 최대 점수로 나누어 계산합니다.

Atlas Search를 사용한 복합 쿼리에 대해 자세히 알아보려면 MongoDB University에서 MongoDB 소개 과정의 9단원을 수강하세요. 1.5시간 분량의 이 단원에는 Atlas Search에 대한 개요와 Atlas Search 인덱스 만들기, 복합 연산자를 사용한 $search 쿼리 실행, 패싯을 사용한 결과 그룹화에 대한 강의가 포함되어 있습니다.

돌아가기

정확성 개선

이 페이지의 내용