Docs Menu
Docs Home
/
MongoDB Atlas
/ / / /

점수 수정

이 페이지의 내용

  • boost
  • 필드
  • 예시
  • constant
  • 예시
  • embedded
  • 필드
  • 예시
  • function
  • 표현식
  • 예시

모든 운영자가 사용할 수 있는 점수 수정 옵션은 다음과 같습니다. 자세한 내용과 예시를 보려면 다음 옵션 중 하나를 클릭하세요.

boost 옵션은 결과의 기본 점수에 지정된 숫자 또는 문서의 숫자 필드 값을 곱합니다. 예를 들어, boost를 사용하면 결과에서 일치하는 특정 문서의 중요도를 높일 수 있습니다.

참고

  • boostconstant 옵션을 함께 사용할 수 없습니다.

  • 가 있는 boost 옵션은 path 경로 표현식 과 함께 옵션을 function사용하여 곱하는 것과 동일합니다.

boost 옵션은 다음 필드를 사용합니다.

필드
유형
필요성
설명

value

float

조건부

기본 점수에 곱할 숫자입니다. 값은 양수여야 합니다. valuepath 중 하나는 필수이지만 둘 다 지정할 수는 없습니다.

path

문자열

조건부

기본 점수에 곱할 값의 숫자 필드 이름입니다. pathvalue 중 하나는 필수이지만 둘 다 지정할 수는 없습니다.

undefined

float

옵션

path를 통해 지정된 숫자 필드가 문서에 없는 경우 path를 대체할 숫자 값입니다. 생략하면 기본값은 0입니다. path을 지정하는 경우에만 이 값을 지정할 수 있습니다.

다음 예시에서는 sample_mflix 데이터베이스의 movies 컬렉션을 사용합니다. 클러스터에 샘플 데이터세트가 있는 경우 Atlas Search default 인덱스를 만들고 클러스터에서 예시 쿼리를 실행할 수 있습니다.

샘플 복합 쿼리는 한 검색 기준의 중요도를 다른 검색 기준보다 높이는 방법을 보여줍니다. 쿼리에는 titlescore 이외의 모든 필드를 제외하는 $project 단계가 포함되어 있습니다.

다음 예시에서는 복합 연산자가 텍스트 연산자를 사용하여 plottitle 필드에서 Helsinki 라는 용어를 검색합니다. title 필드에 대한 쿼리는 boost 옵션과 함께 score 을 사용하여 value 필드에 지정된 대로 점수 결과에 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": { "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])

이 쿼리는 쿼리 용어와 일치하는 title 문서의 점수에 기본 값에서 3을(를) 곱한 다음 결과를 반환합니다.

[
{
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
}
]

다음 예시에서 복합 연산자는 텍스트 연산자를 사용하여 plottitle 필드에서 Helsinki라는 용어를 검색합니다. title 필드에 대한 쿼리는 boost 옵션과 함께 score를 사용하여 path 내의 숫자 필드인 imdb.rating으로 점수 결과를 곱합니다. 지정된 path에서 숫자 필드를 찾을 수 없는 경우 연산자는 문서의 점수를 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])

이 쿼리는 문서에 필드가 없는 경우 title 필드가 쿼리 용어와 일치하는 문서의 점수를 기본 값에서 숫자 필드 imdb.rating 또는 3 값으로 곱한 다음 결과를 반환합니다.

[
{
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
}
]

constant 옵션은 기본 점수를 지정된 숫자로 대체합니다.

참고

constantboost 옵션을 함께 사용하면 안 됩니다.

다음 예에서는 sample_mflix.movies 컬렉션에 대한 기본 인덱스와 복합 연산자를 활용하여 plottitle 필드를 쿼리합니다. 쿼리에서 텍스트 연산자는 constant 옵션과 함께 score를 사용하여 title 필드에 대한 쿼리와 일치하는 결과에서만 모든 점수 결과를 5 로 바꿉니다.

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])

위의 쿼리는 다음 결과를 반환하며, title 필드에 대한 쿼리와 일치하는 문서의 점수만 지정된 constant 값으로 대체됩니다.

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]

참고

이 옵션은 embeddedDocument 연산자에서만 사용할 수 있습니다.

embedded 옵션을 사용하여 다음에 대한 방법을 구성할 수 있습니다.

  • 일치하는 여러 내장된 문서의 점수를 집계합니다.

  • 일치하는 내장된 문서의 점수를 집계한 후 embeddedDocument 연산자의 점수를 수정합니다.

참고

Atlas Search embeddedDocuments 유형, embeddedDocument 연산자 및 embedded 점수 옵션이 미리 보기로 제공됩니다. 복제본 세트 또는 단일 MongoDB 샤드 의 Atlas Search 인덱스 가 2,100,000,000 인덱스 객체에 도달하면 Atlas Search 는 인덱스 를 오래된 쿼리 가능 상태 로 전환합니다. 향후 Atlas Search 에서 2 100, ,000, 이상의 인덱스000 객체를 지원 하려면 MongoDB 피드백 엔진에서 이 요청 에 투표하세요.

embedded 옵션은 다음 필드를 사용합니다.

필드
유형
필요성
설명

aggregate

문자열

옵션

일치하는 내장된 문서의 점수를 결합하는 방법을 구성합니다. 값은 다음 집계 전략 중 하나여야 합니다:

  • sum - (기본값) 일치하는 모든 내장된 문서의 점수를 합산합니다.

  • maximum - 일치하는 모든 내장된 문서 중 가장 높은 점수를 선택합니다.

  • minimum - 일치하는 모든 내장된 문서 중 가장 점수가 낮은 문서를 선택합니다.

  • mean - 일치하는 모든 내장된 문서의 평균(산술 평균) 점수를 선택합니다. Atlas Search에는 평균을 계산할 때만 일치하는 내장된 문서의 점수가 포함됩니다. Atlas Search는 쿼리 조건자를 충족하지 않는 내장된 문서를 점수가 0인 문서로 계산하지 않습니다.

이 필드를 생략하면 기본값은 sum입니다.

outerScore

옵션

집계 전략을 적용한 후 적용할 점수 수정을 지정합니다.

다음 예제에서는 sample_analytics.transactions 컬렉션의 default 인덱스를 사용합니다. 이 인덱스는 transactions 배열의 문서에 대해 embeddedDocuments 유형을 구성하고 transactions.symboltransactions.transaction_code 필드에 대해 string 유형을 구성합니다.

예시

샘플 인덱스
{
"mappings": {
"dynamic": true,
"fields": {
"transactions": {
"dynamic": true,
"fields": {
"symbol": {
"type": "string"
},
"transaction_code": {
"type": "string"
}
},
"type": "embeddedDocuments"
}
}
}
}

문서 배열이 포함된 transactions 필드에 대한 샘플 쿼리에는 출력을 10 개의 결과로 제한하는 $limit 단계, 그리고 $project 단계가 포함되어 있습니다.

  • account_idtransaction_count 이외의 모든 필드를 제외합니다.

  • 집계 전략과 추가 점수 수정을 적용하는 score 필드를 추가합니다.

    참고

    embeddedDocument 연산자operatorscore 옵션 내에서 function을 사용할 수 있습니다. 그러나 path 옵션이 필요한 함수 점수 표현식의 경우 표현식의 path 로 지정하는 숫자 필드가 embeddedDocument 연산자의 path 안에 있어야 합니다. 예를 들어 다음 예시 쿼리에서 24번째 줄의 compound 연산자의 score 옵션 안에 지정된 transactions.amount 필드는 4번째 줄의 embeddedDocument 연산자의 경로 transactions 안에 있습니다.

이 쿼리는 AMD를 구매한 계정을 검색하고 가장 큰 단일 AMD 구매(주식 수 기준)에 해당 계정이 이 기간 동안 수행한 트랜잭션 수의 log1p값을 곱합니다. 다음을 기준으로 계정의 순위를 매깁니다.

  • 단일 트랜잭션에서 구매한 AMD 개수

  • 마지막 기간의 트랜잭션 수

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})

Atlas Search는 지난 기간에 거래를 많이 하고 단일 트랜잭션으로 AMD 구매를 많이 한 계정의 순위를 높게 매깁니다.

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]

function 옵션을 사용하면 숫자 필드를 사용하여 문서의 최종 점수를 변경할 수 있습니다. 표현식 을 통해 최종 점수를 계산하기 위한 숫자 필드를 지정할 수 있습니다. 함수 점수의 최종 결과가 0 미만인 경우 Atlas Search는 점수를 0 로 대체합니다.

참고

embeddedDocument 연산자의 operatorscore 옵션 안에 function을 사용할 수 있습니다. 그러나 path 옵션이 필요한 함수 점수 표현식의 경우, 표현식의 path로 지정하는 숫자 필드가 embeddedDocument 연산자의 path 안에 있어야 합니다.

문서의 최종 점수를 변경하려면 function 옵션과 함께 다음 표현식을 사용하세요.

  • 산술 표현식: 일련의 숫자를 더하거나 곱하는 표현식

  • 상수 표현식: 함수 점수에 상수를 허용하는 표현식

  • 가우스 감쇠 표현식: 지정된 비율로 곱하여 점수를 감쇠 또는 감소시키는 표현식

  • 경로 표현식: 인덱싱된 숫자 필드 값을 함수 점수에 통합하는 표현식

  • 점수 표현식: Atlas Search에서 할당된 관련성 점수를 반환하는 표현식

  • 단항 표현식: 단일 인수를 사용하는 표현식. Atlas Search에서는 지정된 숫자의 log10(x) 또는 log10(x+1)을 계산할 수 있습니다.

참고

Atlas Search 함수 점수는 항상 float 값이며, 너무 크거나 작은 숫자의 경우 정밀도가 손실될 수 있습니다.

산술 표현식은 일련의 숫자를 더하거나 곱하는 연산식입니다. 예를 들어, 산술 표현식을 사용하여 데이터 인리치먼트 파이프라인의 숫자 필드를 통해 관련성 순위를 변경할 수 있습니다. 다음 옵션 중 하나를 포함해야 합니다:

옵션
유형
설명

add

표현식 배열

일련의 숫자를 추가합니다. 음수 값을 가질 수 있는 표현식 배열 을 사용합니다. 배열 길이는 이상이어야 2 합니다. 예를 예시 다음과 같습니다.

산술 표현식 구문
"function": {
"add": [
{"path": "rating"},
{"score": "relevance"}
]
}

이전 예에서 Atlas Search는 pathscore 표현식을 사용하여 다음을 추가합니다.

  • 문서에 rating 필드가 없는 경우 rating 필드 또는 0 의 숫자 값

  • 관련성 점수: Atlas Search가 관련성에 따라 부여하는 점수

multiply

표현식 배열

일련의 숫자를 곱합니다. 음수 값을 가질 수 있는 표현식 배열 을 사용합니다. 배열 길이는 이상이어야 2 합니다. 예를 예시 다음과 같습니다.

산술 표현식 구문
"function": {
"multiply": [
{
"path": {
"value": "popularity",
"undefined": 2.5
}
},
{
"score": "relevance"
},
{
"constant": 0.75
}
]
}

이전 예시에서 Atlas Search는 path, scoreconstant 표현식을 사용하여 문서의 최종 점수를 변경합니다. 다음을 곱합니다.

  • 문서에 popularity 필드가 없는 경우 popularity 필드 또는 2.5의 숫자 값인 경로 표현식의 숫자 값

  • 관련성 점수: Atlas Search가 관련성에 따라 부여하는 점수

  • 의 상수값 0.75

참고

undefined 으로 평가되는 산술 표현식을 상수 값으로 바꿀 수 없습니다.

상수 표현식을 사용하면 함수 점수에 상수 를 사용할 수 있습니다. 예를 들어 constant 를 사용하여 데이터 인리치먼트 파이프라인의 숫자 값을 통해 관련성 순위를 수정할 수 있습니다. 여기에는 다음 옵션이 포함되어야 합니다.

옵션
유형
설명

constant

float

고정된 값을 나타내는 숫자입니다. Atlas Search는 음수 값을 지원합니다.

예시

상수 표현식 구문
{
"function": {
"constant": -23.78
}
}

가우스 감쇠 표현식을 사용하면 지정된 원점에서 숫자 필드 값의 거리를 기준으로 문서의 최종 점수를 감쇠하거나 곱하여 줄일 수 있습니다. decay 은 다음과 같이 계산됩니다.

붕괴 계산 스크린샷
클릭하여 확대

여기서 시그마는 점수가 origin±offset 에서 거리 scale 에 있는 decay 값을 취하도록 보장하기 위해 계산됩니다.

시그마 계산의 스크린샷
클릭하여 확대

예를 들어 gauss 를 사용하여 문서 최신성이나 더 높은 순위에 영향을 미치는 날짜를 기준으로 문서의 관련 점수를 조정할 수 있습니다. gauss 은 다음 옵션을 사용합니다.

필드
유형
필요성
설명

decay

double

옵션

점수를 곱하려는 비율입니다. 값은 0 에서 1 사이의 양수여야 합니다(제외). 생략하면 기본값은 0.5 입니다.

숫자 필드 값( path 을 사용하여 지정됨)이 origin 플러스 또는 마이너스(±) offset 로부터 거리( scale 를 사용하여 지정됨)에 있는 문서의 경우 Atlas Search는 decay.

offset

double

옵션

원점으로부터의 거리를 결정하는 데 사용하는 숫자입니다. 감쇠 작업은 거리가 origin 플러스 또는 마이너스(±) offset 보다 큰 문서에 대해서만 수행됩니다. 생략하면 기본값은 0 입니다.

origin

double

필수 사항

거리를 계산할 원점입니다.

path

필수 사항

기본 점수를 곱하는 데 사용할 값이 있는 숫자 필드의 이름입니다.

scale

double

필수 사항

점수를 곱해야 하는 origin 플러스 또는 마이너스(±) offset 로부터의 거리입니다.

예시

가우스 표현식 구문
{
"function": {
"gauss": {
"path": {
"value": "rating",
"undefined": 50
},
"origin": 95,
"scale": 5,
"offset": 5,
"decay": 0.5
}
}
}

최대 평점이 100 이라고 가정합니다. Atlas Search는 문서의 rating 필드를 사용하여 점수를 감쇠시킵니다.

  • 등급이 90 ~ 100 사이인 문서에 대해 현재 점수를 유지합니다.

  • 등급이 90 미만인 문서에 대해 현재 점수에 0.5 을 곱합니다.

  • 등급이 85 보다 낮은 문서에 대해 현재 점수에 0.25 을 곱합니다.

경로 표현식은 인덱싱된 숫자 필드 값을 함수 점수에 통합합니다. string 또는 object일 수 있습니다.

string인 경우 값은 경로 표현식을 검색할 숫자 필드의 이름입니다.

예시

경로 표현식 구문
{
"function": {
"path": "rating"
}
}

Atlas Search는 문서의 최종 점수에 rating 필드의 숫자 값을 통합합니다.

object의 경우 경로 표현식에 다음 옵션이 사용됩니다.

옵션
유형
필요성
설명

value

문자열

필수 사항

숫자 필드 이름입니다. 필드에 음수 값을 포함할 수 있습니다.

undefined

float

옵션

value를 사용하여 지정한 숫자 필드가 문서에 없는 경우 사용할 값입니다. 생략하면 기본값은 0입니다.

예시

경로 표현식 구문
{
"function": {
"path": {"value": "quantity", "undefined": 2}
}
}

Atlas Search는 문서에 quantity 필드가 없을 경우 최종 점수 계산에 quantity 필드 또는 2의 숫자 값을 포함합니다.

경로 표현식은 array일 수 없으며, path정규식 또는 와일드카드를 포함할 수 없습니다.

점수 표현식은 관련성 점수를 나타내며, 이는 Atlas Search가 쿼리의 관련성에 따라 문서에 할당하는 점수입니다. 문서의 현재 점수와 동일합니다. 다음 옵션이 포함되어야 합니다.

옵션
유형
설명

score

문자열

쿼리의 관련성 점수 값입니다. 값은 relevance이어야 합니다.

예시

점수 표현 구문
{
"function": {
"score": "relevance"
}
}

단항 표현식은 단일 인수를 사용하는 표현식입니다. Atlas Search에서는 단항 표현식을 사용하여 지정된 수의 log10(x) 또는 log10(x+1)를 계산할 수 있습니다. 예를 들어 log1p를 사용하여 문서 인기도 점수로 관련성 점수에 영향을 줄 수 있습니다. 다음 옵션 중 하나를 포함해야 합니다.

옵션
유형
설명

log

숫자의 로그10 를 계산합니다. 예시:

단항 표현식 구문
{
"function": {
"log": {
"multiply": [
{"path": "popularity"},
{"constant": 0.5},
{"score": "relevance"}
]
}
}
}

이전 예시에서 Atlas Search는 multiply 옵션을 사용하여 popularity 필드의 숫자 값, 상수 값 0.5, 그리고 Atlas Search에 의해 할당된 관련성 점수의 곱을 계산하는 산술 표현식의 log10을 계산합니다.

log 옵션에 지정된 표현식의 결과가 0 이하인 경우 log는 정의되지 않은 값으로 평가됩니다. 예시:

단항 표현식 구문
{
"function": {
"log": {
"constant": -5.1
}
}
}

이전 예시에서 Atlas Search는 상수 표현식 -5.1의 로그10 을 정의되지 않은 것으로 평가합니다. 따라서 문서의 최종 점수는 0입니다.

log1p

숫자에 1을 더한 다음 해당 숫자의 로그10을 계산합니다. 예시:

단항 표현식 구문
{
"function": {
"log1p": {
"path": {
"value": "rating",
"undefined": 4
}
}
}
}

이전 예시에서 Atlas Search는 path 옵션을 사용하여 rating 필드의 숫자 값으로 평가되는 표현식에1을 더한 후 그 결과 합계의 log10을 계산합니다.

다음 예시에서는 sample_mflix.movies 컬렉션의 기본 인덱스를 사용하여 title 필드를 쿼리합니다. 샘플 쿼리에는 출력을 5개의 결과로 제한하는 $limit 단계와 titlescore를 제외한 모든 필드를 제외하는 $project 단계가 포함됩니다.

예시

이 예에서 텍스트 연산자는 scorefunction 옵션을 사용하여 다음을 곱합니다:

  • 문서의 imdb.rating 필드의 값에 해당하는 경로 표현식의 숫자 값이며, imdb.rating 필드가 문서에 없는 경우 2 값입니다.

  • 관련성 점수 또는 문서의 현재 점수

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" }
}
}])

이 쿼리는 점수가 지정된 function 값으로 대체된 다음 결과를 반환합니다.

{ "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 }

예시

다음 예제에서 텍스트 연산자는 score function 옵션과 함께 사용하여 문서의 현재 점수를 상수 숫자 값 3 로 바꿉니다.

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

이 쿼리는 점수가 지정된 function 값으로 대체된 다음 결과를 반환합니다.

{ "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 }

예시

다음 예제에서 텍스트 연산자는 scorefunction 옵션을 함께 사용하여 결과에서 문서의 관련성 점수를 감소시킵니다.

이 쿼리는 imdb.rating 필드 값 또는 4.6 인 문서의 경우 imdb.rating 필드가 문서에 없는 경우 origin 로부터의 거리가 5scale 거리가 되도록 지정합니다. 9.5, 더하기 또는 빼기 offset0 인 경우 Atlas Search 는 0.5 에서 시작하는 decay 를 사용하여 점수를 곱해야 합니다. 이 쿼리에는 출력을 최대 10 결과로 제한하는 $limit 단계와 결과에 imdb.rating 필드를 추가하는 $project 단계가 포함되어 있습니다.

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" }
}
}
])

이 쿼리는 다음과 같은 결과를 반환합니다:

[
{ 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 }
]

이전 쿼리에서 사용된 가우스 표현식의 결과와 Atlas Search 결과에 반환된 관련성 점수를 비교하려면 다음 쿼리를 실행합니다.

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

이 쿼리는 다음과 같은 결과를 반환합니다:

[
{ 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 }
]

예시

다음 예시에서 text 연산자는 문서에 imdb.rating 필드가 없는 경우 scorefunction 옵션과 함께 사용하여 쿼리의 관련성 점수를 숫자 필드 imdb.rating의 값 또는 4.6으로 바꿉니다.

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" }
}
}])

이 쿼리는 점수가 지정된 function 값으로 대체된 다음 결과를 반환합니다.

{ "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 }

예시

다음 예에서 텍스트 연산자는 scorefunction 옵션과 함께 사용하여 문서의 관련성 점수(현재 점수와 동일함)를 반환합니다.

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

이 쿼리는 점수가 지정된 function 값으로 대체된 다음 결과를 반환합니다.

{ "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 }

예시

다음 예시에서 text 연산자는 문서에 imdb.rating 필드가 없는 경우 scorefunction 옵션과 함께 사용하여 imdb.rating 또는 10의 log10을 계산합니다.

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" }
}
}])

이 쿼리는 점수가 지정된 function 값으로 대체된 다음 결과를 반환합니다.

{ "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
}

돌아가기

4. 문서 점수