문서 메뉴

문서 홈MongoDB 실행 및 관리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 단계가 포함되어 있습니다.

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 인덱스가 Lucene의 20억 개 문서 제한에 도달하면 Atlas Search는 새 문서를 인덱싱하거나 해당 인덱스의 기존 문서에 업데이트를 적용하지 않습니다. 이 기능을 일반적으로 사용할 수 있게 되면 이러한 제한을 수용할 수 있는 솔루션이 마련될 예정입니다. 이 기능 사용과 관련된 문제를 해결하려면 지원팀에 문의하세요.

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 연산자의 의 function score operator옵션 path 안에 path 를 사용할 수 있습니다. 그러나 옵션이 필요한 path 함수 점수 표현식 의 transactions.amount 경우 표현식의 로 지정하는 숫자 score compound 24 필드가 embeddedDocument 연산자의 안에 있어야 합니다. 예를 들어 다음 예제 쿼리에서 줄의 연산자의 옵션 안에 지정된 필드는 embeddedDocument 줄의 연산자 경로 transactions 안에 4 있습니다. .

이 쿼리는 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)을 계산할 수 있습니다.

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

← 결과에서 문서 점수 매기기